blob: ff071f3e623dde0d2246f66cdded1b0a842c0603 [file] [log] [blame]
defmodule LocalDocsTest do
use CouchTestCase
@moduletag :local_docs
@moduledoc """
Test CouchDB _local_docs
"""
setup_all do
db_name = random_db_name()
{:ok, _} = create_db(db_name)
on_exit(fn -> delete_db(db_name) end)
resp1 = Couch.put(
"/#{db_name}/_local/foo",
body: %{
_id: "foo",
bar: "baz"
}
)
assert resp1.status_code == 201
resp2 = Couch.put(
"/#{db_name}/_local/foo2",
body: %{
_id: "foo",
bar: "baz2"
}
)
assert resp2.status_code == 201
{:ok, [db_name: db_name]}
end
test "GET with no parameters", context do
resp = Couch.get(
"/#{context[:db_name]}/_local_docs"
)
assert resp.status_code == 200
assert length(Map.get(resp, :body)["rows"]) == 2
end
test "GET with multiple keys", context do
resp = Couch.get(
"/#{context[:db_name]}/_local_docs",
query: %{
:keys => "[\"_local/foo\", \"_local/foo2\"]",
}
)
assert resp.status_code == 200
assert length(Map.get(resp, :body)["rows"]) == 2
end
test "POST with empty body", context do
resp = Couch.post(
"/#{context[:db_name]}/_local_docs",
body: %{}
)
assert resp.status_code == 200
assert length(Map.get(resp, :body)["rows"]) == 2
end
test "POST with keys and limit", context do
resp = Couch.post(
"/#{context[:db_name]}/_local_docs",
body: %{
:keys => ["_local/foo", "_local/foo2"],
:limit => 1
}
)
assert resp.status_code == 200
assert length(Map.get(resp, :body)["rows"]) == 1
end
test "POST with query parameter and JSON body", context do
resp = Couch.post(
"/#{context[:db_name]}/_local_docs",
query: %{
:limit => 1
},
body: %{
:keys => ["_local/foo", "_local/foo2"]
}
)
assert resp.status_code == 200
assert length(Map.get(resp, :body)["rows"]) == 1
end
test "POST edge case with colliding parameters - query takes precedence", context do
resp = Couch.post(
"/#{context[:db_name]}/_local_docs",
query: %{
:limit => 0
},
body: %{
:keys => ["_local/foo", "_local/foo2"],
:limit => 2
}
)
assert resp.status_code == 200
assert Enum.empty?(Map.get(resp, :body)["rows"])
end
end