fix(snjs): history revisions specs

This commit is contained in:
Karol Sójko
2023-01-18 12:41:57 +01:00
parent d734574a7e
commit 24cda40dde
2 changed files with 19 additions and 19 deletions

View File

@@ -258,6 +258,8 @@ describe('history manager', () => {
}) })
describe('remote', function () { describe('remote', function () {
this.timeout(Factory.TwentySecondTimeout)
beforeEach(async function () { beforeEach(async function () {
this.application = await Factory.createInitAppWithFakeCrypto() this.application = await Factory.createInitAppWithFakeCrypto()
this.historyManager = this.application.historyManager this.historyManager = this.application.historyManager
@@ -300,7 +302,7 @@ describe('history manager', () => {
/** Server history should save initial revision */ /** Server history should save initial revision */
expect(itemHistory.length).to.equal(1) expect(itemHistory.length).to.equal(1)
/** Sync within 5 minutes, should not create a new entry */ /** Sync within 5 seconds (ENV VAR dependend on self-hosted setup), should not create a new entry */
await Factory.markDirtyAndSyncItem(this.application, item) await Factory.markDirtyAndSyncItem(this.application, item)
itemHistoryOrError = await this.application.listRevisions.execute({ itemUuid: item.uuid }) itemHistoryOrError = await this.application.listRevisions.execute({ itemUuid: item.uuid })
expect(itemHistoryOrError.isFailed()).to.equal(false) expect(itemHistoryOrError.isFailed()).to.equal(false)
@@ -318,6 +320,7 @@ describe('history manager', () => {
undefined, undefined,
syncOptions, syncOptions,
) )
await Factory.sleep(Factory.ServerRevisionCreationDelay)
itemHistoryOrError = await this.application.listRevisions.execute({ itemUuid: item.uuid }) itemHistoryOrError = await this.application.listRevisions.execute({ itemUuid: item.uuid })
expect(itemHistoryOrError.isFailed()).to.equal(false) expect(itemHistoryOrError.isFailed()).to.equal(false)
@@ -369,6 +372,7 @@ describe('history manager', () => {
await Factory.markDirtyAndSyncItem(this.application, note) await Factory.markDirtyAndSyncItem(this.application, note)
const dupe = await this.application.itemManager.duplicateItem(note, true) const dupe = await this.application.itemManager.duplicateItem(note, true)
await Factory.markDirtyAndSyncItem(this.application, dupe) await Factory.markDirtyAndSyncItem(this.application, dupe)
await Factory.sleep(Factory.ServerRevisionCreationDelay) await Factory.sleep(Factory.ServerRevisionCreationDelay)
const dupeHistoryOrError = await this.application.listRevisions.execute({ itemUuid: dupe.uuid }) const dupeHistoryOrError = await this.application.listRevisions.execute({ itemUuid: dupe.uuid })
@@ -382,14 +386,9 @@ describe('history manager', () => {
expect(dupeRevision.payload.uuid).to.equal(dupe.uuid) expect(dupeRevision.payload.uuid).to.equal(dupe.uuid)
}) })
it.skip('revisions count matches original for duplicated items', async function () { it('revisions count matches original for duplicated items', async function () {
/**
* We can't handle duplicate item revision because the server copies over revisions
* via a background job which we can't predict the timing of. This test is thus invalid.
*/
const note = await Factory.createSyncedNote(this.application) const note = await Factory.createSyncedNote(this.application)
/** Make a few changes to note */
await Factory.sleep(Factory.ServerRevisionFrequency) await Factory.sleep(Factory.ServerRevisionFrequency)
await Factory.markDirtyAndSyncItem(this.application, note) await Factory.markDirtyAndSyncItem(this.application, note)
@@ -402,7 +401,9 @@ describe('history manager', () => {
const dupe = await this.application.itemManager.duplicateItem(note, true) const dupe = await this.application.itemManager.duplicateItem(note, true)
await Factory.markDirtyAndSyncItem(this.application, dupe) await Factory.markDirtyAndSyncItem(this.application, dupe)
const expectedRevisions = 3 await Factory.sleep(Factory.ServerRevisionCreationDelay)
const expectedRevisions = 4
const noteHistoryOrError = await this.application.listRevisions.execute({ itemUuid: note.uuid }) const noteHistoryOrError = await this.application.listRevisions.execute({ itemUuid: note.uuid })
expect(noteHistoryOrError.isFailed()).to.equal(false) expect(noteHistoryOrError.isFailed()).to.equal(false)
const noteHistory = noteHistoryOrError.getValue() const noteHistory = noteHistoryOrError.getValue()
@@ -412,18 +413,14 @@ describe('history manager', () => {
const dupeHistory = dupeHistoryOrError.getValue() const dupeHistory = dupeHistoryOrError.getValue()
expect(noteHistory.length).to.equal(expectedRevisions) expect(noteHistory.length).to.equal(expectedRevisions)
expect(dupeHistory.length).to.equal(expectedRevisions) expect(dupeHistory.length).to.equal(expectedRevisions + 1)
}) })
it.skip('can decrypt revisions for duplicate_of items', async function () { it('can decrypt revisions for duplicate_of items', async function () {
/**
* We can't handle duplicate item revision because the server copies over revisions
* via a background job which we can't predict the timing of. This test is thus invalid.
*/
const note = await Factory.createSyncedNote(this.application) const note = await Factory.createSyncedNote(this.application)
await Factory.sleep(Factory.ServerRevisionFrequency) await Factory.sleep(Factory.ServerRevisionFrequency)
const changedText = `${Math.random()}` const changedText = `${Math.random()}`
/** Make a few changes to note */
await this.application.mutator.changeAndSaveItem(note, (mutator) => { await this.application.mutator.changeAndSaveItem(note, (mutator) => {
mutator.title = changedText mutator.title = changedText
}) })
@@ -431,14 +428,17 @@ describe('history manager', () => {
const dupe = await this.application.itemManager.duplicateItem(note, true) const dupe = await this.application.itemManager.duplicateItem(note, true)
await Factory.markDirtyAndSyncItem(this.application, dupe) await Factory.markDirtyAndSyncItem(this.application, dupe)
await Factory.sleep(Factory.ServerRevisionCreationDelay)
const itemHistoryOrError = await this.application.listRevisions.execute({ itemUuid: dupe.uuid }) const itemHistoryOrError = await this.application.listRevisions.execute({ itemUuid: dupe.uuid })
expect(itemHistoryOrError.isFailed()).to.equal(false) expect(itemHistoryOrError.isFailed()).to.equal(false)
const itemHistory = itemHistoryOrError.getValue() const itemHistory = itemHistoryOrError.getValue()
expect(itemHistory.length).to.be.above(1) expect(itemHistory.length).to.be.above(1)
const oldestRevision = lastElement(itemHistory) const newestRevision = itemHistory[0]
const fetchedOrError = await this.application.getRevision.execute({ itemUuid: dupe.uuid, revisionUuid: oldestRevision.uuid }) const fetchedOrError = await this.application.getRevision.execute({ itemUuid: dupe.uuid, revisionUuid: newestRevision.uuid })
expect(fetchedOrError.isFailed()).to.equal(false) expect(fetchedOrError.isFailed()).to.equal(false)
const fetched = fetchedOrError.getValue() const fetched = fetchedOrError.getValue()

View File

@@ -289,8 +289,8 @@ export async function storagePayloadCount(application) {
* The number of seconds between changes before a server creates a new revision. * The number of seconds between changes before a server creates a new revision.
* Controlled via docker/syncing-server-js.env * Controlled via docker/syncing-server-js.env
*/ */
export const ServerRevisionFrequency = 1.1 export const ServerRevisionFrequency = 5.1
export const ServerRevisionCreationDelay = 2 export const ServerRevisionCreationDelay = 1.5
export function yesterday() { export function yesterday() {
return new Date(new Date().setDate(new Date().getDate() - 1)) return new Date(new Date().setDate(new Date().getDate() - 1))