mirror of
https://github.com/fluxerapp/fluxer
synced 2026-10-17 13:05:32 +09:00
151 lines
5.1 KiB
Erlang
151 lines
5.1 KiB
Erlang
%% SPDX-License-Identifier: AGPL-3.0-or-later
|
|
|
|
-module(list_ops_bulk_tests).
|
|
-typing([eqwalizer]).
|
|
-include_lib("eunit/include/eunit.hrl").
|
|
|
|
make_item_with_id(Id) ->
|
|
#{<<"id">> => Id, <<"data">> => <<"test">>}.
|
|
|
|
default_items() ->
|
|
[
|
|
make_item_with_id(<<"1">>),
|
|
make_item_with_id(<<"2">>)
|
|
].
|
|
|
|
bulk_update_multiple_updates_test() ->
|
|
Items = [
|
|
make_item_with_id(<<"1">>),
|
|
make_item_with_id(<<"2">>),
|
|
make_item_with_id(<<"3">>),
|
|
make_item_with_id(<<"4">>)
|
|
],
|
|
Updates = [
|
|
#{<<"id">> => <<"2">>, <<"data">> => <<"updated_2">>},
|
|
#{<<"id">> => <<"4">>, <<"data">> => <<"updated_4">>}
|
|
],
|
|
Result = list_ops:bulk_update(Items, Updates),
|
|
|
|
?assertEqual(4, length(Result)),
|
|
?assertEqual(make_item_with_id(<<"1">>), lists:nth(1, Result)),
|
|
?assertEqual(#{<<"id">> => <<"2">>, <<"data">> => <<"updated_2">>}, lists:nth(2, Result)),
|
|
?assertEqual(make_item_with_id(<<"3">>), lists:nth(3, Result)),
|
|
?assertEqual(#{<<"id">> => <<"4">>, <<"data">> => <<"updated_4">>}, lists:nth(4, Result)).
|
|
|
|
bulk_update_partial_updates_test() ->
|
|
Items = [
|
|
make_item_with_id(<<"1">>),
|
|
make_item_with_id(<<"2">>),
|
|
make_item_with_id(<<"3">>)
|
|
],
|
|
Updates = [
|
|
#{<<"id">> => <<"2">>, <<"data">> => <<"updated">>}
|
|
],
|
|
Result = list_ops:bulk_update(Items, Updates),
|
|
|
|
?assertEqual(3, length(Result)),
|
|
?assertEqual(make_item_with_id(<<"1">>), lists:nth(1, Result)),
|
|
?assertEqual(#{<<"id">> => <<"2">>, <<"data">> => <<"updated">>}, lists:nth(2, Result)),
|
|
?assertEqual(make_item_with_id(<<"3">>), lists:nth(3, Result)).
|
|
|
|
bulk_update_no_matches_test() ->
|
|
Items = default_items(),
|
|
Updates = [
|
|
#{<<"id">> => <<"99">>, <<"data">> => <<"new">>},
|
|
#{<<"id">> => <<"98">>, <<"data">> => <<"new2">>}
|
|
],
|
|
Result = list_ops:bulk_update(Items, Updates),
|
|
|
|
?assertEqual(Items, Result).
|
|
|
|
bulk_update_empty_lists_test() ->
|
|
?assertEqual([], list_ops:bulk_update([], [])),
|
|
?assertEqual([], list_ops:bulk_update([], [make_item_with_id(<<"1">>)])),
|
|
|
|
Items = [make_item_with_id(<<"1">>)],
|
|
?assertEqual(Items, list_ops:bulk_update(Items, [])).
|
|
|
|
bulk_update_updates_without_id_test() ->
|
|
Items = default_items(),
|
|
Updates = [
|
|
#{<<"name">> => <<"no_id">>},
|
|
#{<<"id">> => <<"2">>, <<"data">> => <<"updated">>}
|
|
],
|
|
Result = list_ops:bulk_update(Items, Updates),
|
|
|
|
?assertEqual(2, length(Result)),
|
|
?assertEqual(make_item_with_id(<<"1">>), lists:nth(1, Result)),
|
|
?assertEqual(#{<<"id">> => <<"2">>, <<"data">> => <<"updated">>}, lists:nth(2, Result)).
|
|
|
|
bulk_update_mixed_items_list_test() ->
|
|
Items = [
|
|
make_item_with_id(<<"1">>),
|
|
<<"non_map_item">>,
|
|
make_item_with_id(<<"2">>),
|
|
{tuple, item}
|
|
],
|
|
Updates = [
|
|
#{<<"id">> => <<"2">>, <<"data">> => <<"updated">>}
|
|
],
|
|
Result = list_ops:bulk_update(Items, Updates),
|
|
|
|
?assertEqual(4, length(Result)),
|
|
?assertEqual(make_item_with_id(<<"1">>), lists:nth(1, Result)),
|
|
?assertEqual(<<"non_map_item">>, lists:nth(2, Result)),
|
|
?assertEqual(#{<<"id">> => <<"2">>, <<"data">> => <<"updated">>}, lists:nth(3, Result)),
|
|
?assertEqual({tuple, item}, lists:nth(4, Result)).
|
|
|
|
bulk_update_mixed_updates_list_test() ->
|
|
Items = default_items(),
|
|
Updates = [
|
|
<<"non_map">>,
|
|
#{<<"id">> => <<"1">>, <<"data">> => <<"updated">>},
|
|
{tuple},
|
|
#{<<"no_id">> => <<"field">>}
|
|
],
|
|
Result = list_ops:bulk_update(Items, Updates),
|
|
|
|
?assertEqual(2, length(Result)),
|
|
?assertEqual(#{<<"id">> => <<"1">>, <<"data">> => <<"updated">>}, lists:nth(1, Result)),
|
|
?assertEqual(make_item_with_id(<<"2">>), lists:nth(2, Result)).
|
|
|
|
bulk_update_duplicate_ids_in_updates_test() ->
|
|
Items = default_items(),
|
|
Updates = [
|
|
#{<<"id">> => <<"1">>, <<"data">> => <<"first_update">>},
|
|
#{<<"id">> => <<"1">>, <<"data">> => <<"second_update">>}
|
|
],
|
|
Result = list_ops:bulk_update(Items, Updates),
|
|
|
|
?assertEqual(2, length(Result)),
|
|
?assertEqual(
|
|
#{<<"id">> => <<"1">>, <<"data">> => <<"second_update">>}, lists:nth(1, Result)
|
|
),
|
|
?assertEqual(make_item_with_id(<<"2">>), lists:nth(2, Result)).
|
|
|
|
bulk_update_invalid_input_test() ->
|
|
Items = [make_item_with_id(<<"1">>)],
|
|
|
|
?assertEqual(Items, list_ops:bulk_update(Items, not_a_list)),
|
|
?assertEqual(Items, list_ops:bulk_update(Items, undefined)),
|
|
?assertEqual(Items, list_ops:bulk_update(Items, #{})),
|
|
|
|
?assertEqual([], list_ops:bulk_update(not_a_list, [make_item_with_id(<<"1">>)])),
|
|
?assertEqual([], list_ops:bulk_update(undefined, [])).
|
|
|
|
bulk_update_item_without_id_preserved_test() ->
|
|
Items = [
|
|
make_item_with_id(<<"1">>),
|
|
#{<<"name">> => <<"no_id_item">>},
|
|
make_item_with_id(<<"2">>)
|
|
],
|
|
Updates = [
|
|
#{<<"id">> => <<"1">>, <<"data">> => <<"updated">>}
|
|
],
|
|
Result = list_ops:bulk_update(Items, Updates),
|
|
|
|
?assertEqual(3, length(Result)),
|
|
?assertEqual(#{<<"id">> => <<"1">>, <<"data">> => <<"updated">>}, lists:nth(1, Result)),
|
|
?assertEqual(#{<<"name">> => <<"no_id_item">>}, lists:nth(2, Result)),
|
|
?assertEqual(make_item_with_id(<<"2">>), lists:nth(3, Result)).
|