* Add Model.changeset method to get minified changes since last update * fix: Handle arrays * Add changes column, types * test
53 lines
1.9 KiB
TypeScript
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);
|
|
});
|
|
});
|
|
});
|