diff options
author | Alessio Biancalana <dottorblaster@gmail.com> | 2018-11-28 09:08:23 +0100 |
---|---|---|
committer | garren smith <garren.smith@gmail.com> | 2018-11-28 10:08:23 +0200 |
commit | 78b0a7d7ebe50d0cfc4f25d8779c82386f10af8a (patch) | |
tree | 6072f8d521b2a223fb5f227e7543ad86e55fbeab | |
parent | 45eba6ee925c253cc99653a0d0fc3707b4d74417 (diff) | |
download | couchdb-78b0a7d7ebe50d0cfc4f25d8779c82386f10af8a.tar.gz |
test: port coffee.js to Elixir test suite (#1760)
-rw-r--r-- | test/elixir/README.md | 2 | ||||
-rw-r--r-- | test/elixir/test/coffee_test.exs | 68 |
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 |