118 lines
3.3 KiB
TypeScript
118 lines
3.3 KiB
TypeScript
import { sequelize } from "@server/storage/database";
|
|
import { buildDocument, buildUser } from "@server/test/factories";
|
|
import documentDuplicator from "./documentDuplicator";
|
|
|
|
describe("documentDuplicator", () => {
|
|
const ip = "127.0.0.1";
|
|
|
|
it("should duplicate existing document", async () => {
|
|
const user = await buildUser();
|
|
const original = await buildDocument({
|
|
userId: user.id,
|
|
teamId: user.teamId,
|
|
});
|
|
|
|
const response = await sequelize.transaction((transaction) =>
|
|
documentDuplicator({
|
|
document: original,
|
|
collection: original.collection,
|
|
transaction,
|
|
user,
|
|
ip,
|
|
})
|
|
);
|
|
|
|
expect(response).toHaveLength(1);
|
|
expect(response[0].title).toEqual(original.title);
|
|
expect(response[0].text).toEqual(original.text);
|
|
expect(response[0].emoji).toEqual(original.emoji);
|
|
expect(response[0].icon).toEqual(original.icon);
|
|
expect(response[0].color).toEqual(original.color);
|
|
expect(response[0].publishedAt).toBeInstanceOf(Date);
|
|
});
|
|
|
|
it("should duplicate document with title override", async () => {
|
|
const user = await buildUser();
|
|
const original = await buildDocument({
|
|
userId: user.id,
|
|
teamId: user.teamId,
|
|
icon: "👋",
|
|
});
|
|
|
|
const response = await sequelize.transaction((transaction) =>
|
|
documentDuplicator({
|
|
document: original,
|
|
collection: original.collection,
|
|
title: "New title",
|
|
transaction,
|
|
user,
|
|
ip,
|
|
})
|
|
);
|
|
|
|
expect(response).toHaveLength(1);
|
|
expect(response[0].title).toEqual("New title");
|
|
expect(response[0].text).toEqual(original.text);
|
|
expect(response[0].emoji).toEqual(original.icon);
|
|
expect(response[0].icon).toEqual(original.icon);
|
|
expect(response[0].color).toEqual(original.color);
|
|
expect(response[0].publishedAt).toBeInstanceOf(Date);
|
|
});
|
|
|
|
it("should duplicate child documents with recursive=true", async () => {
|
|
const user = await buildUser();
|
|
const original = await buildDocument({
|
|
userId: user.id,
|
|
teamId: user.teamId,
|
|
icon: "👋",
|
|
});
|
|
|
|
await buildDocument({
|
|
userId: user.id,
|
|
teamId: user.teamId,
|
|
parentDocumentId: original.id,
|
|
collection: original.collection,
|
|
});
|
|
|
|
const response = await sequelize.transaction((transaction) =>
|
|
documentDuplicator({
|
|
document: original,
|
|
collection: original.collection,
|
|
user,
|
|
transaction,
|
|
recursive: true,
|
|
ip,
|
|
})
|
|
);
|
|
|
|
expect(response).toHaveLength(2);
|
|
});
|
|
|
|
it("should duplicate existing document as draft", async () => {
|
|
const user = await buildUser();
|
|
const original = await buildDocument({
|
|
userId: user.id,
|
|
teamId: user.teamId,
|
|
});
|
|
|
|
const response = await sequelize.transaction((transaction) =>
|
|
documentDuplicator({
|
|
document: original,
|
|
collection: original.collection,
|
|
transaction,
|
|
publish: false,
|
|
user,
|
|
ip,
|
|
})
|
|
);
|
|
|
|
expect(response).toHaveLength(1);
|
|
expect(response[0].title).toEqual(original.title);
|
|
expect(response[0].text).toEqual(original.text);
|
|
expect(response[0].emoji).toEqual(original.emoji);
|
|
expect(response[0].icon).toEqual(original.icon);
|
|
expect(response[0].color).toEqual(original.color);
|
|
expect(response[0].publishedAt).toBeNull();
|
|
});
|
|
});
|