diff options
Diffstat (limited to 'share/www')
-rw-r--r-- | share/www/script/test/recreate_doc.js | 51 |
1 files changed, 48 insertions, 3 deletions
diff --git a/share/www/script/test/recreate_doc.js b/share/www/script/test/recreate_doc.js index 3786aba2..a6a64ac0 100644 --- a/share/www/script/test/recreate_doc.js +++ b/share/www/script/test/recreate_doc.js @@ -18,12 +18,12 @@ couchTests.recreate_doc = function(debug) { // First create a new document with the ID "foo", and delete it again var doc = {_id: "foo", a: "bar", b: 42}; - T(db.save(doc).ok); + var result = db.save(doc); + T(result.ok); + var firstRev = result.rev; T(db.deleteDoc(doc).ok); // Now create a new document with the same ID, save it, and then modify it - // This should work fine, but currently results in a conflict error, at - // least "sometimes" for (var i = 0; i < 10; i++) { doc = {_id: "foo"}; T(db.save(doc).ok); @@ -32,4 +32,49 @@ couchTests.recreate_doc = function(debug) { T(db.save(doc).ok); T(db.deleteDoc(doc).rev != undefined); } + + try { + // COUCHDB-292 now attempt to save the document with a prev that's since + // been deleted and this should generate a conflict exception + db.save({_id:"foo", _rev:firstRev, bar:1}); + T("no save conflict 1" && false); // we shouldn't hit here + } catch (e) { + T(e.error == "conflict"); + } + + var binAttDoc = { + _id: "foo", + _rev:firstRev, + _attachments:{ + "foo.txt": { + content_type:"text/plain", + data: "VGhpcyBpcyBhIGJhc2U2NCBlbmNvZGVkIHRleHQ=" + } + } + } + try { + // same as before, but with binary + db.save(binAttDoc); + T("no save conflict 2" && false); // we shouldn't hit here + } catch (e) { + T(e.error == "conflict"); + } + + + try { + // random non-existant prev rev + db.save({_id:"foo", _rev:"1-asfafasdf", bar:1}); + T("no save conflict 3" && false); // we shouldn't hit here + } catch (e) { + T(e.error == "conflict"); + } + + try { + // random non-existant prev rev with bin + binAttDoc._rev = "1-aasasfasdf"; + db.save(binAttDoc); + T("no save conflict 4" && false); // we shouldn't hit here + } catch (e) { + T(e.error == "conflict"); + } }; |