This is an automated email from the ASF dual-hosted git repository.

jiahuili430 pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/couchdb.git


The following commit(s) were added to refs/heads/main by this push:
     new b46672943 Add tests for `_changes` endpoint
b46672943 is described below

commit b46672943ce50e115660a2a3dcd49f8d14183945
Author: Jiahui Li <[email protected]>
AuthorDate: Fri Jan 5 09:56:47 2024 -0600

    Add tests for `_changes` endpoint
    
    Test `_conflicts` field when there are deleted conflicting docs.
---
 src/chttpd/test/eunit/chttpd_changes_test.erl | 209 ++++++++++++++------------
 1 file changed, 113 insertions(+), 96 deletions(-)

diff --git a/src/chttpd/test/eunit/chttpd_changes_test.erl 
b/src/chttpd/test/eunit/chttpd_changes_test.erl
index 5e67d96c2..b08eb65fd 100644
--- a/src/chttpd/test/eunit/chttpd_changes_test.erl
+++ b/src/chttpd/test/eunit/chttpd_changes_test.erl
@@ -26,6 +26,7 @@
 -define(REVA, <<"a">>).
 -define(REVB, <<"b">>).
 -define(REVC, <<"c">>).
+-define(REVD, <<"d">>).
 -define(DELETED, true).
 -define(LEAFREV, false).
 
@@ -40,6 +41,7 @@ test_docs() ->
         {?DOC3, [?REVA], ?LEAFREV},
         {?DOC1, [?REVB, ?REVA], ?LEAFREV},
         {?DOC1, [?REVC, ?REVA], ?LEAFREV},
+        {?DOC1, [?REVD, ?REVA], ?DELETED},
         {?DOC3, [?REVB, ?REVA], ?DELETED},
         {?DDOC2, [?REVC, ?REVA], ?LEAFREV}
     ].
@@ -153,13 +155,13 @@ changes_include_docs_test_() ->
 
 t_basic({_, DbUrl}) ->
     Res = {Seq, Pending, Rows} = changes(DbUrl),
-    ?assertEqual(7, Seq),
+    ?assertEqual(8, Seq),
     ?assertEqual(0, Pending),
     ?assertEqual(
         [
-            {5, {?DOC1, <<"2-c">>}, ?LEAFREV},
-            {6, {?DOC3, <<"2-b">>}, ?DELETED},
-            {7, {?DDOC2, <<"2-c">>}, ?LEAFREV}
+            {6, {?DOC1, <<"2-c">>}, ?LEAFREV},
+            {7, {?DOC3, <<"2-b">>}, ?DELETED},
+            {8, {?DDOC2, <<"2-c">>}, ?LEAFREV}
         ],
         Rows
     ),
@@ -168,7 +170,7 @@ t_basic({_, DbUrl}) ->
 
 t_basic_q8({_, DbUrl}) ->
     {Seq, Pending, Rows} = changes(DbUrl),
