Add project overview import
This commit is contained in:
@@ -0,0 +1,84 @@
|
||||
import assert from "node:assert/strict";
|
||||
import { describe, it } from "node:test";
|
||||
import * as React from "react";
|
||||
import { renderToStaticMarkup } from "react-dom/server";
|
||||
import ProjectsPage from "../src/app/projects/page.js";
|
||||
import { importProjectTransferAsNew } from "../src/frontend/utils/api.js";
|
||||
import { importProjectTransferAsNewSchema } from "../src/shared/validation/project-transfer.schemas.js";
|
||||
|
||||
describe("project overview import", () => {
|
||||
it("renders a dedicated import-as-new-project entry point", () => {
|
||||
const globalWithReact = globalThis as typeof globalThis & {
|
||||
React?: typeof React;
|
||||
};
|
||||
const originalReact = globalWithReact.React;
|
||||
globalWithReact.React = React;
|
||||
let markup: string;
|
||||
try {
|
||||
markup = renderToStaticMarkup(React.createElement(ProjectsPage));
|
||||
} finally {
|
||||
globalWithReact.React = originalReact;
|
||||
}
|
||||
|
||||
assert.match(markup, /Projekt importieren/);
|
||||
assert.match(markup, /Projektdatei auswählen/);
|
||||
assert.match(markup, /Als neues Projekt importieren/);
|
||||
assert.doesNotMatch(markup, /Dieses Projekt ersetzen/);
|
||||
});
|
||||
|
||||
it("uses the collection import endpoint without a target project id", async () => {
|
||||
const requests: Array<{
|
||||
url: string;
|
||||
method: string;
|
||||
body: unknown;
|
||||
}> = [];
|
||||
const originalFetch = globalThis.fetch;
|
||||
globalThis.fetch = async (input, init) => {
|
||||
requests.push({
|
||||
url: String(input),
|
||||
method: init?.method ?? "GET",
|
||||
body: init?.body ? JSON.parse(String(init.body)) : null,
|
||||
});
|
||||
return new Response(
|
||||
JSON.stringify({ projectId: "project-copy", name: "Projekt (Kopie)" }),
|
||||
{
|
||||
status: 201,
|
||||
headers: { "Content-Type": "application/json" },
|
||||
}
|
||||
);
|
||||
};
|
||||
|
||||
try {
|
||||
const transfer = { format: "test" };
|
||||
const result = await importProjectTransferAsNew(transfer);
|
||||
assert.deepEqual(result, {
|
||||
projectId: "project-copy",
|
||||
name: "Projekt (Kopie)",
|
||||
});
|
||||
assert.deepEqual(requests, [
|
||||
{
|
||||
url: "/api/projects/import",
|
||||
method: "POST",
|
||||
body: { transfer },
|
||||
},
|
||||
]);
|
||||
} finally {
|
||||
globalThis.fetch = originalFetch;
|
||||
}
|
||||
});
|
||||
|
||||
it("accepts only the strict transfer wrapper", () => {
|
||||
assert.equal(
|
||||
importProjectTransferAsNewSchema.safeParse({ transfer: {} }).success,
|
||||
true
|
||||
);
|
||||
assert.equal(importProjectTransferAsNewSchema.safeParse({}).success, false);
|
||||
assert.equal(
|
||||
importProjectTransferAsNewSchema.safeParse({
|
||||
transfer: {},
|
||||
mode: "replace",
|
||||
}).success,
|
||||
false
|
||||
);
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user