|
1 | 1 | import assert from 'node:assert/strict'; |
| 2 | +import { posix, win32 } from 'node:path'; |
2 | 3 | import test from 'node:test'; |
3 | 4 | import { resolveDataDirForTest } from './paths.js'; |
4 | 5 |
|
5 | | -test('resolveDataDirForTest uses absolute DATA_DIR verbatim', () => { |
6 | | - const dataDir = resolveDataDirForTest({ |
7 | | - envDataDir: 'C:/data/chatcrystal', |
8 | | - packageRoot: 'C:/pkg/server', |
9 | | - workspaceRoot: 'C:/pkg', |
10 | | - homeDir: 'C:/Users/Rayner', |
11 | | - }); |
12 | | - |
13 | | - assert.equal(dataDir, 'C:/data/chatcrystal'); |
14 | | -}); |
15 | | - |
16 | | -test('resolveDataDirForTest resolves relative DATA_DIR against workspace root', () => { |
17 | | - const dataDir = resolveDataDirForTest({ |
18 | | - envDataDir: './data', |
| 6 | +const pathCases = [ |
| 7 | + { |
| 8 | + name: 'Windows', |
| 9 | + pathResolver: win32, |
| 10 | + absoluteDataDir: 'C:/data/chatcrystal', |
19 | 11 | packageRoot: 'C:/repo/server', |
20 | 12 | workspaceRoot: 'C:/repo', |
| 13 | + globalPackageRoot: 'C:/global/node_modules/chatcrystal', |
21 | 14 | homeDir: 'C:/Users/Rayner', |
| 15 | + }, |
| 16 | + { |
| 17 | + name: 'POSIX', |
| 18 | + pathResolver: posix, |
| 19 | + absoluteDataDir: '/data/chatcrystal', |
| 20 | + packageRoot: '/repo/server', |
| 21 | + workspaceRoot: '/repo', |
| 22 | + globalPackageRoot: '/global/node_modules/chatcrystal', |
| 23 | + homeDir: '/home/rayner', |
| 24 | + }, |
| 25 | +]; |
| 26 | + |
| 27 | +for (const pathCase of pathCases) { |
| 28 | + test(`resolveDataDirForTest uses absolute DATA_DIR verbatim on ${pathCase.name}`, () => { |
| 29 | + const dataDir = resolveDataDirForTest({ |
| 30 | + envDataDir: pathCase.absoluteDataDir, |
| 31 | + packageRoot: pathCase.packageRoot, |
| 32 | + workspaceRoot: pathCase.workspaceRoot, |
| 33 | + homeDir: pathCase.homeDir, |
| 34 | + pathResolver: pathCase.pathResolver, |
| 35 | + }); |
| 36 | + |
| 37 | + assert.equal(dataDir, pathCase.absoluteDataDir); |
22 | 38 | }); |
23 | 39 |
|
24 | | - assert.equal(dataDir, 'C:\\repo\\data'); |
25 | | -}); |
| 40 | + test(`resolveDataDirForTest resolves relative DATA_DIR against workspace root on ${pathCase.name}`, () => { |
| 41 | + const dataDir = resolveDataDirForTest({ |
| 42 | + envDataDir: './data', |
| 43 | + packageRoot: pathCase.packageRoot, |
| 44 | + workspaceRoot: pathCase.workspaceRoot, |
| 45 | + homeDir: pathCase.homeDir, |
| 46 | + pathResolver: pathCase.pathResolver, |
| 47 | + }); |
26 | 48 |
|
27 | | -test('resolveDataDirForTest falls back to package root when no workspace root exists', () => { |
28 | | - const dataDir = resolveDataDirForTest({ |
29 | | - envDataDir: './data', |
30 | | - packageRoot: 'C:/global/node_modules/chatcrystal', |
31 | | - workspaceRoot: null, |
32 | | - homeDir: 'C:/Users/Rayner', |
| 49 | + assert.equal(dataDir, pathCase.pathResolver.resolve(pathCase.workspaceRoot, 'data')); |
33 | 50 | }); |
34 | 51 |
|
35 | | - assert.equal(dataDir, 'C:\\global\\node_modules\\chatcrystal\\data'); |
36 | | -}); |
| 52 | + test(`resolveDataDirForTest falls back to package root when no workspace root exists on ${pathCase.name}`, () => { |
| 53 | + const dataDir = resolveDataDirForTest({ |
| 54 | + envDataDir: './data', |
| 55 | + packageRoot: pathCase.globalPackageRoot, |
| 56 | + workspaceRoot: null, |
| 57 | + homeDir: pathCase.homeDir, |
| 58 | + pathResolver: pathCase.pathResolver, |
| 59 | + }); |
37 | 60 |
|
38 | | -test('resolveDataDirForTest defaults to ~/.chatcrystal/data when DATA_DIR is unset in a repo checkout', () => { |
39 | | - const dataDir = resolveDataDirForTest({ |
40 | | - packageRoot: 'C:/repo/server', |
41 | | - workspaceRoot: 'C:/repo', |
42 | | - homeDir: 'C:/Users/Rayner', |
| 61 | + assert.equal(dataDir, pathCase.pathResolver.resolve(pathCase.globalPackageRoot, 'data')); |
43 | 62 | }); |
44 | 63 |
|
45 | | - assert.equal(dataDir, 'C:\\Users\\Rayner\\.chatcrystal\\data'); |
46 | | -}); |
| 64 | + test(`resolveDataDirForTest defaults to ~/.chatcrystal/data when DATA_DIR is unset in a repo checkout on ${pathCase.name}`, () => { |
| 65 | + const dataDir = resolveDataDirForTest({ |
| 66 | + packageRoot: pathCase.packageRoot, |
| 67 | + workspaceRoot: pathCase.workspaceRoot, |
| 68 | + homeDir: pathCase.homeDir, |
| 69 | + pathResolver: pathCase.pathResolver, |
| 70 | + }); |
47 | 71 |
|
48 | | -test('resolveDataDirForTest defaults to ~/.chatcrystal/data when installed outside a workspace', () => { |
49 | | - const dataDir = resolveDataDirForTest({ |
50 | | - packageRoot: 'C:/Users/Rayner/AppData/Roaming/npm/node_modules/chatcrystal', |
51 | | - workspaceRoot: null, |
52 | | - homeDir: 'C:/Users/Rayner', |
| 72 | + assert.equal(dataDir, pathCase.pathResolver.resolve(pathCase.homeDir, '.chatcrystal', 'data')); |
53 | 73 | }); |
54 | 74 |
|
55 | | - assert.equal(dataDir, 'C:\\Users\\Rayner\\.chatcrystal\\data'); |
56 | | -}); |
| 75 | + test(`resolveDataDirForTest defaults to ~/.chatcrystal/data when installed outside a workspace on ${pathCase.name}`, () => { |
| 76 | + const dataDir = resolveDataDirForTest({ |
| 77 | + packageRoot: pathCase.globalPackageRoot, |
| 78 | + workspaceRoot: null, |
| 79 | + homeDir: pathCase.homeDir, |
| 80 | + pathResolver: pathCase.pathResolver, |
| 81 | + }); |
| 82 | + |
| 83 | + assert.equal(dataDir, pathCase.pathResolver.resolve(pathCase.homeDir, '.chatcrystal', 'data')); |
| 84 | + }); |
| 85 | +} |
0 commit comments