summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlessio Biancalana <dottorblaster@gmail.com>2018-11-28 09:08:23 +0100
committergarren smith <garren.smith@gmail.com>2018-11-28 10:08:23 +0200
commit78b0a7d7ebe50d0cfc4f25d8779c82386f10af8a (patch)
tree6072f8d521b2a223fb5f227e7543ad86e55fbeab
parent45eba6ee925c253cc99653a0d0fc3707b4d74417 (diff)
downloadcouchdb-78b0a7d7ebe50d0cfc4f25d8779c82386f10af8a.tar.gz
test: port coffee.js to Elixir test suite (#1760)
-rw-r--r--test/elixir/README.md2
-rw-r--r--test/elixir/test/coffee_test.exs68
2 files changed, 69 insertions, 1 deletions
diff --git a/test/elixir/README.md b/test/elixir/README.md
index 48f936fcb..1b515c2da 100644
--- a/test/elixir/README.md
+++ b/test/elixir/README.md
@@ -27,7 +27,7 @@ X means done, - means partially
- [ ] Port batch_save.js
- [ ] Port bulk_docs.js
- [X] Port changes.js
- - [ ] Port coffee.js
+ - [X] Port coffee.js
- [ ] Port compact.js
- [X] Port config.js
- [ ] Port conflicts.js
diff --git a/test/elixir/test/coffee_test.exs b/test/elixir/test/coffee_test.exs
new file mode 100644
index 000000000..19b1e6987
--- /dev/null
+++ b/test/elixir/test/coffee_test.exs
@@ -0,0 +1,68 @@
+defmodule CoffeeTest do
+ use CouchTestCase
+
+ @moduletag :coffee
+
+ @moduledoc """
+ Test basic coffeescript functionality.
+ This is a port of the coffee.js test suite.
+ """
+
+ @tag :with_db
+ test "CoffeeScript basic functionality", context do
+ db_name = context[:db_name]
+
+ docs = [
+ %{:_id => "a", :foo => 100},
+ %{:foo => 1},
+ %{:foo => 1},
+ %{:foo => 2},
+ %{:foo => 2},
+ %{:bar => 1},
+ %{:bar => 1},
+ %{:bar => 2},
+ %{:bar => 2}
+ ]
+
+ resp = Couch.post("/#{db_name}/_bulk_docs", body: %{docs: docs})
+
+ design_doc = %{
+ :_id => "_design/coffee",
+ :language => "coffeescript",
+ :views => %{
+ :myview => %{
+ :map => "(doc) -> if doc.foo\n emit(doc.foo, 1)",
+ :reduce => "(keys, values, rereduce) ->\n sum = 0\n for x in values\n sum = sum + x\n sum"
+ }
+ },
+ :shows => %{
+ :myshow => "(doc) ->\n \"Foo #\{doc.foo}\""
+ },
+ :lists => %{
+ :mylist =>
+ "(head, req) ->\n while row = getRow()\n send(toJSON({\"resp\": \"Foo #\{row.value}\"}))\n return"
+ },
+ :filters => %{
+ :filter => "(doc) ->\n doc.foo"
+ }
+ }
+
+ design_resp = Couch.put("/#{db_name}/_design/coffee", body: design_doc)
+ assert design_resp.status_code === 201
+
+ assert resp.status_code === 201 and length(resp.body) === length(docs)
+
+ %{"rows" => values} = Couch.get("/#{db_name}/_design/coffee/_view/myview").body
+
+ assert 5 === hd(values)["value"]
+
+ assert Couch.get("/#{db_name}/_design/coffee/_show/myshow/a").body === "Foo 100"
+
+ %{"resp" => list_output} = Couch.get("/#{db_name}/_design/coffee/_list/mylist/myview").body
+ assert list_output === "Foo 5"
+
+ %{"results" => changes_results} = Couch.get("/#{db_name}/_changes", query: %{"filter" => "coffee/filter"}).body
+
+ assert length(changes_results) === 5
+ end
+end