diff --git a/server/commands/documentDuplicator.test.ts b/server/commands/documentDuplicator.test.ts index 3c5a636852..69db89dfba 100644 --- a/server/commands/documentDuplicator.test.ts +++ b/server/commands/documentDuplicator.test.ts @@ -200,4 +200,64 @@ describe("documentDuplicator", () => { ); expect(duplicatedChild?.sourceMetadata?.fileName).toEqual("child.md"); }); + + it("should copy fullWidth property when duplicating document", async () => { + const user = await buildUser(); + const original = await buildDocument({ + userId: user.id, + teamId: user.teamId, + fullWidth: true, + }); + + const response = await withAPIContext(user, (ctx) => + documentDuplicator(ctx, { + document: original, + collection: original.collection, + }) + ); + + expect(response).toHaveLength(1); + expect(response[0].fullWidth).toBe(true); + }); + + it("should copy fullWidth property to child documents when duplicating recursively", async () => { + const user = await buildUser(); + const collection = await buildCollection({ + teamId: user.teamId, + userId: user.id, + }); + + const original = await buildDocument({ + userId: user.id, + teamId: user.teamId, + fullWidth: true, + collectionId: collection.id, + }); + + await buildDocument({ + userId: user.id, + teamId: user.teamId, + parentDocumentId: original.id, + fullWidth: true, + collectionId: collection.id, + }); + + const response = await withAPIContext(user, (ctx) => + documentDuplicator(ctx, { + document: original, + collection: original.collection, + recursive: true, + }) + ); + + expect(response).toHaveLength(2); + + // Check parent document + const duplicatedParent = response.find((doc) => !doc.parentDocumentId); + expect(duplicatedParent?.fullWidth).toBe(true); + + // Check child document + const duplicatedChild = response.find((doc) => doc.parentDocumentId); + expect(duplicatedChild?.fullWidth).toBe(true); + }); }); diff --git a/server/commands/documentDuplicator.ts b/server/commands/documentDuplicator.ts index b8c05a9928..ba47943b13 100644 --- a/server/commands/documentDuplicator.ts +++ b/server/commands/documentDuplicator.ts @@ -35,6 +35,7 @@ export default async function documentDuplicator( parentDocumentId, icon: document.icon, color: document.color, + fullWidth: document.fullWidth, title: title ?? document.title, content: ProsemirrorHelper.removeMarks( DocumentHelper.toProsemirror(document), @@ -85,6 +86,7 @@ export default async function documentDuplicator( parentDocumentId: duplicatedDocument.id, icon: childDocument.icon, color: childDocument.color, + fullWidth: childDocument.fullWidth, title: childDocument.title, content: ProsemirrorHelper.removeMarks( DocumentHelper.toProsemirror(childDocument), diff --git a/server/routes/api/documents/documents.test.ts b/server/routes/api/documents/documents.test.ts index 1353d41bb2..1876d1057b 100644 --- a/server/routes/api/documents/documents.test.ts +++ b/server/routes/api/documents/documents.test.ts @@ -5634,6 +5634,69 @@ describe("#documents.memberships", () => { }); }); +describe("#documents.duplicate", () => { + it("should require authentication", async () => { + const res = await server.post("/api/documents.duplicate"); + expect(res.status).toEqual(401); + }); + + it("should duplicate a document with fullWidth property", async () => { + const user = await buildUser(); + const document = await buildDocument({ + userId: user.id, + teamId: user.teamId, + fullWidth: true, + }); + + const res = await server.post("/api/documents.duplicate", { + body: { + token: user.getJwtToken(), + id: document.id, + }, + }); + const body = await res.json(); + + expect(res.status).toEqual(200); + expect(body.data.documents).toHaveLength(1); + expect(body.data.documents[0].fullWidth).toBe(true); + }); + + it("should duplicate child documents with fullWidth property when recursive=true", async () => { + const user = await buildUser(); + const collection = await buildCollection({ + userId: user.id, + teamId: user.teamId, + }); + const parent = await buildDocument({ + userId: user.id, + teamId: user.teamId, + collectionId: collection.id, + fullWidth: true, + }); + await buildDocument({ + userId: user.id, + teamId: user.teamId, + collectionId: collection.id, + parentDocumentId: parent.id, + fullWidth: true, + }); + + const res = await server.post("/api/documents.duplicate", { + body: { + token: user.getJwtToken(), + id: parent.id, + recursive: true, + }, + }); + const body = await res.json(); + + expect(res.status).toEqual(200); + expect(body.data.documents).toHaveLength(2); + expect(body.data.documents[0].fullWidth).toBe(true); + expect(body.data.documents[1].fullWidth).toBe(true); + }); +}); + describe("#documents.empty_trash", () => { it("should require authentication", async () => { const res = await server.post("/api/documents.empty_trash");