From c82e766a5cfc4d6c7a0acfd3007875b36a7395c7 Mon Sep 17 00:00:00 2001 From: Sven Franck <sven.franck@nexedi.com> Date: Mon, 7 Jan 2013 17:35:57 +0100 Subject: [PATCH] updated scenario, changed remove/scenario hashes --- test/jiotests.js | 166 ++++++++++++++++++++++++----------------------- 1 file changed, 85 insertions(+), 81 deletions(-) diff --git a/test/jiotests.js b/test/jiotests.js index 5764e60..94f2432 100644 --- a/test/jiotests.js +++ b/test/jiotests.js @@ -1364,13 +1364,13 @@ test ("Remove", function(){ }); o.localpath = "jio/localstorage/urevrem/arevrem"; - // remove document without revision + // 1. remove document without revision o.spy (o, "status", 404, "Remove document (no doctree, no revision)"); o.jio.remove({"_id":"remove1"}, o.f); o.tick(o); - // remove attachment without revision + // 2. remove attachment without revision o.spy (o, "status", 404, "Remove attachment (no doctree, no revision)"); o.jio.remove({"_id":"remove1/remove2"}, o.f); @@ -1397,8 +1397,8 @@ test ("Remove", function(){ }; o.doc_myremove1 = {"_id": "remove1", "title": "myRemove1", "_rev":o.very_old_rev, "_attachments":o.attmt_myremove1}; - o.revs_info = [{"rev": o.very_old_rev, "status": "available"}]; - o.old_rev = "2-"+hex_sha256(JSON.stringify(o.doc_myremove1)+JSON.stringify(o.revs_info)); + o.revisions = {"start":1,"ids":[o.very_old_rev.split('-'),[1]]} + o.old_rev = "2-"+generateRevisionHash(o.doc_myremove1, o.revisions); localstorage.setItem(o.localpath+"/remove1."+o.old_rev, o.doc_myremove1); localstorage.setItem(o.localpath+"/remove1."+o.old_rev+"/remove2", "xyz"); @@ -1407,43 +1407,50 @@ test ("Remove", function(){ "rev": o.very_old_rev, "status": "available", "children": [{ "rev": o.old_rev, "status": "available", "children": [] }] - },{ - "rev": "1-rev2", "status": "available", "children": [] - }]}; + },{ + "rev": "1-rev2", "status": "available", "children": [] + }]}; localstorage.setItem(o.localpath+"/remove1.revision_tree.json", o.doctree); - // 1. remove non existing attachment with revision + // 3. remove non existing attachment with revision o.spy(o, "status", 404, "Remove NON-existing attachment (revision)"); o.jio.remove({"_id":"remove1.1-rev2/remove0","_rev":o.old_rev}, o.f); o.tick(o); - o.revs_info = [ - {"rev": o.old_rev, "status": "available"}, - {"rev": o.very_old_rev, "status": "available"} - ]; - - // xxx on remove, doc only includes the parameters passed in the remove callback - // to generate correct hash, need to modify here + o.revisions = {"start": 2, "ids":[o.old_rev.split('-')[1], + o.very_old_rev.split('-')[1] + ]}; o.doc_myremove1 = {"_id":"remove1/remove2","_rev":o.old_rev}; - o.rev = "3-"+hex_sha256(JSON.stringify(o.doc_myremove1)+JSON.stringify(o.revs_info)); + o.rev = "3-"+generateRevisionHash(o.doc_myremove1, o.revisions); - o.doctree = {"children":[{ + // 4. remove existing attachment with revision + o.spy (o, "value", {"ok": true, "id": "remove1", "rev": o.rev}, + "Remove existing attachment (revision)"); + o.jio.remove({"_id":"remove1/remove2","_rev":o.old_rev}, o.f); + o.tick(o); + + o.testtree = {"children":[{ "rev": o.very_old_rev, "status": "available", "children": [{ "rev": o.old_rev, "status": "available", "children": [{ - "rev": o.rev, "status": "available", "children":[] + "rev": o.rev, "status": "available", "children": [] }] }] - },{ - "rev": "1-rev2", "status": "available", "children": [] - }]}; - localstorage.setItem(o.localpath+"/remove1.revision_tree.json", o.doctree); + },{ + "rev": "1-rev2", "status": "available", "children": [] + }]}; + + // 5. check if document tree has been updated correctly + deepEqual(localstorage.getItem("jio/localstorage/urevrem/arevrem/"+ + "remove1.revision_tree.json" ), + o.testtree, "Check if document tree has been updated correctly" + ); + + // 6. check if attachment has been removed - // 2. remove existing attachment with revision - o.spy (o, "value", {"ok": true, "id": "remove1", "rev": o.rev}, - "Remove existing attachment (revision)"); - o.jio.remove({"_id":"remove1/remove2","_rev":o.old_rev}, o.f); - o.tick(o); + + + // 7. check if document is updated // add another attachment o.attmt_myremove2 = { @@ -1455,11 +1462,9 @@ test ("Remove", function(){ }; o.doc_myremove2 = {"_id": "remove1", "title": "myRemove2", "_rev":"1-rev2", "_attachments":o.attmt_myremove2}; - o.second_old_rev = "2-"+hex_sha256(JSON.stringify(o.doc_myremove1)+JSON.stringify(o.revs_info)); - o.revs_info = [ - {"rev":o.second_old_rev, "status":"available"}, - {"rev": "1-rev2", "status": "available"} - ]; + o.revisions = {"start":1,"ids":["rev2"] }; + o.second_old_rev = "2-"+generateRevisionHash(o.doc_myremove2, o.revisions); + localstorage.setItem(o.localpath+"/remove1."+o.second_old_rev, o.doc_myremove2); localstorage.setItem(o.localpath+"/remove1."+o.second_old_rev+"/remove3", "stu"); @@ -1476,48 +1481,39 @@ test ("Remove", function(){ }]}; localstorage.setItem(o.localpath+"/remove1.revision_tree.json", o.doctree); - // 3. remove non existing attachment without revision + // 8. remove non existing attachment without revision o.spy (o,"status", 409, "409 - Removing non-existing-attachment (no revision)"); o.jio.remove({"_id":"remove1/remove0"}, o.f); o.tick(o); - o.revs_info = [ - {"rev": o.second_old_rev, "status": "available"}, - {"rev": "1-rev2", "status": "available"} - ]; - + o.revisions = {"start":2,"ids":[o.second_old_rev.split('-')[1],"rev2"]}; o.doc_myremove3 = {"_id":"remove1/remove3","_rev":o.second_old_rev}; - o.second_rev = "3-"+hex_sha256(JSON.stringify(o.doc_myremove3)+JSON.stringify(o.revs_info)); + o.second_rev = "3-"+generateRevisionHash(o.doc_myremove3, o.revisions); - // 4. remove existing attachment without revision + // 9. remove existing attachment without revision o.spy (o,"status", 409, "409 - Removing existing attachment (no revision)"); o.jio.remove({"_id":"remove1/remove3"}, o.f); o.tick(o); - // 5. remove wrong revision + // 10. remove wrong revision o.spy (o,"status", 409, "409 - Removing document (false revision)"); o.jio.remove({"_id":"remove1","_rev":o.second_old_rev}, o.f); o.tick(o); - o.revs_info = [ - {"rev": o.rev, "status": "available"}, - {"rev": o.old_rev, "status": "available"}, - {"rev": o.very_old_rev, - "status":"available"} - ]; - + o.revisions = {"start": 3, "ids":[o.rev.split('-')[1], + o.old_rev.split('-')[1],o.very_old_rev.split('-')[1] + ]}; o.doc_myremove4 = {"_id":"remove1","_rev":o.rev}; - o.second_new_rev = -"4-"+hex_sha256(JSON.stringify(o.doc_myremove4)+JSON.stringify(o.revs_info)); + o.second_new_rev = "4-"+generateRevisionHash(o.doc_myremove4, o.revisions); - // 6. remove revision + // 11. remove document version with revision o.spy (o, "value", {"ok": true, "id": "remove1", "rev": o.second_new_rev}, "Remove document (with revision)"); o.jio.remove({"_id":"remove1", "_rev":o.rev}, o.f); o.tick(o); - // 7. remove document without revision + // 12. remove document without revision o.spy (o,"status", 409, "409 - Removing document (no revision)"); o.jio.remove({"_id":"remove1"}, o.f); o.tick(o); @@ -1544,29 +1540,31 @@ test ("Scenario", function(){ // 1. put non empty document A-1 o.doc = {"_id": "sample1", "title": "mySample1"}; - o.revs_info = []; - o.hex = hex_sha256(JSON.stringify(o.doc)+JSON.stringify(o.revs_info)); + o.revisions = {"start": 0, "ids": []}; + o.hex = generateRevisionHash(o.doc, o.revisions); o.rev = "1-"+o.hex; - o.spy (o, "value", {"ok": true, "id": "sample1", "rev": o.rev}, "Put non empty document A-1"); + o.spy (o, "value", {"ok": true, "id": "sample1", "rev": o.rev}, + "Open Application with Revision and Local Storage, create document"); o.jio.put(o.doc, o.f); o.tick(o); // 2. put non empty document A-2 o.doc_b = {"_id": "sample1", "title": "mySample2"}; - o.revs_info_b = []; - o.rev_b = "1-"+hex_sha256(JSON.stringify(o.doc)+JSON.stringify(o.revs_info)); + o.revisions_b = {"start": 0, "ids": []}; + o.hex_b = generateRevisionHash(o.doc_b, o.revisions_b); + o.rev_b = "1-"+o.hex_b; - o.spy (o,"status", 409, "409 Try to put non empty document A-2"); - o.jio.put(o.doc, o.f); + o.spy (o,"status", 409, "409 - Try to create 2nd version (in first tab)"); + o.jio.put(o.doc_b, o.f); o.tick(o); - // 3. FAKE IT + // FAKE IT o.doc_f = {"_id": "sample1", "title": "mySample2"}; - o.revs_info_f = []; - o.hex_f = hex_sha256(JSON.stringify(o.doc_f)+JSON.stringify(o.revs_info_f)); + o.revisions_f = {"start": 0, "ids": []}; + o.hex_f = generateRevisionHash(o.doc_f, o.revisions_f); o.rev_f = "1-"+o.hex_f; - o.doc_f2 = {"_id": "sample1."+o.rev_f, "title": "mySample2"}; + o.doc_f2 = {"_id": "sample1", "title": "mySample2"}; localstorage.setItem(o.localpath+"/sample1."+o.rev_f, o.doc_f2); @@ -1576,52 +1574,58 @@ test ("Scenario", function(){ ]}; localstorage.setItem(o.localpath+"/sample1.revision_tree.json", o.doctree); - // 3. GET first version + // 3. Check that 2nd version has been created (manually) + deepEqual( + localstorage.getItem(o.localpath+"/sample1."+o.rev_f), + o.doc_f, "Create 2nd version in new tab (manually in local storage)" + ); + + // 4. GET first version o.mydocSample1 = {"_id": "sample1", "title": "mySample1", "_rev": o.rev}; o.mydocSample1._revisions = {"ids":[o.hex], "start":1 }; o.mydocSample1._revs_info = [{"rev": o.rev, "status": "available"}]; o.mydocSample1._conflicts = [o.rev_f]; - o.spy(o, "value", o.mydocSample1, "Get first document (using revison)"); + o.spy(o, "value", o.mydocSample1, "Get first version"); o.jio.get("sample1", { "revs_info": true, "revs": true, "conflicts": true, "rev": o.rev }, o.f); o.tick(o); - // 4. MODFIY first version + // 5. MODFIY first version o.doc_2 = {"_id": "sample1", "_rev": o.rev, "title": "mySample1_modified"}; - o.revs_info_2 = o.mydocSample1._revs_info; - o.hex_2 = hex_sha256(JSON.stringify(o.doc_2)+ - JSON.stringify(o.revs_info_2)); + o.revisions_2 = {"start": 1, "ids":[o.rev.split('-')[1] + ]}; + o.hex_2 = generateRevisionHash(o.doc_2, o.revisions_2); o.rev_2 = "2-"+o.hex_2; - o.spy (o, "value", {"id":"sample1", "ok":true, "rev": o.rev_2}, "Modify first document"); + o.spy (o, "value", {"id":"sample1", "ok":true, "rev": o.rev_2}, + "Modify first version"); o.jio.put(o.doc_2, o.f); o.tick(o); - // 5. GET second version + // 6. GET second version o.mydocSample2 = {"_id": "sample1", "title": "mySample2", "_rev": o.rev_f}; - o.mydocSample2._revisions = {"ids":[o.hex_f], "start":1 }; + o.mydocSample2._revisions = {"start":1 , "ids":[o.hex_f]}; o.mydocSample2._revs_info = [{"rev": o.rev_f, "status": "available"}]; o.mydocSample2._conflicts = [o.rev_2]; o.spy(o, "value", o.mydocSample2, - "Get second document (using revison)"); + "Get second version"); o.jio.get("sample1", { "revs_info": true, "revs": true, "conflicts": true, "rev": o.rev_f }, o.f); o.tick(o); - // 6. MODFIY second version - o.doc_f2 = {"_id": "sample1", "_rev": o.rev_f, + // 7. MODFIY second version + o.doc_f2 = {"_id": "sample1", "_rev": o.rev_f, "title":"mySample2_modified"}; - o.revs_info_f2 = o.mydocSample2._revs_info; - o.hex_f2 = hex_sha256(JSON.stringify(o.doc_f2)+ - JSON.stringify(o.revs_info_f2)); + o.revisions_f2 = {"start":1 , "ids":[o.hex_f]}; + o.hex_f2 = generateRevisionHash(o.doc_f2, o.revisions_f2) o.rev_f2 = "2-"+o.hex_f2; - o.spy (o, "value", {"id":"sample1", "ok":true, "rev": o.rev_f2}, + o.spy (o, "value", {"id":"sample1", "ok":true, "rev": o.rev_f2}, "Modify second document"); o.jio.put(o.doc_f2, o.f); o.tick(o); - // 7. GET document without revision = winner & conflict! + // 8. GET document without revision = winner & conflict! o.mydocSample3 = {"_id": "sample1", "title": "mySample1_modified", "_rev": o.rev_2,"_conflicts":[o.rev_f2]}; o.mydocSample3._revs_info = [{"rev": o.rev_2, "status": "available"},{ @@ -1629,7 +1633,7 @@ test ("Scenario", function(){ }]; o.mydocSample3._revisions = {"ids":[o.hex_2, o.hex], "start":2 }; o.spy(o, "value", o.mydocSample3, - "Get second document (using revison) = Two conflicting versions"); + "Get Document = Two conflicting versions = conflict"); o.jio.get("sample1", {"revs_info": true, "revs": true, "conflicts": true, }, o.f); o.tick(o); -- 2.30.9