fix: Revision skipped after identical previous autosave
This commit is contained in:
parent
38d1831259
commit
c298c73240
|
@ -18,15 +18,14 @@ const serializer = new MarkdownSerializer();
|
|||
|
||||
export const DOCUMENT_VERSION = 2;
|
||||
|
||||
const createRevision = (doc, options = {}) => {
|
||||
const createRevision = async (doc, options = {}) => {
|
||||
// we don't create revisions for autosaves
|
||||
if (options.autosave) return;
|
||||
|
||||
const previous = await Revision.findLatest(doc.id);
|
||||
|
||||
// we don't create revisions if identical to previous
|
||||
if (
|
||||
doc.text === doc.previous("text") &&
|
||||
doc.title === doc.previous("title")
|
||||
) {
|
||||
if (previous && doc.text === previous.text && doc.title === previous.title) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/* eslint-disable flowtype/require-valid-file-annotation */
|
||||
import { Document } from "../models";
|
||||
import { Document, Revision } from "../models";
|
||||
import {
|
||||
buildDocument,
|
||||
buildCollection,
|
||||
|
@ -11,6 +11,37 @@ import { flushdb } from "../test/support";
|
|||
beforeEach(() => flushdb());
|
||||
beforeEach(jest.resetAllMocks);
|
||||
|
||||
describe("#createRevision", () => {
|
||||
test("should create revision on document creation", async () => {
|
||||
const document = await buildDocument();
|
||||
|
||||
document.title = "Changed";
|
||||
await document.save({ autosave: true });
|
||||
|
||||
const amount = await Revision.count({ where: { documentId: document.id } });
|
||||
expect(amount).toBe(1);
|
||||
});
|
||||
|
||||
test("should create revision on document update identical to previous autosave", async () => {
|
||||
const document = await buildDocument();
|
||||
|
||||
document.title = "Changed";
|
||||
await document.save({ autosave: true });
|
||||
|
||||
document.title = "Changed";
|
||||
await document.save();
|
||||
|
||||
const amount = await Revision.count({ where: { documentId: document.id } });
|
||||
expect(amount).toBe(2);
|
||||
});
|
||||
|
||||
test("should not create revision if autosave", async () => {
|
||||
const document = await buildDocument();
|
||||
const amount = await Revision.count({ where: { documentId: document.id } });
|
||||
expect(amount).toBe(1);
|
||||
});
|
||||
});
|
||||
|
||||
describe("#getSummary", () => {
|
||||
test("should strip markdown", async () => {
|
||||
const document = await buildDocument({
|
||||
|
|
|
@ -40,6 +40,15 @@ Revision.associate = (models) => {
|
|||
);
|
||||
};
|
||||
|
||||
Revision.findLatest = function (documentId) {
|
||||
return Revision.findOne({
|
||||
where: {
|
||||
documentId,
|
||||
},
|
||||
order: [["createdAt", "DESC"]],
|
||||
});
|
||||
};
|
||||
|
||||
Revision.prototype.migrateVersion = function () {
|
||||
let migrated = false;
|
||||
|
||||
|
|
|
@ -0,0 +1,27 @@
|
|||
/* eslint-disable flowtype/require-valid-file-annotation */
|
||||
import { Revision } from "../models";
|
||||
import { buildDocument } from "../test/factories";
|
||||
import { flushdb } from "../test/support";
|
||||
|
||||
beforeEach(() => flushdb());
|
||||
beforeEach(jest.resetAllMocks);
|
||||
|
||||
describe("#findLatest", () => {
|
||||
test("should return latest revision", async () => {
|
||||
const document = await buildDocument({
|
||||
title: "Title",
|
||||
text: "Content",
|
||||
});
|
||||
|
||||
document.title = "Changed 1";
|
||||
await document.save();
|
||||
|
||||
document.title = "Changed 2";
|
||||
await document.save();
|
||||
|
||||
const revision = await Revision.findLatest(document.id);
|
||||
|
||||
expect(revision.title).toBe("Changed 2");
|
||||
expect(revision.text).toBe("Content");
|
||||
});
|
||||
});
|
Reference in New Issue