From bb822b44f292fa8aa0ba2ed2733ee5659e40a3c6 Mon Sep 17 00:00:00 2001 From: Laurent Cozic Date: Tue, 20 Jun 2017 21:31:12 +0100 Subject: [PATCH] clean up --- CliClient/run_test.sh | 5 +- CliClient/tests/synchronizer.js | 319 ++++++++++++++++++-------------- 2 files changed, 177 insertions(+), 147 deletions(-) diff --git a/CliClient/run_test.sh b/CliClient/run_test.sh index 901a36791f..9c25717271 100755 --- a/CliClient/run_test.sh +++ b/CliClient/run_test.sh @@ -5,6 +5,5 @@ rm -f "$CLIENT_DIR/tests-build/src" mkdir -p "$CLIENT_DIR/tests-build/data" ln -s "$CLIENT_DIR/build/src" "$CLIENT_DIR/tests-build" -#npm run build && NODE_PATH="$CLIENT_DIR/tests-build/" npm test tests-build/base-model.js -npm run build && NODE_PATH="$CLIENT_DIR/tests-build/" npm test tests-build/synchronizer.js -#npm run build && NODE_PATH="$CLIENT_DIR/tests-build/" npm test tests-build/services/note-folder-service.js \ No newline at end of file +npm run build && NODE_PATH="$CLIENT_DIR/tests-build/" npm test tests-build/base-model.js +npm run build && NODE_PATH="$CLIENT_DIR/tests-build/" npm test tests-build/synchronizer.js \ No newline at end of file diff --git a/CliClient/tests/synchronizer.js b/CliClient/tests/synchronizer.js index b7eb488193..2710316950 100644 --- a/CliClient/tests/synchronizer.js +++ b/CliClient/tests/synchronizer.js @@ -42,228 +42,228 @@ describe('Synchronizer', function() { done(); }); - // it('should create remote items', async (done) => { - // let folder = await Folder.save({ title: "folder1" }); - // await Note.save({ title: "un", parent_id: folder.id }); + it('should create remote items', async (done) => { + let folder = await Folder.save({ title: "folder1" }); + await Note.save({ title: "un", parent_id: folder.id }); - // let all = await Folder.all(true); + let all = await Folder.all(true); - // await synchronizer().start(); + await synchronizer().start(); - // await localItemsSameAsRemote(all, expect); + await localItemsSameAsRemote(all, expect); - // done(); - // }); + done(); + }); - // it('should update remote item', async (done) => { - // let folder = await Folder.save({ title: "folder1" }); - // let note = await Note.save({ title: "un", parent_id: folder.id }); - // await synchronizer().start(); + it('should update remote item', async (done) => { + let folder = await Folder.save({ title: "folder1" }); + let note = await Note.save({ title: "un", parent_id: folder.id }); + await synchronizer().start(); - // await sleep(0.1); + await sleep(0.1); - // await Note.save({ title: "un UPDATE", id: note.id }); + await Note.save({ title: "un UPDATE", id: note.id }); - // let all = await Folder.all(true); - // await synchronizer().start(); + let all = await Folder.all(true); + await synchronizer().start(); - // await localItemsSameAsRemote(all, expect); + await localItemsSameAsRemote(all, expect); - // done(); - // }); + done(); + }); - // it('should create local items', async (done) => { - // let folder = await Folder.save({ title: "folder1" }); - // await Note.save({ title: "un", parent_id: folder.id }); - // await synchronizer().start(); + it('should create local items', async (done) => { + let folder = await Folder.save({ title: "folder1" }); + await Note.save({ title: "un", parent_id: folder.id }); + await synchronizer().start(); - // await switchClient(2); + await switchClient(2); - // await synchronizer().start(); + await synchronizer().start(); - // let all = await Folder.all(true); - // await localItemsSameAsRemote(all, expect); + let all = await Folder.all(true); + await localItemsSameAsRemote(all, expect); - // done(); - // }); + done(); + }); - // it('should update local items', async (done) => { - // let folder1 = await Folder.save({ title: "folder1" }); - // let note1 = await Note.save({ title: "un", parent_id: folder1.id }); - // await synchronizer().start(); + it('should update local items', async (done) => { + let folder1 = await Folder.save({ title: "folder1" }); + let note1 = await Note.save({ title: "un", parent_id: folder1.id }); + await synchronizer().start(); - // await switchClient(2); + await switchClient(2); - // await synchronizer().start(); + await synchronizer().start(); - // await sleep(0.1); + await sleep(0.1); - // let note2 = await Note.load(note1.id); - // note2.title = "Updated on client 2"; - // await Note.save(note2); + let note2 = await Note.load(note1.id); + note2.title = "Updated on client 2"; + await Note.save(note2); - // note2 = await Note.load(note2.id); + note2 = await Note.load(note2.id); - // await synchronizer().start(); + await synchronizer().start(); - // let files = await fileApi().list(); + let files = await fileApi().list(); - // await switchClient(1); + await switchClient(1); - // await synchronizer().start(); + await synchronizer().start(); - // note1 = await Note.load(note1.id); + note1 = await Note.load(note1.id); - // expect(!!note1).toBe(true); - // expect(note1.title).toBe(note2.title); - // expect(note1.body).toBe(note2.body); + expect(!!note1).toBe(true); + expect(note1.title).toBe(note2.title); + expect(note1.body).toBe(note2.body); - // done(); - // }); + done(); + }); - // it('should resolve note conflicts', async (done) => { - // let folder1 = await Folder.save({ title: "folder1" }); - // let note1 = await Note.save({ title: "un", parent_id: folder1.id }); - // await synchronizer().start(); + it('should resolve note conflicts', async (done) => { + let folder1 = await Folder.save({ title: "folder1" }); + let note1 = await Note.save({ title: "un", parent_id: folder1.id }); + await synchronizer().start(); - // await switchClient(2); + await switchClient(2); - // await synchronizer().start(); + await synchronizer().start(); - // await sleep(0.1); + await sleep(0.1); - // let note2 = await Note.load(note1.id); - // note2.title = "Updated on client 2"; - // await Note.save(note2); - // note2 = await Note.load(note2.id); + let note2 = await Note.load(note1.id); + note2.title = "Updated on client 2"; + await Note.save(note2); + note2 = await Note.load(note2.id); - // await synchronizer().start(); + await synchronizer().start(); - // await switchClient(1); + await switchClient(1); - // await sleep(0.1); + await sleep(0.1); - // let note2conf = await Note.load(note1.id); - // note2conf.title = "Updated on client 1"; - // await Note.save(note2conf); - // note2conf = await Note.load(note1.id); + let note2conf = await Note.load(note1.id); + note2conf.title = "Updated on client 1"; + await Note.save(note2conf); + note2conf = await Note.load(note1.id); - // await synchronizer().start(); + await synchronizer().start(); - // let conflictedNotes = await Note.conflictedNotes(); + let conflictedNotes = await Note.conflictedNotes(); - // expect(conflictedNotes.length).toBe(1); + expect(conflictedNotes.length).toBe(1); - // // Other than the id (since the conflicted note is a duplicate), and the is_conflict property - // // the conflicted and original note must be the same in every way, to make sure no data has been lost. - // let conflictedNote = conflictedNotes[0]; - // expect(conflictedNote.id == note2conf.id).toBe(false); - // for (let n in conflictedNote) { - // if (!conflictedNote.hasOwnProperty(n)) continue; - // if (n == 'id' || n == 'is_conflict') continue; - // expect(conflictedNote[n]).toBe(note2conf[n], 'Property: ' + n); - // } + // Other than the id (since the conflicted note is a duplicate), and the is_conflict property + // the conflicted and original note must be the same in every way, to make sure no data has been lost. + let conflictedNote = conflictedNotes[0]; + expect(conflictedNote.id == note2conf.id).toBe(false); + for (let n in conflictedNote) { + if (!conflictedNote.hasOwnProperty(n)) continue; + if (n == 'id' || n == 'is_conflict') continue; + expect(conflictedNote[n]).toBe(note2conf[n], 'Property: ' + n); + } - // let noteUpdatedFromRemote = await Note.load(note1.id); - // for (let n in noteUpdatedFromRemote) { - // if (!noteUpdatedFromRemote.hasOwnProperty(n)) continue; - // if (n == 'sync_time') continue; - // expect(noteUpdatedFromRemote[n]).toBe(note2[n], 'Property: ' + n); - // } + let noteUpdatedFromRemote = await Note.load(note1.id); + for (let n in noteUpdatedFromRemote) { + if (!noteUpdatedFromRemote.hasOwnProperty(n)) continue; + if (n == 'sync_time') continue; + expect(noteUpdatedFromRemote[n]).toBe(note2[n], 'Property: ' + n); + } - // done(); - // }); + done(); + }); - // it('should resolve folders conflicts', async (done) => { - // let folder1 = await Folder.save({ title: "folder1" }); - // let note1 = await Note.save({ title: "un", parent_id: folder1.id }); - // await synchronizer().start(); + it('should resolve folders conflicts', async (done) => { + let folder1 = await Folder.save({ title: "folder1" }); + let note1 = await Note.save({ title: "un", parent_id: folder1.id }); + await synchronizer().start(); - // await switchClient(2); // ---------------------------------- + await switchClient(2); // ---------------------------------- - // await synchronizer().start(); + await synchronizer().start(); - // await sleep(0.1); + await sleep(0.1); - // let folder1_modRemote = await Folder.load(folder1.id); - // folder1_modRemote.title = "folder1 UPDATE CLIENT 2"; - // await Folder.save(folder1_modRemote); - // folder1_modRemote = await Folder.load(folder1_modRemote.id); + let folder1_modRemote = await Folder.load(folder1.id); + folder1_modRemote.title = "folder1 UPDATE CLIENT 2"; + await Folder.save(folder1_modRemote); + folder1_modRemote = await Folder.load(folder1_modRemote.id); - // await synchronizer().start(); + await synchronizer().start(); - // await switchClient(1); // ---------------------------------- + await switchClient(1); // ---------------------------------- - // await sleep(0.1); + await sleep(0.1); - // let folder1_modLocal = await Folder.load(folder1.id); - // folder1_modLocal.title = "folder1 UPDATE CLIENT 1"; - // await Folder.save(folder1_modLocal); - // folder1_modLocal = await Folder.load(folder1.id); + let folder1_modLocal = await Folder.load(folder1.id); + folder1_modLocal.title = "folder1 UPDATE CLIENT 1"; + await Folder.save(folder1_modLocal); + folder1_modLocal = await Folder.load(folder1.id); - // await synchronizer().start(); + await synchronizer().start(); - // let folder1_final = await Folder.load(folder1.id); - // expect(folder1_final.title).toBe(folder1_modRemote.title); + let folder1_final = await Folder.load(folder1.id); + expect(folder1_final.title).toBe(folder1_modRemote.title); - // done(); - // }); + done(); + }); - // it('should delete remote items', async (done) => { - // let folder1 = await Folder.save({ title: "folder1" }); - // let note1 = await Note.save({ title: "un", parent_id: folder1.id }); - // await synchronizer().start(); + it('should delete remote items', async (done) => { + let folder1 = await Folder.save({ title: "folder1" }); + let note1 = await Note.save({ title: "un", parent_id: folder1.id }); + await synchronizer().start(); - // await switchClient(2); + await switchClient(2); - // await synchronizer().start(); + await synchronizer().start(); - // await sleep(0.1); + await sleep(0.1); - // await Note.delete(note1.id); + await Note.delete(note1.id); - // await synchronizer().start(); + await synchronizer().start(); - // let files = await fileApi().list(); + let files = await fileApi().list(); - // expect(files.length).toBe(1); - // expect(files[0].path).toBe(Folder.systemPath(folder1)); + expect(files.length).toBe(1); + expect(files[0].path).toBe(Folder.systemPath(folder1)); - // let deletedItems = await BaseModel.deletedItems(); - // expect(deletedItems.length).toBe(0); + let deletedItems = await BaseModel.deletedItems(); + expect(deletedItems.length).toBe(0); - // done(); - // }); + done(); + }); - // it('should delete local items', async (done) => { - // let folder1 = await Folder.save({ title: "folder1" }); - // let note1 = await Note.save({ title: "un", parent_id: folder1.id }); - // await synchronizer().start(); + it('should delete local items', async (done) => { + let folder1 = await Folder.save({ title: "folder1" }); + let note1 = await Note.save({ title: "un", parent_id: folder1.id }); + await synchronizer().start(); - // await switchClient(2); + await switchClient(2); - // await synchronizer().start(); + await synchronizer().start(); - // await sleep(0.1); + await sleep(0.1); - // await Note.delete(note1.id); + await Note.delete(note1.id); - // await synchronizer().start(); + await synchronizer().start(); - // await switchClient(1); + await switchClient(1); - // await synchronizer().start(); + await synchronizer().start(); - // let items = await Folder.all(true); + let items = await Folder.all(true); - // expect(items.length).toBe(1); + expect(items.length).toBe(1); - // let deletedItems = await BaseModel.deletedItems(); + let deletedItems = await BaseModel.deletedItems(); - // expect(deletedItems.length).toBe(0); + expect(deletedItems.length).toBe(0); - // done(); - // }); + done(); + }); it('should handle conflict when remote note is deleted then local note is modified', async (done) => { let folder1 = await Folder.save({ title: "folder1" }); @@ -299,4 +299,35 @@ describe('Synchronizer', function() { done(); }); + it('should handle conflict when remote folder is deleted then local folder is renamed', async (done) => { + let folder1 = await Folder.save({ title: "folder1" }); + let note1 = await Note.save({ title: "un", parent_id: folder1.id }); + await synchronizer().start(); + + await switchClient(2); + + await synchronizer().start(); + + await sleep(0.1); + + await Folder.delete(folder1.id); + + await synchronizer().start(); + + await switchClient(1); + + await sleep(0.1); + + let newTitle = 'Modified after having been deleted'; + await Folder.save({ id: folder1.id, title: newTitle }); + + await synchronizer().start(); + + let items = await Folder.all(true); + + expect(items.length).toBe(0); + + done(); + }); + }); \ No newline at end of file