diff options
Diffstat (limited to 'share/www/script/test/show_documents.js')
-rw-r--r-- | share/www/script/test/show_documents.js | 414 |
1 files changed, 0 insertions, 414 deletions
diff --git a/share/www/script/test/show_documents.js b/share/www/script/test/show_documents.js deleted file mode 100644 index e06bcadc..00000000 --- a/share/www/script/test/show_documents.js +++ /dev/null @@ -1,414 +0,0 @@ -// 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.show_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/template", - language: "javascript", - shows: { - "hello" : stringFun(function(doc, req) { - log("hello fun"); - if (doc) { - return "Hello World"; - } else { - if(req.id) { - return "New World"; - } else { - return "Empty World"; - } - } - }), - "just-name" : stringFun(function(doc, req) { - if (doc) { - return { - body : "Just " + doc.name - }; - } else { - return { - body : "No such doc", - code : 404 - }; - } - }), - "json" : stringFun(function(doc, req) { - return { - json : doc - } - }), - "req-info" : stringFun(function(doc, req) { - return { - json : req - } - }), - "show-deleted" : stringFun(function(doc, req) { - if(doc) { - return doc._id; - } else { - return "No doc " + req.id; - } - }), - "render-error" : stringFun(function(doc, req) { - return noSuchVariable; - }), - "empty" : stringFun(function(doc, req) { - return ""; - }), - "fail" : stringFun(function(doc, req) { - return doc._id; - }), - "xml-type" : stringFun(function(doc, req) { - return { - "headers" : { - "Content-Type" : "application/xml" - }, - "body" : new XML('<xml><node foo="bar"/></xml>').toXMLString() - } - }), - "no-set-etag" : stringFun(function(doc, req) { - return { - headers : { - "Etag" : "skipped" - }, - "body" : "something" - } - }), - "list-api" : stringFun(function(doc, req) { - start({"X-Couch-Test-Header": "Yeah"}); - send("Hey"); - }), - "list-api-mix" : stringFun(function(doc, req) { - start({"X-Couch-Test-Header": "Yeah"}); - send("Hey "); - return "Dude"; - }), - "list-api-mix-with-header" : stringFun(function(doc, req) { - start({"X-Couch-Test-Header": "Yeah"}); - send("Hey "); - return { - headers: { - "X-Couch-Test-Header-Awesome": "Oh Yeah!" - }, - body: "Dude" - }; - }), - "accept-switch" : stringFun(function(doc, req) { - if (req.headers["Accept"].match(/image/)) { - return { - // a 16x16 px version of the CouchDB logo - "base64" : -["iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAsV", -"BMVEUAAAD////////////////////////5ur3rEBn////////////////wDBL/", -"AADuBAe9EB3IEBz/7+//X1/qBQn2AgP/f3/ilpzsDxfpChDtDhXeCA76AQH/v7", -"/84eLyWV/uc3bJPEf/Dw/uw8bRWmP1h4zxSlD6YGHuQ0f6g4XyQkXvCA36MDH6", -"wMH/z8/yAwX64ODeh47BHiv/Ly/20dLQLTj98PDXWmP/Pz//39/wGyJ7Iy9JAA", -"AADHRSTlMAbw8vf08/bz+Pv19jK/W3AAAAg0lEQVR4Xp3LRQ4DQRBD0QqTm4Y5", -"zMxw/4OleiJlHeUtv2X6RbNO1Uqj9g0RMCuQO0vBIg4vMFeOpCWIWmDOw82fZx", -"vaND1c8OG4vrdOqD8YwgpDYDxRgkSm5rwu0nQVBJuMg++pLXZyr5jnc1BaH4GT", -"LvEliY253nA3pVhQqdPt0f/erJkMGMB8xucAAAAASUVORK5CYII="].join(''), - headers : { - "Content-Type" : "image/png", - "Vary" : "Accept" // we set this for proxy caches - } - }; - } else { - return { - "body" : "accepting text requests", - headers : { - "Content-Type" : "text/html", - "Vary" : "Accept" - } - }; - } - }), - "provides" : stringFun(function(doc, req) { - registerType("foo", "application/foo","application/x-foo"); - - provides("html", function() { - return "Ha ha, you said \"" + doc.word + "\"."; - }); - - provides("xml", function() { - var xml = new XML('<xml><node/></xml>'); - // Becase Safari can't stand to see that dastardly - // E4X outside of a string. Outside of tests you - // can just use E4X literals. - eval('xml.node.@foo = doc.word'); - log('xml: '+xml.toSource()); - return xml.toXMLString(); - }); - - provides("foo", function() { - return "foofoo"; - }); - }), - "withSlash": stringFun(function(doc, req) { - return { json: doc } - }) - } - }; - T(db.save(designDoc).ok); - - var doc = {"word":"plankton", "name":"Rusty"} - var resp = db.save(doc); - T(resp.ok); - var docid = resp.id; - - // show error - var xhr = CouchDB.request("GET", "/test_suite_db/_design/template/_show/"); - T(xhr.status == 404, 'Should be missing'); - T(JSON.parse(xhr.responseText).reason == "Invalid path."); - - // hello template world - xhr = CouchDB.request("GET", "/test_suite_db/_design/template/_show/hello/"+docid); - T(xhr.responseText == "Hello World", "hello"); - T(/charset=utf-8/.test(xhr.getResponseHeader("Content-Type"))); - - - // Fix for COUCHDB-379 - T(equals(xhr.getResponseHeader("Server").substr(0,7), "CouchDB")); - - // // error stacktraces - // xhr = CouchDB.request("GET", "/test_suite_db/_design/template/_show/render-error/"+docid); - // T(JSON.parse(xhr.responseText).error == "render_error"); - - // hello template world (no docid) - xhr = CouchDB.request("GET", "/test_suite_db/_design/template/_show/hello"); - T(xhr.responseText == "Empty World"); - - // hello template world (no docid) - xhr = CouchDB.request("GET", "/test_suite_db/_design/template/_show/empty"); - T(xhr.responseText == ""); - - // // hello template world (non-existing docid) - xhr = CouchDB.request("GET", "/test_suite_db/_design/template/_show/fail/nonExistingDoc"); - T(xhr.status == 404); - var resp = JSON.parse(xhr.responseText); - T(resp.error == "not_found"); - - // show with doc - xhr = CouchDB.request("GET", "/test_suite_db/_design/template/_show/just-name/"+docid); - T(xhr.responseText == "Just Rusty"); - - // show with missing doc - xhr = CouchDB.request("GET", "/test_suite_db/_design/template/_show/just-name/missingdoc"); - T(xhr.status == 404); - TEquals("No such doc", xhr.responseText); - - // show with missing func - xhr = CouchDB.request("GET", "/test_suite_db/_design/template/_show/missing/"+docid); - T(xhr.status == 404, "function is missing"); - - // missing design doc - xhr = CouchDB.request("GET", "/test_suite_db/_design/missingddoc/_show/just-name/"+docid); - T(xhr.status == 404); - var resp = JSON.parse(xhr.responseText); - T(resp.error == "not_found"); - - // query parameters - xhr = CouchDB.request("GET", "/test_suite_db/_design/template/_show/req-info/"+docid+"?foo=bar", { - headers: { - "Accept": "text/html;text/plain;*/*", - "X-Foo" : "bar" - } - }); - var resp = JSON.parse(xhr.responseText); - T(equals(resp.headers["X-Foo"], "bar")); - T(equals(resp.query, {foo:"bar"})); - T(equals(resp.method, "GET")); - T(equals(resp.path[5], docid)); - T(equals(resp.info.db_name, "test_suite_db")); - - // returning a content-type - xhr = CouchDB.request("GET", "/test_suite_db/_design/template/_show/xml-type/"+docid); - T("application/xml" == xhr.getResponseHeader("Content-Type")); - T("Accept" == xhr.getResponseHeader("Vary")); - - // accept header switching - // different mime has different etag - xhr = CouchDB.request("GET", "/test_suite_db/_design/template/_show/accept-switch/"+docid, { - headers: {"Accept": "text/html;text/plain;*/*"} - }); - var ct = xhr.getResponseHeader("Content-Type"); - T(/text\/html/.test(ct)) - T("Accept" == xhr.getResponseHeader("Vary")); - var etag = xhr.getResponseHeader("etag"); - - xhr = CouchDB.request("GET", "/test_suite_db/_design/template/_show/accept-switch/"+docid, { - headers: {"Accept": "image/png;*/*"} - }); - T(xhr.responseText.match(/PNG/)) - T("image/png" == xhr.getResponseHeader("Content-Type")); - var etag2 = xhr.getResponseHeader("etag"); - T(etag2 != etag); - - // proper etags - // show with doc - xhr = CouchDB.request("GET", "/test_suite_db/_design/template/_show/just-name/"+docid); - // extract the ETag header values - etag = xhr.getResponseHeader("etag"); - // get again with etag in request - xhr = CouchDB.request("GET", "/test_suite_db/_design/template/_show/just-name/"+docid, { - headers: {"if-none-match": etag} - }); - // should be 304 - T(xhr.status == 304); - - // update the doc - doc.name = "Crusty"; - resp = db.save(doc); - T(resp.ok); - // req with same etag - xhr = CouchDB.request("GET", "/test_suite_db/_design/template/_show/just-name/"+docid, { - headers: {"if-none-match": etag} - }); - // status is 200 - T(xhr.status == 200); - - // get new etag and request again - etag = xhr.getResponseHeader("etag"); - xhr = CouchDB.request("GET", "/test_suite_db/_design/template/_show/just-name/"+docid, { - headers: {"if-none-match": etag} - }); - // should be 304 - T(xhr.status == 304); - - // update design doc (but not function) - designDoc.isChanged = true; - T(db.save(designDoc).ok); - - xhr = CouchDB.request("GET", "/test_suite_db/_design/template/_show/just-name/"+docid, { - headers: {"if-none-match": etag} - }); - // should not be 304 if we change the doc - T(xhr.status != 304, "changed ddoc"); - - // update design doc function - designDoc.shows["just-name"] = (function(doc, req) { - return { - body : "Just old " + doc.name - }; - }).toString(); - T(db.save(designDoc).ok); - - xhr = CouchDB.request("GET", "/test_suite_db/_design/template/_show/just-name/"+docid, { - headers: {"if-none-match": etag} - }); - // status is 200 - T(xhr.status == 200); - - - // JS can't set etag - xhr = CouchDB.request("GET", "/test_suite_db/_design/template/_show/no-set-etag/"+docid); - // extract the ETag header values - etag = xhr.getResponseHeader("etag"); - T(etag != "skipped") - - // test the provides mime matcher - xhr = CouchDB.request("GET", "/test_suite_db/_design/template/_show/provides/"+docid, { - headers: { - "Accept": 'text/html,application/atom+xml; q=0.9' - } - }); - var ct = xhr.getResponseHeader("Content-Type"); - T(/charset=utf-8/.test(ct)) - T(/text\/html/.test(ct)) - T(xhr.responseText == "Ha ha, you said \"plankton\"."); - - // now with xml - xhr = CouchDB.request("GET", "/test_suite_db/_design/template/_show/provides/"+docid, { - headers: { - "Accept": 'application/xml' - } - }); - T(xhr.getResponseHeader("Content-Type") == "application/xml"); - T(xhr.responseText.match(/node/)); - T(xhr.responseText.match(/plankton/)); - - // registering types works - xhr = CouchDB.request("GET", "/test_suite_db/_design/template/_show/provides/"+docid, { - headers: { - "Accept": "application/x-foo" - } - }); - T(xhr.getResponseHeader("Content-Type") == "application/x-foo"); - T(xhr.responseText.match(/foofoo/)); - - // test the provides mime matcher without a match - xhr = CouchDB.request("GET", "/test_suite_db/_design/template/_show/provides/"+docid, { - headers: { - "Accept": 'text/monkeys' - } - }); - var rs = JSON.parse(xhr.responseText); - T(rs.error == "not_acceptable") - - - // should fallback on the first one - xhr = CouchDB.request("GET", "/test_suite_db/_design/template/_show/provides/"+docid, { - headers: { - "Accept": 'application/x-foo, application/xml' - } - }); - var ct = xhr.getResponseHeader("Content-Type"); - T(/application\/xml/.test(ct)); - - // test inclusion of conflict state - var doc1 = {_id:"foo", a:1}; - var doc2 = {_id:"foo", a:2}; - db.save(doc1); - - // create the conflict with an all_or_nothing bulk docs request - var docs = [doc2]; - db.bulkSave(docs, {all_or_nothing:true}); - - xhr = CouchDB.request("GET", "/test_suite_db/_design/template/_show/json/foo"); - TEquals(1, JSON.parse(xhr.responseText)._conflicts.length); - - var doc3 = {_id:"a/b/c", a:1}; - db.save(doc3); - xhr = CouchDB.request("GET", "/test_suite_db/_design/template/_show/withSlash/a/b/c"); - T(xhr.status == 200); - - // hello template world (non-existing docid) - xhr = CouchDB.request("GET", "/test_suite_db/_design/template/_show/hello/nonExistingDoc"); - T(xhr.responseText == "New World"); - - // test list() compatible API - xhr = CouchDB.request("GET", "/test_suite_db/_design/template/_show/list-api/foo"); - T(xhr.responseText == "Hey"); - TEquals("Yeah", xhr.getResponseHeader("X-Couch-Test-Header"), "header should be cool"); - - xhr = CouchDB.request("GET", "/test_suite_db/_design/template/_show/list-api-mix/foo"); - T(xhr.responseText == "Hey Dude"); - TEquals("Yeah", xhr.getResponseHeader("X-Couch-Test-Header"), "header should be cool"); - - xhr = CouchDB.request("GET", "/test_suite_db/_design/template/_show/list-api-mix-with-header/foo"); - T(xhr.responseText == "Hey Dude"); - TEquals("Yeah", xhr.getResponseHeader("X-Couch-Test-Header"), "header should be cool"); - TEquals("Oh Yeah!", xhr.getResponseHeader("X-Couch-Test-Header-Awesome"), "header should be cool"); - - // test deleted docs - var doc = {_id:"testdoc",foo:1}; - db.save(doc); - var xhr = CouchDB.request("GET", "/test_suite_db/_design/template/_show/show-deleted/testdoc"); - TEquals("testdoc", xhr.responseText, "should return 'testdoc'"); - - db.deleteDoc(doc); - var xhr = CouchDB.request("GET", "/test_suite_db/_design/template/_show/show-deleted/testdoc"); - TEquals("No doc testdoc", xhr.responseText, "should return 'no doc testdoc'"); - -}; |