summaryrefslogtreecommitdiff
path: root/test/elixir/test/batch_save_test.exs
diff options
context:
space:
mode:
Diffstat (limited to 'test/elixir/test/batch_save_test.exs')
-rw-r--r--test/elixir/test/batch_save_test.exs42
1 files changed, 42 insertions, 0 deletions
diff --git a/test/elixir/test/batch_save_test.exs b/test/elixir/test/batch_save_test.exs
new file mode 100644
index 000000000..4863a8d03
--- /dev/null
+++ b/test/elixir/test/batch_save_test.exs
@@ -0,0 +1,42 @@
+defmodule BatchSaveTest do
+ use CouchTestCase
+
+ @moduletag :batch_save
+
+ @moduledoc """
+ Test CouchDB batch save
+ This is a port of batch_save.js
+ """
+
+ @doc_count 100
+
+ @tag :with_db
+ test "batch put", context do
+ path_fun = &("/#{&1}/#{&2}")
+ run(&Couch.put/2, path_fun, context[:db_name], @doc_count)
+ end
+
+ @tag :with_db
+ test "batch post", context do
+ path_fun = fn(db_name, _) -> "/#{db_name}" end
+ run(&Couch.post/2, path_fun, context[:db_name], @doc_count)
+ end
+
+ @tag :with_db
+ test "batch put with identical doc ids", context do
+ path_fun = fn(db_name, _) -> "/#{db_name}/foo" end
+ run(&Couch.put/2, path_fun, context[:db_name], 1)
+ end
+
+ defp run(req_fun, path_fun, db_name, expected_doc_count) do
+ for i <- 1..@doc_count do
+ opts = [body: %{a: i, b: i}, query: %{batch: "ok"}]
+ resp = req_fun.(path_fun.(db_name, i), opts)
+ assert resp.body["ok"] and resp.status_code == 202
+ end
+ retry_until(fn ->
+ Couch.get("/#{db_name}").body["doc_count"] == expected_doc_count
+ end)
+ end
+
+end