Files

74 lines
2.6 KiB
TypeScript

import { afterEach, describe, expect, test, vi } from 'vitest';
const load = async () => {
vi.resetModules();
process.env.SPOON_WORKER_TOKEN = 'test-worker-token';
process.env.GITHUB_APP_ID = '123';
process.env.GITHUB_APP_PRIVATE_KEY =
'-----BEGIN PRIVATE KEY-----\ntest\n-----END PRIVATE KEY-----';
return await import('../../src/worker');
};
describe('planWorkdirCleanup', () => {
afterEach(() => vi.resetModules());
test('never removes the homes/ root or any home directory', async () => {
const { planWorkdirCleanup } = await load();
const plan = planWorkdirCleanup({
root: '/work',
rootEntries: [{ name: 'homes', isDirectory: true }],
homesEntries: { alice: [{ name: 'Code', isDirectory: true }] },
codeLeaves: {},
activeWorkdirs: new Set(),
runningBoxUsernames: new Set(),
});
expect(plan.removeDirs).not.toContain('/work/homes');
expect(plan.removeDirs).not.toContain('/work/homes/alice');
});
test('removes legacy top-level job dirs not in the active set', async () => {
const { planWorkdirCleanup } = await load();
const plan = planWorkdirCleanup({
root: '/work',
rootEntries: [
{ name: 'homes', isDirectory: true },
{ name: 'legacy-job-123', isDirectory: true },
{ name: 'dev', isDirectory: true },
],
homesEntries: {},
codeLeaves: {},
activeWorkdirs: new Set(['/work/dev']),
runningBoxUsernames: new Set(),
});
expect(plan.removeDirs).toContain('/work/legacy-job-123');
expect(plan.removeDirs).not.toContain('/work/dev');
expect(plan.removeDirs).not.toContain('/work/homes');
});
test('removes per-thread checkouts only for users with no running box', async () => {
const { planWorkdirCleanup } = await load();
const plan = planWorkdirCleanup({
root: '/work',
rootEntries: [{ name: 'homes', isDirectory: true }],
homesEntries: {
alice: [{ name: 'Code', isDirectory: true }],
bob: [{ name: 'Code', isDirectory: true }],
},
codeLeaves: {
alice: ['/work/homes/alice/Code/spoon-a/branch-x'],
bob: ['/work/homes/bob/Code/spoon-b/branch-y'],
},
activeWorkdirs: new Set(),
runningBoxUsernames: new Set(['bob']),
});
expect(plan.removeDirs).toContain(
'/work/homes/alice/Code/spoon-a/branch-x',
);
expect(plan.removeDirs).not.toContain(
'/work/homes/bob/Code/spoon-b/branch-y',
);
expect(plan.removeDirs).not.toContain('/work/homes/alice');
expect(plan.removeDirs).not.toContain('/work/homes/alice/Code');
});
});