-    ?assertEqual(7, Seq),
+    ?assertEqual(8, Seq),
     ?assertEqual(0, Pending),
     {Seqs, Revs, _Deleted} = lists:unzip3(Rows),
     ?assertEqual(
@@ -183,13 +185,13 @@ t_basic_q8({_, DbUrl}) ->
 
 t_basic_post({_, DbUrl}) ->
     {Seq, Pending, Rows} = changes_post(DbUrl, #{}),
-    ?assertEqual(7, Seq),
+    ?assertEqual(8, Seq),
     ?assertEqual(0, Pending),
     ?assertEqual(
         [
-            {5, {?DOC1, <<"2-c">>}, ?LEAFREV},
-            {6, {?DOC3, <<"2-b">>}, ?DELETED},
-            {7, {?DDOC2, <<"2-c">>}, ?LEAFREV}
+            {6, {?DOC1, <<"2-c">>}, ?LEAFREV},
+            {7, {?DOC3, <<"2-b">>}, ?DELETED},
+            {8, {?DDOC2, <<"2-c">>}, ?LEAFREV}
         ],
         Rows
     ).
@@ -197,13 +199,13 @@ t_basic_post({_, DbUrl}) ->
 t_continuous({_, DbUrl}) ->
     Params = "?feed=continuous&timeout=10",
     {Seq, Pending, Rows} = changes(DbUrl, Params),
-    ?assertEqual(7, Seq),
+    ?assertEqual(8, Seq),
     ?assertEqual(0, Pending),
     ?assertEqual(
         [
-            {5, {?DOC1, <<"2-c">>}, ?LEAFREV},
-            {6, {?DOC3, <<"2-b">>}, ?DELETED},
-            {7, {?DDOC2, <<"2-c">>}, ?LEAFREV}
+            {6, {?DOC1, <<"2-c">>}, ?LEAFREV},
+            {7, {?DOC3, <<"2-b">>}, ?DELETED},
+            {8, {?DDOC2, <<"2-c">>}, ?LEAFREV}
         ],
         Rows
     ).
@@ -211,7 +213,7 @@ t_continuous({_, DbUrl}) ->
 t_continuous_q8({_, DbUrl}) ->
     Params = "?feed=continuous&timeout=10",
     {Seq, Pending, Rows} = changes(DbUrl, Params),
-    ?assertEqual(7, Seq),
+    ?assertEqual(8, Seq),
     ?assertEqual(0, Pending),
     {Seqs, Revs, _Deleted} = lists:unzip3(Rows),
     ?assertEqual(
@@ -227,13 +229,13 @@ t_continuous_q8({_, DbUrl}) ->
 t_continuous_zero_timeout({_, DbUrl}) ->
     Params = "?feed=continuous&timeout=0",
     {Seq, Pending, Rows} = changes(DbUrl, Params),
-    ?assertEqual(7, Seq),
+    ?assertEqual(8, Seq),
     ?assertEqual(0, Pending),
     ?assertEqual(
         [
-            {5, {?DOC1, <<"2-c">>}, ?LEAFREV},
-            {6, {?DOC3, <<"2-b">>}, ?DELETED},
-            {7, {?DDOC2, <<"2-c">>}, ?LEAFREV}
+            {6, {?DOC1, <<"2-c">>}, ?LEAFREV},
+            {7, {?DOC3, <<"2-b">>}, ?DELETED},
+            {8, {?DDOC2, <<"2-c">>}, ?LEAFREV}
         ],
         Rows
     ).
@@ -241,13 +243,13 @@ t_continuous_zero_timeout({_, DbUrl}) ->
 t_longpoll({_, DbUrl}) ->
     Params = "?feed=longpoll",
     {Seq, Pending, Rows} = changes(DbUrl, Params),
-    ?assertEqual(7, Seq),
+    ?assertEqual(8, Seq),
     ?assertEqual(0, Pending),
     ?assertEqual(
         [
-            {5, {?DOC1, <<"2-c">>}, ?LEAFREV},
-            {6, {?DOC3, <<"2-b">>}, ?DELETED},
-            {7, {?DDOC2, <<"2-c">>}, ?LEAFREV}
+            {6, {?DOC1, <<"2-c">>}, ?LEAFREV},
+            {7, {?DOC3, <<"2-b">>}, ?DELETED},
+            {8, {?DDOC2, <<"2-c">>}, ?LEAFREV}
         ],
         Rows
     ).
@@ -263,8 +265,8 @@ t_continuous_limit_zero({_, DbUrl}) ->
 t_limit_one({_, DbUrl}) ->
     Params = "?limit=1",
     ?assertEqual(
-        {5, 2, [
-            {5, {?DOC1, <<"2-c">>}, ?LEAFREV}
+        {6, 2, [
+            {6, {?DOC1, <<"2-c">>}, ?LEAFREV}
         ]},
         changes(DbUrl, Params)
     ).
@@ -281,39 +283,39 @@ t_limit_one_q8({_, DbUrl}) ->
 t_style_all_docs({_, DbUrl}) ->
     Params = "?style=all_docs",
     {Seq, Pending, Rows} = changes(DbUrl, Params),
-    ?assertEqual(7, Seq),
+    ?assertEqual(8, Seq),
     ?assertEqual(0, Pending),
     ?assertEqual(
         [
-            {5, {?DOC1, [<<"2-c">>, <<"2-b">>]}, ?LEAFREV},
-            {6, {?DOC3, <<"2-b">>}, ?DELETED},
-            {7, {?DDOC2, <<"2-c">>}, ?LEAFREV}
+            {6, {?DOC1, [<<"2-c">>, <<"2-b">>, <<"2-d">>]}, ?LEAFREV},
+            {7, {?DOC3, <<"2-b">>}, ?DELETED},
+            {8, {?DDOC2, <<"2-c">>}, ?LEAFREV}
         ],
         Rows
     ).
 
 t_since_now({_, DbUrl}) ->
     Params = "?since=now",
-    ?assertEqual({7, 0, []}, changes(DbUrl, Params)).
+    ?assertEqual({8, 0, []}, changes(DbUrl, Params)).
 
 t_continuous_since_now({_, DbUrl}) ->
     Params = "?feed=continuous&timeout=10&since=now",
-    ?assertEqual({7, 0, []}, changes(DbUrl, Params)).
+    ?assertEqual({8, 0, []}, changes(DbUrl, Params)).
 
 t_longpoll_since_now({_, DbUrl}) ->
     Params = "?feed=longpoll&timeout=10&since=now",
-    ?assertEqual({7, 0, []}, changes(DbUrl, Params)).
+    ?assertEqual({8, 0, []}, changes(DbUrl, Params)).
 
 t_reverse({_, DbUrl}) ->
     Params = "?descending=true",
     {Seq, Pending, Rows} = changes(DbUrl, Params),
-    ?assertEqual(5, Seq),
+    ?assertEqual(6, Seq),
     ?assertEqual(0, Pending),
     ?assertEqual(
         [
-            {7, {?DDOC2, <<"2-c">>}, ?LEAFREV},
-            {6, {?DOC3, <<"2-b">>}, ?DELETED},
-            {5, {?DOC1, <<"2-c">>}, ?LEAFREV}
+            {8, {?DDOC2, <<"2-c">>}, ?LEAFREV},
+            {7, {?DOC3, <<"2-b">>}, ?DELETED},
+            {6, {?DOC1, <<"2-c">>}, ?LEAFREV}
         ],
         Rows
     ).
@@ -321,13 +323,13 @@ t_reverse({_, DbUrl}) ->
 t_continuous_reverse({_, DbUrl}) ->
     Params = "?feed=continuous&timeout=10&descending=true",
     {Seq, Pending, Rows} = changes(DbUrl, Params),
-    ?assertEqual(5, Seq),
+    ?assertEqual(6, Seq),
     ?assertEqual(0, Pending),
     ?assertEqual(
         [
-            {7, {?DDOC2, <<"2-c">>}, ?LEAFREV},
-            {6, {?DOC3, <<"2-b">>}, ?DELETED},
-            {5, {?DOC1, <<"2-c">>}, ?LEAFREV}
+            {8, {?DDOC2, <<"2-c">>}, ?LEAFREV},
+            {7, {?DOC3, <<"2-b">>}, ?DELETED},
+            {6, {?DOC1, <<"2-c">>}, ?LEAFREV}
         ],
         Rows
     ).
@@ -335,7 +337,7 @@ t_continuous_reverse({_, DbUrl}) ->
 t_reverse_q8({_, DbUrl}) ->
     Params = "?descending=true",
     {Seq, Pending, Rows} = changes(DbUrl, Params),
-    ?assertEqual(7, Seq),
+    ?assertEqual(8, Seq),
     ?assertEqual(0, Pending),
     {Seqs, Revs, _Deleted} = lists:unzip3(Rows),
     ?assertEqual(
@@ -350,13 +352,13 @@ t_reverse_q8({_, DbUrl}) ->
 
 t_reverse_limit_zero({_, DbUrl}) ->
     Params = "?descending=true&limit=0",
-    ?assertEqual({7, 3, []}, changes(DbUrl, Params)).
+    ?assertEqual({8, 3, []}, changes(DbUrl, Params)).
 
 t_reverse_limit_one({_, DbUrl}) ->
     Params = "?descending=true&limit=1",
     ?assertEqual(
-        {7, 2, [
-            {7, {?DDOC2, <<"2-c">>}, ?LEAFREV}
+        {8, 2, [
+            {8, {?DDOC2, <<"2-c">>}, ?LEAFREV}
         ]},
         changes(DbUrl, Params)
     ).
@@ -364,7 +366,7 @@ t_reverse_limit_one({_, DbUrl}) ->
 t_reverse_limit_one_q8({_, DbUrl}) ->
     Params = "?descending=true&limit=1",
     ?assertMatch(
-        {7, 2, [
+        {8, 2, [
             {_, {<<_/binary>>, <<_/binary>>}, _}
         ]},
         changes(DbUrl, Params)
@@ -373,12 +375,12 @@ t_reverse_limit_one_q8({_, DbUrl}) ->
 t_seq_interval({_, DbUrl}) ->
     Params = "?seq_interval=3",
     {Seq, Pending, Rows} = changes(DbUrl, Params),
-    ?assertEqual(7, Seq),
+    ?assertEqual(8, Seq),
     ?assertEqual(0, Pending),
     ?assertEqual(
         [
             {null, {?DOC1, <<"2-c">>}, ?LEAFREV},
-            {6, {?DOC3, <<"2-b">>}, ?DELETED},
+            {7, {?DOC3, <<"2-b">>}, ?DELETED},
             {null, {?DDOC2, <<"2-c">>}, ?LEAFREV}
         ],
         Rows
@@ -388,14 +390,14 @@ t_selector_filter({_, DbUrl}) ->
     Params = "?filter=_selector",
     Body = #{<<"selector">> => #{<<"_id">> => ?DOC1}},
     {Seq, Pending, Rows} = changes_post(DbUrl, Body, Params),
-    ?assertEqual(7, Seq),
+    ?assertEqual(8, Seq),
     ?assertEqual(0, Pending),
     ?assertMatch([{_, {?DOC1, <<"2-c">>}, ?LEAFREV}], Rows).
 
 t_design_filter({_, DbUrl}) ->
     Params = "?filter=_design",
     {Seq, Pending, Rows} = changes(DbUrl, Params),
-    ?assertEqual(7, Seq),
+    ?assertEqual(8, Seq),
     ?assertEqual(2, Pending),
     ?assertMatch([{_, {?DDOC2, <<"2-c">>}, ?LEAFREV}], Rows).
 
@@ -407,8 +409,8 @@ t_docs_id_filter({_, DbUrl}) ->
     ?assertEqual(1, meck:num_calls(couch_changes, send_changes_doc_ids, 6)),
     ?assertEqual(
         [
-            {5, {?DOC1, <<"2-c">>}, ?LEAFREV},
-            {6, {?DOC3, <<"2-b">>}, ?DELETED}
+            {6, {?DOC1, <<"2-c">>}, ?LEAFREV},
+            {7, {?DOC3, <<"2-b">>}, ?DELETED}
         ],
         Rows
     ).
@@ -435,8 +437,8 @@ t_docs_id_filter_over_limit({_, DbUrl}) ->
     ?assertEqual(0, meck:num_calls(couch_changes, send_changes_doc_ids, 6)),
     ?assertEqual(
         [
-            {5, {?DOC1, <<"2-c">>}, ?LEAFREV},
-            {6, {?DOC3, <<"2-b">>}, ?DELETED}
+            {6, {?DOC1, <<"2-c">>}, ?LEAFREV},
+            {7, {?DOC3, <<"2-b">>}, ?DELETED}
         ],
         Rows
     ).
@@ -449,15 +451,15 @@ t_js_filter({_, DbUrl}) ->
     {_, #{<<"rev">> := Rev, <<"ok">> := true}} = req(put, DDocUrl, DDoc),
     Params = "?filter=filters/f",
     {Seq, Pending, Rows} = changes(DbUrl, Params),
-    ?assertEqual(8, Seq),
+    ?assertEqual(9, Seq),
     ?assertEqual(0, Pending),
     ?assertEqual(
         [
-            {6, {?DOC3, <<"2-b">>}, ?DELETED}
+            {7, {?DOC3, <<"2-b">>}, ?DELETED}
         ],
         Rows
     ),
-    {200, #{}} = req(delete, DDocUrl ++ "?rev=" ++ binary_to_list(Rev)).
+    delete_ddocs(DDocUrl, Rev).
 
 t_js_filter_no_match({_, DbUrl}) ->
     DDocId = "_design/filters",
@@ -466,8 +468,8 @@ t_js_filter_no_match({_, DbUrl}) ->
     DDocUrl = DbUrl ++ "/" ++ DDocId,
     {_, #{<<"rev">> := Rev, <<"ok">> := true}} = req(put, DDocUrl, DDoc),
     Params = "?filter=filters/f",
-    ?assertEqual({8, 0, []}, changes(DbUrl, Params)),
-    {200, #{}} = req(delete, DDocUrl ++ "?rev=" ++ binary_to_list(Rev)).
+    ?assertEqual({9, 0, []}, changes(DbUrl, Params)),
+    delete_ddocs(DDocUrl, Rev).
 
 t_js_filter_with_query_param({_, DbUrl}) ->
     DDocId = "_design/filters",
@@ -477,32 +479,32 @@ t_js_filter_with_query_param({_, DbUrl}) ->
     {_, #{<<"rev">> := Rev, <<"ok">> := true}} = req(put, DDocUrl, DDoc),
     Params = "?filter=filters/f&yup=1",
     {Seq, Pending, Rows} = changes(DbUrl, Params),
-    ?assertEqual(8, Seq),
+    ?assertEqual(9, Seq),
     ?assertEqual(0, Pending),
     ?assertMatch(
         [
-            {5, {?DOC1, <<"2-c">>}, ?LEAFREV},
-            {6, {?DOC3, <<"2-b">>}, ?DELETED},
-            {7, {?DDOC2, <<"2-c">>}, ?LEAFREV},
-            {8, {<<"_design/filters">>, <<"1-", _/binary>>}, ?LEAFREV}
+            {6, {?DOC1, <<"2-c">>}, ?LEAFREV},
+            {7, {?DOC3, <<"2-b">>}, ?DELETED},
+            {8, {?DDOC2, <<"2-c">>}, ?LEAFREV},
+            {9, {<<"_design/filters">>, <<"1-", _/binary>>}, ?LEAFREV}
         ],
         Rows
     ),
-    {200, #{}} = req(delete, DDocUrl ++ "?rev=" ++ binary_to_list(Rev)).
+    delete_ddocs(DDocUrl, Rev).
 
 t_view_filter({_, DbUrl}) ->
-    {DDocUrl, Rev} = create_ddocs_view(DbUrl, ?DOC1),
+    {DDocUrl, Rev} = create_ddocs(DbUrl, ?DOC1, view),
     Params = "?filter=_view&view=views/v",
     {Seq, Pending, Rows} = changes(DbUrl, Params),
-    ?assertEqual(8, Seq),
+    ?assertEqual(9, Seq),
     ?assertEqual(0, Pending),
-    ?assertEqual([{5, {?DOC1, <<"2-c">>}, ?LEAFREV}], Rows),
+    ?assertEqual([{6, {?DOC1, <<"2-c">>}, ?LEAFREV}], Rows),
     delete_ddocs(DDocUrl, Rev).
 
 t_view_filter_no_match({_, DbUrl}) ->
-    {DDocUrl, Rev} = create_ddocs_view(DbUrl, <<"docX">>),
+    {DDocUrl, Rev} = create_ddocs(DbUrl, <<"docX">>, view),
     Params = "?filter=_view&view=views/v",
-    ?assertEqual({8, 0, []}, changes(DbUrl, Params)),
+    ?assertEqual({9, 0, []}, changes(DbUrl, Params)),
     delete_ddocs(DDocUrl, Rev).
 
 t_include_docs({_, DbUrl}) ->
@@ -537,7 +539,9 @@ t_all_docs_include_docs({_, DbUrl}) ->
     ?assertMatch(
         [
             #{
-                <<"changes">> := [#{<<"rev">> := <<"2-c">>}, #{<<"rev">> := 
<<"2-b">>}],
+                <<"changes">> := [
+                    #{<<"rev">> := <<"2-c">>}, #{<<"rev">> := <<"2-b">>}, 
#{<<"rev">> := <<"2-d">>}
+                ],
                 <<"doc">> := #{<<"_id">> := ?DOC1, <<"_rev">> := <<"2-c">>}
             },
             #{
@@ -578,7 +582,9 @@ t_selector_all_docs_include_docs({_, DbUrl}) ->
     ?assertMatch(
         [
             #{
-                <<"changes">> := [#{<<"rev">> := <<"2-c">>}, #{<<"rev">> := 
<<"2-b">>}],
+                <<"changes">> := [
+                    #{<<"rev">> := <<"2-c">>}, #{<<"rev">> := <<"2-b">>}, 
#{<<"rev">> := <<"2-d">>}
+                ],
                 <<"doc">> := #{<<"_id">> := ?DOC1, <<"_rev">> := <<"2-c">>}
             }
         ],
@@ -604,7 +610,11 @@ t_conflicts_all_docs({_, DbUrl}) ->
     {200, #{<<"results">> := Res1}} = req(get, DbUrl ++ "/_changes" ++ Params),
     ?assertMatch(
         [
-            #{<<"changes">> := [#{<<"rev">> := <<"2-c">>}, #{<<"rev">> := 
<<"2-b">>}]},
+            #{
+                <<"changes">> := [
+                    #{<<"rev">> := <<"2-c">>}, #{<<"rev">> := <<"2-b">>}, 
#{<<"rev">> := <<"2-d">>}
+                ]
+            },
             #{<<"changes">> := [#{<<"rev">> := <<"2-b">>}]},
             #{<<"changes">> := [#{<<"rev">> := <<"2-c">>}]}
         ],
@@ -647,7 +657,9 @@ t_conflicts_all_docs_include_docs({_, DbUrl}) ->
     ?assertMatch(
         [
             #{
-                <<"changes">> := [#{<<"rev">> := <<"2-c">>}, #{<<"rev">> := 
<<"2-b">>}],
+                <<"changes">> := [
+                    #{<<"rev">> := <<"2-c">>}, #{<<"rev">> := <<"2-b">>}, 
#{<<"rev">> := <<"2-d">>}
+                ],
                 <<"doc">> := #{
                     <<"_id">> := ?DOC1, <<"_rev">> := <<"2-c">>, 
<<"_conflicts">> := [<<"2-b">>]
                 }
@@ -692,7 +704,9 @@ t_conflicts_selector_all_docs_include_docs({_, DbUrl}) ->
     ?assertMatch(
         [
             #{
-                <<"changes">> := [#{<<"rev">> := <<"2-c">>}, #{<<"rev">> := 
<<"2-b">>}],
+                <<"changes">> := [
+                    #{<<"rev">> := <<"2-c">>}, #{<<"rev">> := <<"2-b">>}, 
#{<<"rev">> := <<"2-d">>}
+                ],
                 <<"doc">> := #{
                     <<"_id">> := ?DOC1, <<"_rev">> := <<"2-c">>, 
<<"_conflicts">> := [<<"2-b">>]
                 }
@@ -702,7 +716,7 @@ t_conflicts_selector_all_docs_include_docs({_, DbUrl}) ->
     ).
 
 t_js_filter_include_docs({_, DbUrl}) ->
-    {DDocUrl, Rev} = create_ddocs_custom(DbUrl, ?DOC3),
+    {DDocUrl, Rev} = create_ddocs(DbUrl, ?DOC3, custom),
     Params = "?filter=filters/f&include_docs=true",
     {200, #{<<"results">> := Res1}} = req(get, DbUrl ++ "/_changes" ++ Params),
     ?assertMatch(
@@ -722,7 +736,7 @@ t_js_filter_include_docs({_, DbUrl}) ->
     delete_ddocs(DDocUrl, Rev).
 
 t_js_filter_conflicts_include_docs({_, DbUrl}) ->
-    {DDocUrl, Rev} = create_ddocs_custom(DbUrl, ?DOC3),
+    {DDocUrl, Rev} = create_ddocs(DbUrl, ?DOC3, custom),
     Params = "?filter=filters/f&conflicts=true&include_docs=true",
     {200, #{<<"results">> := Res1}} = req(get, DbUrl ++ "/_changes" ++ Params),
     ?assertMatch(
@@ -742,13 +756,15 @@ t_js_filter_conflicts_include_docs({_, DbUrl}) ->
     delete_ddocs(DDocUrl, Rev).
 
 t_js_filter_all_docs_conflicts_include_docs1({_, DbUrl}) ->
-    {DDocUrl, Rev} = create_ddocs_custom(DbUrl, ?DOC1),
+    {DDocUrl, Rev} = create_ddocs(DbUrl, ?DOC1, custom),
     Params = 
"?filter=filters/f&style=all_docs&conflicts=true&include_docs=true",
     {200, #{<<"results">> := Res1}} = req(get, DbUrl ++ "/_changes" ++ Params),
     ?assertMatch(
         [
             #{
-                <<"changes">> := [#{<<"rev">> := <<"2-c">>}, #{<<"rev">> := 
<<"2-b">>}],
+                <<"changes">> := [
+                    #{<<"rev">> := <<"2-c">>}, #{<<"rev">> := <<"2-b">>}, 
#{<<"rev">> := <<"2-d">>}
+                ],
                 <<"doc">> := #{
                     <<"_id">> := ?DOC1, <<"_rev">> := <<"2-c">>, 
<<"_conflicts">> := [<<"2-b">>]
                 }
@@ -761,7 +777,7 @@ t_js_filter_all_docs_conflicts_include_docs1({_, DbUrl}) ->
     delete_ddocs(DDocUrl, Rev).
 
 t_js_filter_all_docs_conflicts_include_docs2({_, DbUrl}) ->
-    {DDocUrl, Rev} = create_ddocs_custom(DbUrl, ?DOC3),
+    {DDocUrl, Rev} = create_ddocs(DbUrl, ?DOC3, custom),
     Params = 
"?filter=filters/f&style=all_docs&conflicts=true&include_docs=true",
     {200, #{<<"results">> := Res1}} = req(get, DbUrl ++ "/_changes" ++ Params),
     ?assertMatch(
@@ -781,7 +797,7 @@ t_js_filter_all_docs_conflicts_include_docs2({_, DbUrl}) ->
     delete_ddocs(DDocUrl, Rev).
 
 t_view_include_docs({_, DbUrl}) ->
-    {DDocUrl, Rev} = create_ddocs_view(DbUrl, ?DOC1),
+    {DDocUrl, Rev} = create_ddocs(DbUrl, ?DOC1, view),
     Params = "?filter=_view&view=views/v&include_docs=true",
     {200, #{<<"results">> := Res1}} = req(get, DbUrl ++ "/_changes" ++ Params),
     ?assertMatch(
@@ -798,7 +814,7 @@ t_view_include_docs({_, DbUrl}) ->
     delete_ddocs(DDocUrl, Rev).
 
 t_view_conflicts_include_docs({_, DbUrl}) ->
-    {DDocUrl, Rev} = create_ddocs_view(DbUrl, ?DOC1),
+    {DDocUrl, Rev} = create_ddocs(DbUrl, ?DOC1, view),
     Params = "?filter=_view&view=views/v&conflicts=true&include_docs=true",
     {200, #{<<"results">> := Res1}} = req(get, DbUrl ++ "/_changes" ++ Params),
     ?assertMatch(
@@ -817,13 +833,15 @@ t_view_conflicts_include_docs({_, DbUrl}) ->
     delete_ddocs(DDocUrl, Rev).
 
 t_view_all_docs_conflicts_include_docs({_, DbUrl}) ->
-    {DDocUrl, Rev} = create_ddocs_view(DbUrl, ?DOC1),
+    {DDocUrl, Rev} = create_ddocs(DbUrl, ?DOC1, view),
     Params = 
"?filter=_view&view=views/v&style=all_docs&conflicts=true&include_docs=true",
     {200, #{<<"results">> := Res1}} = req(get, DbUrl ++ "/_changes" ++ Params),
     ?assertMatch(
         [
             #{
-                <<"changes">> := [#{<<"rev">> := <<"2-c">>}, #{<<"rev">> := 
<<"2-b">>}],
+                <<"changes">> := [
+                    #{<<"rev">> := <<"2-c">>}, #{<<"rev">> := <<"2-b">>}, 
#{<<"rev">> := <<"2-d">>}
+                ],
                 <<"doc">> := #{
                     <<"_id">> := ?DOC1, <<"_rev">> := <<"2-c">>, 
<<"_conflicts">> := [<<"2-b">>]
                 }
@@ -910,24 +928,23 @@ create_docs(DbUrl, DocRevs) ->
         lists:map(fun doc_fun/1, DocRevs)
     ).
 
-create_ddocs_custom(DbUrl, DocId) ->
-    DDocId = "_design/filters",
-    FilterFun = <<"function(doc, req) {return (doc._id == '", DocId/binary, 
"')}">>,
-    DDoc = #{<<"filters">> => #{<<"f">> => FilterFun}},
+create_ddocs(DbUrl, DocId, Type) ->
+    case Type of
+        custom ->
+            DDocId = "_design/filters",
+            FilterFun = <<"function(doc, req) {return (doc._id == '", 
DocId/binary, "')}">>,
+            DDoc = #{<<"filters">> => #{<<"f">> => FilterFun}};
+        view ->
+            DDocId = "_design/views",
+            ViewFun = <<"function(doc) {if (doc._id == '", DocId/binary, "') 
{emit(1, 1);}}">>,
+            DDoc = #{<<"views">> => #{<<"v">> => #{<<"map">> => ViewFun}}}
+    end,
     DDocUrl = DbUrl ++ "/" ++ DDocId,
     {_, #{<<"rev">> := Rev, <<"ok">> := true}} = req(put, DDocUrl, DDoc),
-    {DDocUrl, binary_to_list(Rev)}.
-
-create_ddocs_view(DbUrl, DocId) ->
-    DDocId = "_design/views",
-    ViewFun = <<"function(doc) {if (doc._id == '", DocId/binary, "') {emit(1, 
1);}}">>,
-    DDoc = #{<<"views">> => #{<<"v">> => #{<<"map">> => ViewFun}}},
-    DDocUrl = DbUrl ++ "/" ++ DDocId,
-    {_, #{<<"rev">> := Rev, <<"ok">> := true}} = req(put, DDocUrl, DDoc),
-    {DDocUrl, binary_to_list(Rev)}.
+    {DDocUrl, Rev}.
 
 delete_ddocs(DDocUrl, Rev) ->
-    {200, #{}} = req(delete, DDocUrl ++ "?rev=" ++ Rev).
+    {200, #{}} = req(delete, DDocUrl ++ "?rev=" ++ binary_to_list(Rev)).
 
 changes(DbUrl) ->
     changes(DbUrl, "").

Reply via email to