diff options
author | Randall Leeds <randall@apache.org> | 2011-10-01 03:19:05 +0000 |
---|---|---|
committer | Randall Leeds <randall@apache.org> | 2011-10-01 03:19:05 +0000 |
commit | 74613f5c413a3d10bec024bcac8fe9e7be10ac74 (patch) | |
tree | a693f663b3c79f3a717dbf1f4d69168f5ac90e75 | |
parent | 9467ebbf40be6e7773db52634a420c697257bcfe (diff) | |
download | couchdb-74613f5c413a3d10bec024bcac8fe9e7be10ac74.tar.gz |
fix COUCHDB-648 - _update handler ignores "code"
Test by Christian Carter
git-svn-id: https://svn.apache.org/repos/asf/couchdb/trunk@1177890 13f79535-47bb-0310-9956-ffa450edef68
-rw-r--r-- | THANKS | 1 | ||||
-rw-r--r-- | share/www/script/test/update_documents.js | 24 | ||||
-rw-r--r-- | src/couch_mrview/src/couch_mrview_show.erl | 16 |
3 files changed, 33 insertions, 8 deletions
@@ -88,5 +88,6 @@ suggesting improvements or submitting changes. Some of these people are: * Trond Norbye <trond.norbye@gmail.com> * Alexander Shorin <kxepal@gmail.com> * Christopher Bonhage <queezey@me.com> + * Christian Carter <cdcarter@gmail.com> For a list of authors see the `AUTHORS` file. diff --git a/share/www/script/test/update_documents.js b/share/www/script/test/update_documents.js index 4d2b29fcf..59af45971 100644 --- a/share/www/script/test/update_documents.js +++ b/share/www/script/test/update_documents.js @@ -75,6 +75,17 @@ couchTests.update_documents = function(debug) { }), "get-uuid" : stringFun(function(doc, req) { return [null, req.uuid]; + }), + "code-n-bump" : stringFun(function(doc,req) { + if (!doc.counter) doc.counter = 0; + doc.counter += 1; + var message = "<h1>bumped it!</h1>"; + resp = {"code": 302, "body": message} + return [doc, resp]; + }), + "resp-code" : stringFun(function(doc,req) { + resp = {"code": 302} + return [null, resp]; }) } }; @@ -179,4 +190,17 @@ couchTests.update_documents = function(debug) { var doc = db.open("with/slash"); TEquals(2, doc.counter, "counter should be 2"); + + // COUCHDB-648 - the code in the JSON response should be honored + + xhr = CouchDB.request("PUT", "/test_suite_db/_design/update/_update/code-n-bump/"+docid, { + headers : {"X-Couch-Full-Commit":"true"} + }); + T(xhr.status == 302); + T(xhr.responseText == "<h1>bumped it!</h1>"); + doc = db.open(docid); + T(doc.counter == 3); + + xhr = CouchDB.request("POST", "/test_suite_db/_design/update/_update/resp-code/"); + T(xhr.status == 302); }; diff --git a/src/couch_mrview/src/couch_mrview_show.erl b/src/couch_mrview/src/couch_mrview_show.erl index b23c4ac4e..c77abaccd 100644 --- a/src/couch_mrview/src/couch_mrview_show.erl +++ b/src/couch_mrview/src/couch_mrview_show.erl @@ -131,7 +131,7 @@ send_doc_update_response(Req, Db, DDoc, UpdateName, Doc, DocId) -> JsonDoc = couch_query_servers:json_doc(Doc), Cmd = [<<"updates">>, UpdateName], UpdateResp = couch_query_servers:ddoc_prompt(DDoc, Cmd, [JsonDoc, JsonReq]), - {Code, JsonResp} = case UpdateResp of + JsonResp = case UpdateResp of [<<"up">>, {NewJsonDoc}, {JsonResp0}] -> case couch_httpd:header_value( Req, "X-Couch-Full-Commit", "false") of @@ -143,15 +143,15 @@ send_doc_update_response(Req, Db, DDoc, UpdateName, Doc, DocId) -> NewDoc = couch_doc:from_json_obj({NewJsonDoc}), {ok, NewRev} = couch_db:update_doc(Db, NewDoc, Options), NewRevStr = couch_doc:rev_to_str(NewRev), - JsonHeaders = {[{<<"X-Couch-Update-NewRev">>, NewRevStr}]}, - JsonRespWithRev = {[{<<"headers">>, JsonHeaders} | JsonResp0]}, - {201, JsonRespWithRev}; - [<<"up">>, _Other, JsonResp0] -> - {200, JsonResp0} + {[ + {<<"code">>, 201}, + {<<"headers">>, {[{<<"X-Couch-Update-NewRev">>, NewRevStr}]}} + | JsonResp0]}; + [<<"up">>, _Other, {JsonResp0}] -> + {[{<<"code">>, 200} | JsonResp0]} end, - JsonResp2 = json_apply_field({<<"code">>, Code}, JsonResp), % todo set location field - couch_httpd_external:send_external_response(Req, JsonResp2). + couch_httpd_external:send_external_response(Req, JsonResp). handle_view_list_req(#httpd{method='GET'}=Req, Db, DDoc) -> |