blob: fc3b28a0b6905e9b929a8b7b7242d8c9503a8111 [file] [log] [blame]
defmodule WithQuorumTest do
use CouchTestCase
@moduletag :with_quorum_test
@moduledoc """
Test CouchDB API in a cluster without quorum.
"""
@tag :with_db_name
test "Creating/Deleting DB should return 201-Created/202-Acepted", context do
db_name = context[:db_name]
resp = Couch.put("/#{db_name}")
msg = "Should return 201-Created"
assert resp.status_code in [201, 202], msg
resp = Couch.delete("/#{db_name}")
msg = "Should return 202-Acepted"
assert resp.status_code == 202, msg
end
@tag :with_db_name
test "Creating-Updating/Deleting doc should return 201-Created/200-OK", context do
db_name = context[:db_name]
Couch.put("/#{db_name}")
resp = Couch.post("/#{context[:db_name]}", body: %{:_id => "0", :a => 1})
msg = "Should return 201-Created"
assert resp.status_code in [201, 202], msg
resp = Couch.get("/#{context[:db_name]}/0")
rev = resp.body["_rev"]
resp =
Couch.put("/#{context[:db_name]}/0", body: %{:_id => "0", :_rev => rev, :a => 2})
msg = "Should return 201-Created"
assert resp.status_code in [201, 202], msg
resp = Couch.get("/#{context[:db_name]}/0")
rev = resp.body["_rev"]
resp = Couch.delete("/#{context[:db_name]}/0", query: %{:rev => rev})
msg = "Should return 200-OK"
assert resp.status_code == 200, msg
Couch.delete("/#{db_name}")
end
@tag :with_db_name
test "Creating-Updating/Deleting doc with overriden quorum should return 202-Acepted/200-OK",
context do
db_name = context[:db_name]
Couch.put("/#{db_name}")
resp =
Couch.post(
"/#{context[:db_name]}",
query: %{:w => 3},
body: %{:_id => "0", :a => 1}
)
msg = "Should return 202-Acepted"
assert resp.status_code == 202, msg
resp = Couch.get("/#{context[:db_name]}/0")
rev = resp.body["_rev"]
resp =
Couch.put(
"/#{context[:db_name]}/0",
query: %{:w => 3},
body: %{:_id => "0", :_rev => rev, :a => 2}
)
msg = "Should return 202-Acepted"
assert resp.status_code == 202, msg
resp = Couch.get("/#{context[:db_name]}/0")
rev = resp.body["_rev"]
resp = Couch.delete("/#{context[:db_name]}/0", query: %{:w => 1, :rev => rev})
msg = "Should return 200-Ok"
assert resp.status_code == 200, msg
Couch.delete("/#{db_name}")
end
@tag :with_db_name
test "Copy doc should return 201-Created", context do
db_name = context[:db_name]
Couch.put("/#{db_name}")
Couch.post(
"/#{context[:db_name]}",
body: %{:_id => "0", :a => 1}
)
headers = [Destination: "1"]
resp = Couch.request(:copy, "/#{context[:db_name]}/0", headers: headers)
msg = "Should return 201-Created"
assert resp.status_code in [201, 202], msg
Couch.delete("/#{db_name}")
end
@doc_range 1..5
@tag :with_db_name
test "Bulk docs should return 201-Created", context do
db_name = context[:db_name]
Couch.put("/#{db_name}")
docs = create_docs(@doc_range)
resp = Couch.post("/#{db_name}/_bulk_docs", body: %{docs: docs})
msg = "Should return 201-Created"
assert resp.status_code in [201, 202], msg
Couch.delete("/#{db_name}")
end
@tag :with_db_name
test "Bulk docs overriden quorum should return 202-Acepted", context do
db_name = context[:db_name]
Couch.put("/#{db_name}")
docs = create_docs(@doc_range)
resp = Couch.post("/#{db_name}/_bulk_docs", query: %{:w => 3}, body: %{docs: docs})
msg = "Should return 202-Acepted"
assert resp.status_code == 202, msg
Couch.delete("/#{db_name}")
end
@tag :with_db_name
test "Attachments should return 201-Created", context do
db_name = context[:db_name]
Couch.put("/#{db_name}")
resp = Couch.post("/#{context[:db_name]}", body: %{:_id => "0"})
rev = resp.body["rev"]
resp =
Couch.put(
"/#{context[:db_name]}/0/foo.txt",
query: %{:rev => rev},
body: "This is a no bas64 encoded text",
headers: ["Content-Type": "text/plain;charset=utf-8"]
)
msg = "Should return 201-Created"
assert resp.status_code in [201, 202], msg
rev = resp.body["rev"]
resp = Couch.delete("/#{context[:db_name]}/0/foo.txt", query: %{:rev => rev})
msg = "Should return 200-Ok"
assert resp.status_code == 200, msg
Couch.delete("/#{db_name}")
end
@tag :with_db_name
test "Attachments overriden quorum should return 202-Acepted", context do
db_name = context[:db_name]
Couch.put("/#{db_name}")
resp = Couch.post("/#{context[:db_name]}", body: %{:_id => "0"})
rev = resp.body["rev"]
resp =
Couch.put(
"/#{context[:db_name]}/0/foo.txt",
query: %{:rev => rev, :w => 3},
body: "This is a no bas64 encoded text",
headers: ["Content-Type": "text/plain;charset=utf-8"]
)
msg = "Should return 202-Acepted"
assert resp.status_code == 202, msg
rev = resp.body["rev"]
resp =
Couch.delete(
"/#{context[:db_name]}/0/foo.txt",
query: %{:rev => rev, :w => 3}
)
msg = "Should return 200-Ok"
assert resp.status_code == 200, msg
Couch.delete("/#{db_name}")
end
end