Files
outline/server/models/base/Model.test.ts
Tom Moor 234613580d fix: User updates are not synced between clients (#6490)
* Add Model.changeset method to get minified changes since last update

* fix: Handle arrays

* Add changes column, types

* test
2024-02-04 10:36:43 -08:00

53 lines
1.9 KiB
TypeScript

import { v4 as uuid } from "uuid";
import { TeamPreference } from "@shared/types";
import { buildDocument, buildTeam } from "@server/test/factories";
describe("Model", () => {
describe("changeset", () => {
it("should return attributes changed since last save", async () => {
const team = await buildTeam({
name: "Test Team",
});
team.name = "New Name";
expect(Object.keys(team.changeset.attributes).length).toEqual(1);
expect(Object.keys(team.changeset.previous).length).toEqual(1);
expect(team.changeset.attributes.name).toEqual("New Name");
expect(team.changeset.previous.name).toEqual("Test Team");
await team.save();
expect(team.changeset.attributes).toEqual({});
expect(team.changeset.previous).toEqual({});
});
it("should return partial of objects", async () => {
const team = await buildTeam();
team.setPreference(TeamPreference.Commenting, false);
expect(team.changeset.attributes.preferences).toEqual({
commenting: false,
});
expect(team.changeset.previous.preferences).toEqual({});
});
it("should return boolean values", async () => {
const team = await buildTeam({
guestSignin: false,
});
team.guestSignin = true;
expect(team.changeset.attributes.guestSignin).toEqual(true);
expect(team.changeset.previous.guestSignin).toEqual(false);
});
it("should return full array if value changed", async () => {
const collaboratorId = uuid();
const document = await buildDocument();
const prev = document.collaboratorIds;
document.collaboratorIds = [...document.collaboratorIds, collaboratorId];
expect(document.changeset.attributes.collaboratorIds).toEqual(
document.collaboratorIds
);
expect(document.changeset.previous.collaboratorIds).toEqual(prev);
});
});
});