This is an automated email from the ASF dual-hosted git repository. jiahuili430 pushed a commit to branch test-changes in repository https://gitbox.apache.org/repos/asf/couchdb.git
commit 4b7798f7924549cc8051d6e970a846aff30bc9c1 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, "").
