summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGarren Smith <garren.smith@gmail.com>2019-01-15 17:14:15 +0200
committerGarren Smith <garren.smith@gmail.com>2019-01-15 17:14:15 +0200
commit0cd437126a9fad591aa56a37bbd6f34b183329c5 (patch)
treefa1dc9a188c5938b521af4e10f6abf880e2d681a
parent2635741ef15d609836b491adc4f35b2bd3fa9348 (diff)
downloadcouchdb-partition-all-docs-tests.tar.gz
add partition tests for all_docs endpointpartition-all-docs-tests
-rw-r--r--test/elixir/test/partition_all_docs_test.exs118
1 files changed, 118 insertions, 0 deletions
diff --git a/test/elixir/test/partition_all_docs_test.exs b/test/elixir/test/partition_all_docs_test.exs
new file mode 100644
index 000000000..0941daf59
--- /dev/null
+++ b/test/elixir/test/partition_all_docs_test.exs
@@ -0,0 +1,118 @@
+defmodule PartitionAllDocsTest do
+ use CouchTestCase
+ import PartitionHelpers
+
+ @moduledoc """
+ Test Partition functionality for for all_docs
+ """
+
+ setup_all do
+ db_name = random_db_name()
+ {:ok, _} = create_db(db_name, query: %{partitioned: true, q: 1})
+ on_exit(fn -> delete_db(db_name) end)
+
+ create_partition_docs(db_name)
+
+ {:ok, [db_name: db_name]}
+ end
+
+ test "all_docs with partitioned:true returns partitioned fields", context do
+ db_name = context[:db_name]
+
+ url = "/#{db_name}/_partition/foo/_all_docs"
+ resp = Couch.get(url)
+ assert resp.status_code == 200
+ partitions = get_partitions(resp)
+ assert Enum.dedup(partitions) == ["foo"]
+
+ url = "/#{db_name}/_partition/bar/_all_docs"
+ resp = Couch.get(url)
+ assert resp.status_code == 200
+ partitions = get_partitions(resp)
+ assert Enum.dedup(partitions) == ["bar"]
+ end
+
+ test "partition all_docs errors with incorrect partition supplied", context do
+ db_name = context[:db_name]
+
+ url = "/#{db_name}/_partition/_bar/_all_docs"
+ resp = Couch.get(url)
+ assert resp.status_code == 400
+
+ url = "/#{db_name}/_partition//_all_docs"
+ resp = Couch.get(url)
+ assert resp.status_code == 400
+ end
+
+ test "partitioned _all_docs works with startkey, endkey range", context do
+ db_name = context[:db_name]
+
+ url = "/#{db_name}/_partition/foo/_all_docs"
+ resp = Couch.get(url, query: %{start_key: "\"foo:12\"", end_key: "\"foo:2\""})
+ assert resp.status_code == 200
+ partitions = get_partitions(resp)
+ assert length(partitions) == 5
+ assert Enum.dedup(partitions) == ["foo"]
+ end
+
+ test "partitioned _all_docs works with keys", context do
+ db_name = context[:db_name]
+
+ url = "/#{db_name}/_partition/foo/_all_docs"
+ resp = Couch.post(url, body: %{keys: ["foo:2", "foo:4", "foo:6"]})
+ assert resp.status_code == 200
+ ids = get_ids(resp)
+ assert length(ids) == 3
+ assert ids == ["foo:2", "foo:4", "foo:6"]
+ end
+
+ test "partition _all_docs works with limit", context do
+ db_name = context[:db_name]
+
+ url = "/#{db_name}/_partition/foo/_all_docs"
+ resp = Couch.get(url, query: %{limit: 5})
+ assert resp.status_code == 200
+ partitions = get_partitions(resp)
+ assert length(partitions) == 5
+ assert Enum.dedup(partitions) == ["foo"]
+ end
+
+ test "partition _all_docs with descending", context do
+ db_name = context[:db_name]
+
+ url = "/#{db_name}/_partition/foo/_all_docs"
+ resp = Couch.get(url, query: %{descending: true, limit: 5})
+ assert resp.status_code == 200
+ ids = get_ids(resp)
+ assert length(ids) == 5
+ assert ids == ["foo:98", "foo:96", "foo:94", "foo:92", "foo:90"]
+
+ resp = Couch.get(url, query: %{descending: false, limit: 5})
+ assert resp.status_code == 200
+ ids = get_ids(resp)
+ assert length(ids) == 5
+ assert ids == ["foo:10", "foo:100", "foo:12", "foo:14", "foo:16"]
+ end
+
+ test "partition _all_docs with skip", context do
+ db_name = context[:db_name]
+
+ url = "/#{db_name}/_partition/foo/_all_docs"
+ resp = Couch.get(url, query: %{skip: 5, limit: 5})
+ assert resp.status_code == 200
+ ids = get_ids(resp)
+ assert length(ids) == 5
+ assert ids == ["foo:18", "foo:2", "foo:20", "foo:22", "foo:24"]
+ end
+
+ test "partition _all_docs with key", context do
+ db_name = context[:db_name]
+
+ url = "/#{db_name}/_partition/foo/_all_docs"
+ resp = Couch.get(url, query: %{key: "\"foo:22\""})
+ assert resp.status_code == 200
+ ids = get_ids(resp)
+ assert length(ids) == 1
+ assert ids == ["foo:22"]
+ end
+end