1
0
mirror of https://github.com/laurent22/joplin.git synced 2025-07-13 00:10:37 +02:00

Desktop,Mobile,Cli: Fixes #11017: Delete revisions on the sync target when deleted locally (#11035)

This commit is contained in:
Henry Heino
2024-09-21 05:04:54 -07:00
committed by GitHub
parent a56f104fe8
commit d13e7b32c3
3 changed files with 152 additions and 28 deletions

View File

@ -181,4 +181,53 @@ describe('Synchronizer.revisions', () => {
expect((await Revision.all()).length).toBe(0);
}));
it('should delete old revisions remotely when deleted locally', async () => {
Setting.setValue('revisionService.intervalBetweenRevisions', 100);
jest.useFakeTimers({ advanceTimers: true });
const note = await Note.save({ title: 'note' });
const getNoteRevisions = () => {
return Revision.allByType(BaseModel.TYPE_NOTE, note.id);
};
jest.advanceTimersByTime(200);
await Note.save({ id: note.id, title: 'note REV0' });
jest.advanceTimersByTime(200);
await revisionService().collectRevisions(); // REV0
expect(await getNoteRevisions()).toHaveLength(1);
jest.advanceTimersByTime(200);
await Note.save({ id: note.id, title: 'note REV1' });
await revisionService().collectRevisions(); // REV1
expect(await getNoteRevisions()).toHaveLength(2);
// Should sync the revisions
await synchronizer().start();
await switchClient(2);
await synchronizer().start();
expect(await getNoteRevisions()).toHaveLength(2);
await revisionService().deleteOldRevisions(100);
expect(await getNoteRevisions()).toHaveLength(0);
await synchronizer().start();
expect(await getNoteRevisions()).toHaveLength(0);
// Syncing a new client should not download the deleted revisions
await setupDatabaseAndSynchronizer(3);
await switchClient(3);
await synchronizer().start();
expect(await getNoteRevisions()).toHaveLength(0);
// After switching back to the original client, syncing should locally delete
// the remotely deleted revisions.
await switchClient(1);
expect(await getNoteRevisions()).toHaveLength(2);
await synchronizer().start();
expect(await getNoteRevisions()).toHaveLength(0);
jest.useRealTimers();
});
});