summaryrefslogtreecommitdiff
path: root/test/elixir/test/etags_head_test.exs
diff options
context:
space:
mode:
Diffstat (limited to 'test/elixir/test/etags_head_test.exs')
-rw-r--r--test/elixir/test/etags_head_test.exs151
1 files changed, 151 insertions, 0 deletions
diff --git a/test/elixir/test/etags_head_test.exs b/test/elixir/test/etags_head_test.exs
new file mode 100644
index 000000000..9b9ff8bb0
--- /dev/null
+++ b/test/elixir/test/etags_head_test.exs
@@ -0,0 +1,151 @@
+defmodule EtagsHeadTest do
+ use CouchTestCase
+
+ @moduletag :etags
+
+ @tag :with_db
+ test "etag header on creation", context do
+ db_name = context[:db_name]
+
+ resp =
+ Couch.put("/#{db_name}/1",
+ headers: ["Content-Type": "application/json"],
+ body: %{}
+ )
+
+ assert resp.status_code == 201
+ assert Map.has_key?(resp.headers.hdrs, "etag")
+ end
+
+ @tag :with_db
+ test "etag header on retrieval", context do
+ db_name = context[:db_name]
+
+ resp =
+ Couch.put("/#{db_name}/1",
+ headers: ["Content-Type": "application/json"],
+ body: %{}
+ )
+
+ etag = resp.headers.hdrs["etag"]
+
+ # get the doc and verify the headers match
+ resp = Couch.get("/#{db_name}/1")
+ assert etag == resp.headers.hdrs["etag"]
+
+ # 'head' the doc and verify the headers match
+ resp =
+ Couch.head("/#{db_name}/1",
+ headers: ["if-none-match": "s"]
+ )
+
+ assert etag == resp.headers.hdrs["etag"]
+ end
+
+ @tag :with_db
+ test "etag header on head", context do
+ db_name = context[:db_name]
+
+ resp =
+ Couch.put("/#{db_name}/1",
+ headers: ["Content-Type": "application/json"],
+ body: %{}
+ )
+
+ etag = resp.headers.hdrs["etag"]
+
+ # 'head' the doc and verify the headers match
+ resp =
+ Couch.head("/#{db_name}/1",
+ headers: ["if-none-match": "s"]
+ )
+
+ assert etag == resp.headers.hdrs["etag"]
+ end
+
+ @tag :with_db
+ test "etags head", context do
+ db_name = context[:db_name]
+
+ resp =
+ Couch.put("/#{db_name}/1",
+ headers: ["Content-Type": "application/json"],
+ body: %{}
+ )
+
+ assert resp.status_code == 201
+ assert Map.has_key?(resp.headers.hdrs, "etag")
+
+ etag = resp.headers.hdrs["etag"]
+
+ # get the doc and verify the headers match
+ resp = Couch.get("/#{db_name}/1")
+ assert etag == resp.headers.hdrs["etag"]
+
+ # 'head' the doc and verify the headers match
+ resp =
+ Couch.head("/#{db_name}/1",
+ headers: ["if-none-match": "s"]
+ )
+
+ assert etag == resp.headers.hdrs["etag"]
+
+ # replace a doc
+ resp =
+ Couch.put("/#{db_name}/1",
+ headers: ["if-match": etag],
+ body: %{}
+ )
+
+ assert resp.status_code == 201
+
+ # extract the new ETag value
+ previous_etag = etag
+ etag = resp.headers.hdrs["etag"]
+
+ # fail to replace a doc
+ resp =
+ Couch.put("/#{db_name}/1",
+ body: %{}
+ )
+
+ assert resp.status_code == 409
+
+ # verify get w/Etag
+ resp =
+ Couch.get("/#{db_name}/1",
+ headers: ["if-none-match": previous_etag]
+ )
+
+ assert resp.status_code == 200
+
+ resp =
+ Couch.get("/#{db_name}/1",
+ headers: ["if-none-match": etag]
+ )
+
+ assert resp.status_code == 304
+
+ resp =
+ Couch.get("/#{db_name}/1",
+ headers: ["if-none-match": "W/#{etag}"]
+ )
+
+ assert resp.status_code == 304
+
+ # fail to delete a doc
+ resp =
+ Couch.delete("/#{db_name}/1",
+ headers: ["if-match": previous_etag]
+ )
+
+ assert resp.status_code == 409
+
+ resp =
+ Couch.delete("/#{db_name}/1",
+ headers: ["if-match": etag]
+ )
+
+ assert resp.status_code == 200
+ end
+end