const assert = require("node:assert/strict"); const fs = require("node:fs"); const os = require("node:os"); const path = require("node:path"); const test = require("node:test"); const { createModelHandlers } = require("../model-handlers"); const { callServer } = require("../server-client"); const { createApp } = require("../../server/src/app"); const { JsonStore } = require("../../server/src/store"); test("panel model kernel renames, overwrites, lists both names, and deletes on the server", async (context) => { const dataDirectory = await fs.promises.mkdtemp(path.join(os.tmpdir(), "reinloop-panel-server-")); const store = new JsonStore(dataDirectory); await store.initialize(); const app = createApp({ store, adminToken: "test-token" }); const server = await new Promise((resolve) => { const listeningServer = app.listen(0, "127.0.0.1", () => resolve(listeningServer)); }); context.after(async () => { await new Promise((resolve, reject) => server.close((error) => error ? reject(error) : resolve())); await fs.promises.rm(dataDirectory, { recursive: true, force: true }); }); const credentials = { apiUrl: `http://127.0.0.1:${server.address().port}/api`, adminToken: "test-token" }; const handlers = createModelHandlers({ callServer }); const sourcePath = path.join(dataDirectory, "controller-original.bin"); const request = { deviceId: "company-a/line-1", sourcePath, fileName: "controller-original.bin", modelName: "pressure-controller.bin", credentials }; await fs.promises.writeFile(sourcePath, "first-version"); const uploaded = await handlers.upload(request); assert.equal(uploaded.fileName, "pressure-controller.bin"); assert.equal(uploaded.originalFileName, "controller-original.bin"); await fs.promises.writeFile(sourcePath, "second-version"); const overwritten = await handlers.upload({ ...request, overwrite: true }); assert.equal(overwritten.fileID, uploaded.fileID); const listed = await handlers.list({ deviceId: request.deviceId, credentials }); assert.equal(listed.fileList.length, 1); assert.equal(listed.fileList[0].fileName, "pressure-controller.bin"); assert.equal(listed.fileList[0].originalFileName, "controller-original.bin"); const deleted = await handlers.delete({ fileID: overwritten.fileID, credentials }); assert.equal(deleted.deletedCount, 1); const afterDelete = await handlers.list({ deviceId: request.deviceId, credentials }); assert.deepEqual(afterDelete.fileList, []); await assert.rejects(fs.promises.access( path.join(dataDirectory, "models", "company-a", "line-1", "pressure-controller.bin") ), { code: "ENOENT" }); });