Files
makelore/tests/unit/after-pack-hygiene.test.ts
brother7 03a9e866d4 Merge branch 'main' of https://git.nianxx.cn/wangxuming/makelore
# Conflicts:
#	electron/coding-runtime/pi/extensions/makelore-runtime.ts
2026-08-31 15:06:37 +08:00

68 lines
2.2 KiB
TypeScript

import { mkdirSync, mkdtempSync, rmSync, writeFileSync } from 'node:fs';
import { tmpdir } from 'node:os';
import { join } from 'node:path';
import { createRequire } from 'node:module';
import { afterEach, describe, expect, it } from 'vitest';
const require = createRequire(import.meta.url);
const afterPack = require('../../scripts/after-pack.cjs') as {
assertNoPersistedUserData?: (appOutDir: string) => void;
};
const tempDirs: string[] = [];
function makeTempDir(): string {
const dir = mkdtempSync(join(tmpdir(), 'niancode-after-pack-'));
tempDirs.push(dir);
return dir;
}
afterEach(() => {
for (const dir of tempDirs.splice(0)) {
rmSync(dir, { recursive: true, force: true });
}
});
describe('after-pack package hygiene', () => {
it('rejects persisted user provider data in packaged app output', () => {
const appOutDir = makeTempDir();
const resourcesDir = join(appOutDir, 'resources');
mkdirSync(resourcesDir, { recursive: true });
writeFileSync(
join(resourcesDir, 'niancode-providers.json'),
JSON.stringify({
providerAccounts: {
deepseek: { model: 'deepseek-v4-pro' },
},
apiKeys: {
deepseek: 'sk-real-user-key',
},
}),
);
expect(() => afterPack.assertNoPersistedUserData?.(appOutDir)).toThrow(
/Persisted Makelore user data must not be packaged/,
);
});
it('rejects the Makelore project catalog in packaged app output', () => {
const appOutDir = makeTempDir();
const resourcesDir = join(appOutDir, 'resources');
mkdirSync(resourcesDir, { recursive: true });
writeFileSync(join(resourcesDir, 'makelore-projects.json'), JSON.stringify({ projects: {} }));
expect(() => afterPack.assertNoPersistedUserData?.(appOutDir)).toThrow(
/Persisted Makelore user data must not be packaged/,
);
});
it('allows normal package resources without persisted user data files', () => {
const appOutDir = makeTempDir();
const resourcesDir = join(appOutDir, 'resources', 'resources', 'icons');
mkdirSync(resourcesDir, { recursive: true });
writeFileSync(join(resourcesDir, 'icon.png'), '');
expect(() => afterPack.assertNoPersistedUserData?.(appOutDir)).not.toThrow();
});
});