Add tests for filter by filter function
diff --git a/test/couch_changes_tests.erl b/test/couch_changes_tests.erl
index fa64e9e..3c0e5f6 100644
--- a/test/couch_changes_tests.erl
+++ b/test/couch_changes_tests.erl
@@ -66,6 +66,7 @@
filter_by_design(),
continuous_feed(),
%%filter_by_custom_function()
+ filter_by_filter_function(),
filter_by_view()
]
}
@@ -131,6 +132,19 @@
}
}.
+filter_by_filter_function() ->
+ {
+ "Filter by filters",
+ {
+ foreach,
+ fun setup/0, fun teardown/1,
+ [
+ fun should_filter_by_doc_attribute/1,
+ fun should_filter_by_user_ctx/1
+ ]
+ }
+ }.
+
filter_by_view() ->
{
"Filter _view",
@@ -590,6 +604,60 @@
?assert(Heartbeats3 > Heartbeats2)
end)}.
+should_filter_by_doc_attribute({DbName, _}) ->
+ ?_test(
+ begin
+ DDocId = <<"_design/app">>,
+ DDoc = couch_doc:from_json_obj({[
+ {<<"_id">>, DDocId},
+ {<<"language">>, <<"javascript">>},
+ {<<"filters">>, {[
+ {<<"valid">>, <<"function(doc, req) {"
+ " if (doc._id == 'doc3') {"
+ " return true; "
+ "} }">>}
+ ]}}
+ ]}),
+ ChArgs = #changes_args{filter = "app/valid"},
+ Req = {json_req, null},
+ ok = update_ddoc(DbName, DDoc),
+ {Rows, LastSeq, UpSeq} = run_changes_query(DbName, ChArgs, Req),
+ ?assertEqual(1, length(Rows)),
+ [#row{seq = Seq, id = Id}] = Rows,
+ ?assertEqual(<<"doc3">>, Id),
+ ?assertEqual(6, Seq),
+ ?assertEqual(UpSeq, LastSeq)
+ end).
+
+should_filter_by_user_ctx({DbName, _}) ->
+ ?_test(
+ begin
+ DDocId = <<"_design/app">>,
+ DDoc = couch_doc:from_json_obj({[
+ {<<"_id">>, DDocId},
+ {<<"language">>, <<"javascript">>},
+ {<<"filters">>, {[
+ {<<"valid">>, <<"function(doc, req) {"
+ " if (req.userCtx.name == doc._id) {"
+ " return true; "
+ "} }">>}
+ ]}}
+ ]}),
+ ChArgs = #changes_args{filter = "app/valid"},
+ UserCtx = #user_ctx{name = <<"doc3">>, roles = []},
+ DbRec = #db{name = DbName, user_ctx = UserCtx},
+ Req = {json_req, {[{
+ <<"userCtx">>, couch_util:json_user_ctx(DbRec)
+ }]}},
+ ok = update_ddoc(DbName, DDoc),
+ {Rows, LastSeq, UpSeq} = run_changes_query(DbName, ChArgs, Req),
+ ?assertEqual(1, length(Rows)),
+ [#row{seq = Seq, id = Id}] = Rows,
+ ?assertEqual(<<"doc3">>, Id),
+ ?assertEqual(6, Seq),
+ ?assertEqual(UpSeq, LastSeq)
+ end).
+
should_filter_by_view({DbName, _}) ->
?_test(
begin