Jelajahi Sumber

test: use unit test to test paginate

Stefan Strigler 3 tahun lalu
induk
melakukan
21b8ff6d14

+ 48 - 0
apps/emqx_management/src/emqx_mgmt_api.erl

@@ -33,6 +33,10 @@
     b2i/1
 ]).
 
+-ifdef(TEST).
+-export([paginate_test_format/1]).
+-endif.
+
 -export_type([
     match_spec_and_filter/0
 ]).
@@ -671,4 +675,48 @@ params2qs_test_() ->
         )
     ].
 
+paginate_test_format(Row) ->
+    Row.
+
+paginate_test_() ->
+    _ = ets:new(?MODULE, [named_table]),
+    Size = 1000,
+    MyLimit = 10,
+    ets:insert(?MODULE, [{I, foo} || I <- lists:seq(1, Size)]),
+    DefaultLimit = emqx_mgmt:max_row_limit(),
+    NoParamsResult = paginate(?MODULE, #{}, {?MODULE, paginate_test_format}),
+    PaginateResults = [
+        paginate(
+            ?MODULE, #{<<"page">> => I, <<"limit">> => MyLimit}, {?MODULE, paginate_test_format}
+        )
+     || I <- lists:seq(1, floor(Size / MyLimit))
+    ],
+    [
+        ?_assertMatch(
+            #{meta := #{count := Size, page := 1, limit := DefaultLimit}}, NoParamsResult
+        ),
+        ?_assertEqual(DefaultLimit, length(maps:get(data, NoParamsResult))),
+        ?_assertEqual(
+            #{data => [], meta => #{count => Size, limit => DefaultLimit, page => 100}},
+            paginate(?MODULE, #{<<"page">> => <<"100">>}, {?MODULE, paginate_test_format})
+        )
+    ] ++ assertPaginateResults(PaginateResults, Size, MyLimit).
+
+assertPaginateResults(Results, Size, Limit) ->
+    AllData = lists:flatten([Data || #{data := Data} <- Results]),
+    [
+        begin
+            Result = lists:nth(I, Results),
+            [
+                ?_assertMatch(#{meta := #{count := Size, limit := Limit, page := I}}, Result),
+                ?_assertEqual(Limit, length(maps:get(data, Result)))
+            ]
+        end
+     || I <- lists:seq(1, floor(Size / Limit))
+    ] ++
+        [
+            ?_assertEqual(floor(Size / Limit), length(Results)),
+            ?_assertEqual(Size, length(AllData)),
+            ?_assertEqual(Size, sets:size(sets:from_list(AllData)))
+        ].
 -endif.

+ 0 - 11
apps/emqx_management/test/emqx_mgmt_api_SUITE.erl

@@ -173,17 +173,6 @@ t_cluster_query(_Config) ->
     end,
     ok.
 
-t_paging(_) ->
-    emqx_mgmt_api_test_util:init_suite(),
-    try
-        Path0 = emqx_mgmt_api_test_util:api_path(["banned?page=1"]),
-        {ok, _} = emqx_mgmt_api_test_util:request_api(get, Path0),
-        Path1 = emqx_mgmt_api_test_util:api_path(["banned?page=10"]),
-        {ok, _} = emqx_mgmt_api_test_util:request_api(get, Path1)
-    after
-        emqx_mgmt_api_test_util:end_suite()
-    end.
-
 t_bad_rpc(_) ->
     emqx_mgmt_api_test_util:init_suite(),
     process_flag(trap_exit, true),