33 lines
1.8 KiB
TypeScript
33 lines
1.8 KiB
TypeScript
// After a machine move the app folder list points at the old computer; relink finds each app here and keeps its id.
|
|
import { describe, expect, test } from 'bun:test';
|
|
import { mkdirSync, mkdtempSync, writeFileSync } from 'node:fs';
|
|
import { tmpdir } from 'node:os';
|
|
import { join } from 'node:path';
|
|
import { configAppName, configFolders, relinkPlan } from '../cli/lib/registry';
|
|
|
|
function app(root: string, rel: string, name: string): string {
|
|
const d = join(root, rel); mkdirSync(d, { recursive: true });
|
|
writeFileSync(join(d, 'storebound.config.ts'), `export default { app: { name: '${name}' } };\n`);
|
|
return d;
|
|
}
|
|
|
|
describe('apps relink', () => {
|
|
test('by the last path parts, else by the app name; ids stay; a taken folder is not reused', () => {
|
|
const root = mkdtempSync(join(tmpdir(), 'sb-relink-'));
|
|
const game = app(root, 'game-one', 'Game One');
|
|
const front = app(root, 'Studio/frontend', 'Studio');
|
|
const renamed = app(root, 'NewName/app', 'Old App');
|
|
mkdirSync(join(root, 'node_modules/x'), { recursive: true }); writeFileSync(join(root, 'node_modules/x/storebound.config.ts'), '');
|
|
const found = configFolders([root]);
|
|
expect(found.sort()).toEqual([game, front, renamed].sort());
|
|
expect(configAppName(front)).toBe('Studio');
|
|
const r = { version: 1 as const, projects: [
|
|
{ id: 'a', path: '/Users/old/Desktop/game-one', name: 'Game One', added: '' },
|
|
{ id: 'b', path: '/Users/old/Work/Studio/frontend', name: 'frontend', added: '' },
|
|
{ id: 'c', path: '/Users/old/Work/OldName/app', name: 'Old App', added: '' },
|
|
{ id: 'd', path: '/Users/old/gone', name: 'Gone', added: '' },
|
|
] };
|
|
const plan = relinkPlan(r, found, () => false, configAppName);
|
|
expect(plan.map(p => [p.id, p.to])).toEqual([['a', game], ['b', front], ['c', renamed]]);
|
|
});
|
|
});
|