blob: 3b26f5e59e75d552bea0ea20bbf1895d71d83e02 [file] [log] [blame]
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)
retry_until(fn ->
%{"rows" => values} = Couch.get("/#{db_name}/_design/coffee/_view/myview").body
assert 5 === hd(values)["value"]
end)
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