fix(marketplace): close release lifecycle gaps
This commit is contained in:
@@ -35,6 +35,12 @@ import { DATA_SERVICE_PLUGIN_DEFINITION } from '../../shared/coding-plugins';
|
||||
const roots: string[] = [];
|
||||
const NOW = '2026-08-22T16:00:00.000Z';
|
||||
|
||||
function deferred<T>() {
|
||||
let resolve!: (value: T | PromiseLike<T>) => void;
|
||||
const promise = new Promise<T>((yes) => { resolve = yes; });
|
||||
return { promise, resolve };
|
||||
}
|
||||
|
||||
class OpenerFakeProcess implements PiWorkerProcessAdapter {
|
||||
readonly generation = 1;
|
||||
readonly proofResponseDelays: Array<{ commandType: string; delayMs: number }> = [];
|
||||
@@ -151,9 +157,13 @@ describe('managed Pi worker opener', () => {
|
||||
effectiveSnapshot,
|
||||
})),
|
||||
} as unknown as CodingCapabilityRegistry;
|
||||
const firstReleaseCleanup = deferred<void>();
|
||||
const releaseCleanups: Array<ReturnType<typeof vi.fn>> = [];
|
||||
const registerActivePluginReleases = vi.fn((_releaseIds: readonly string[]) => {
|
||||
const cleanup = vi.fn();
|
||||
const waitForFirst = releaseCleanups.length === 0;
|
||||
const cleanup = vi.fn(async () => {
|
||||
if (waitForFirst) await firstReleaseCleanup.promise;
|
||||
});
|
||||
releaseCleanups.push(cleanup);
|
||||
return cleanup;
|
||||
});
|
||||
@@ -252,7 +262,15 @@ describe('managed Pi worker opener', () => {
|
||||
expect(processes[0]?.proofResponseDelays).toEqual([{ commandType: 'prompt', delayMs: 12_000 }]);
|
||||
expect(registerActivePluginReleases).toHaveBeenCalledTimes(3);
|
||||
expect(registerActivePluginReleases).toHaveBeenNthCalledWith(1, ['plugin-release-a']);
|
||||
await first.worker.stop('test_injection');
|
||||
let firstStopSettled = false;
|
||||
const firstStop = first.worker.stop('test_injection').then((result) => {
|
||||
firstStopSettled = true;
|
||||
return result;
|
||||
});
|
||||
await vi.waitFor(() => expect(releaseCleanups[0]).toHaveBeenCalledOnce());
|
||||
expect(firstStopSettled).toBe(false);
|
||||
firstReleaseCleanup.resolve();
|
||||
await firstStop;
|
||||
await reopened.worker.stop('test_injection');
|
||||
await restarted.worker.stop('test_injection');
|
||||
expect(releaseCleanups).toHaveLength(3);
|
||||
|
||||
Reference in New Issue
Block a user