// Licensed under the Apache License, Version 2.0 (the "License"); you may not // use this file except in compliance with the License. You may obtain a copy // of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, WITHOUT // WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the // License for the specific language governing permissions and limitations under // the License. couchTests.update_documents = function(debug) { var db = new CouchDB("test_suite_db", {"X-Couch-Full-Commit":"false"}); db.deleteDb(); db.createDb(); if (debug) debugger; var designDoc = { _id:"_design/update", language: "javascript", updates: { "hello" : stringFun(function(doc, req) { log(doc); log(req); if (!doc) { if (req.id) { return [ // Creates a new document with the PUT docid, { _id : req.id, reqs : [req] }, // and returns an HTML response to the client. "
New World
"]; }; // return [null, "Empty World
"]; }; // we can update the document inline doc.world = "hello"; // we can record aspects of the request or use them in application logic. doc.reqs && doc.reqs.push(req); doc.edited_by = req.userCtx; return [doc, "hello doc
"]; }), "in-place" : stringFun(function(doc, req) { var field = req.query.field; var value = req.query.value; var message = "set "+field+" to "+value; doc[field] = value; return [doc, message]; }), "bump-counter" : stringFun(function(doc, req) { if (!doc.counter) doc.counter = 0; doc.counter += 1; var message = "hello doc
"); T(/charset=utf-8/.test(xhr.getResponseHeader("Content-Type"))) doc = db.open(docid); T(doc.world == "hello"); // Fix for COUCHDB-379 T(equals(xhr.getResponseHeader("Server").substr(0,7), "CouchDB")); // hello update world (no docid) xhr = CouchDB.request("POST", "/test_suite_db/_design/update/_update/hello"); T(xhr.status == 200); T(xhr.responseText == "Empty World
"); // no GET allowed xhr = CouchDB.request("GET", "/test_suite_db/_design/update/_update/hello"); // T(xhr.status == 405); // TODO allow qs to throw error code as well as error message T(JSON.parse(xhr.responseText).error == "method_not_allowed"); // // hello update world (non-existing docid) xhr = CouchDB.request("GET", "/test_suite_db/nonExistingDoc"); T(xhr.status == 404); xhr = CouchDB.request("PUT", "/test_suite_db/_design/update/_update/hello/nonExistingDoc"); T(xhr.status == 201); T(xhr.responseText == "New World
"); xhr = CouchDB.request("GET", "/test_suite_db/nonExistingDoc"); T(xhr.status == 200); // in place update xhr = CouchDB.request("PUT", "/test_suite_db/_design/update/_update/in-place/"+docid+'?field=title&value=test'); T(xhr.status == 201); T(xhr.responseText == "set title to test"); doc = db.open(docid); T(doc.title == "test"); // bump counter xhr = CouchDB.request("PUT", "/test_suite_db/_design/update/_update/bump-counter/"+docid, { headers : {"X-Couch-Full-Commit":"true"} }); T(xhr.status == 201); T(xhr.responseText == "