40 lines
1.4 KiB
TypeScript
40 lines
1.4 KiB
TypeScript
|
|
import test from "node:test";
|
||
|
|
import assert from "node:assert/strict";
|
||
|
|
|
||
|
|
import { UploadController } from "../../../lib/uploadService";
|
||
|
|
import {
|
||
|
|
cancelExternalUploadRuntime,
|
||
|
|
getExternalUploadController,
|
||
|
|
registerExternalUploadController,
|
||
|
|
resetExternalUploadRuntimeForTests,
|
||
|
|
unregisterExternalUploadController,
|
||
|
|
} from "./externalUploadRuntime";
|
||
|
|
|
||
|
|
test("external upload controls survive their originating panel unmount", async (t) => {
|
||
|
|
resetExternalUploadRuntimeForTests();
|
||
|
|
t.after(resetExternalUploadRuntimeForTests);
|
||
|
|
|
||
|
|
const cancelled: string[] = [];
|
||
|
|
const controller = new UploadController();
|
||
|
|
controller.setBridge({
|
||
|
|
mkdirSftp: async () => {},
|
||
|
|
cancelTransfer: async (transferId) => {
|
||
|
|
cancelled.push(transferId);
|
||
|
|
},
|
||
|
|
});
|
||
|
|
controller.addActiveTransfer("child-1");
|
||
|
|
|
||
|
|
registerExternalUploadController("folder-1", controller);
|
||
|
|
registerExternalUploadController("child-1", controller);
|
||
|
|
|
||
|
|
// A React panel unmount does not unregister process-level upload controls.
|
||
|
|
assert.equal(getExternalUploadController("folder-1"), controller);
|
||
|
|
await cancelExternalUploadRuntime("folder-1");
|
||
|
|
assert.equal(controller.isCancelled(), true);
|
||
|
|
assert.deepEqual(cancelled, ["child-1"]);
|
||
|
|
|
||
|
|
unregisterExternalUploadController(controller);
|
||
|
|
assert.equal(getExternalUploadController("folder-1"), undefined);
|
||
|
|
assert.equal(getExternalUploadController("child-1"), undefined);
|
||
|
|
});
|