mirror of
https://github.com/fluxerapp/fluxer
synced 2026-10-07 19:22:14 +09:00
224 lines
8.3 KiB
Erlang
224 lines
8.3 KiB
Erlang
%% SPDX-License-Identifier: AGPL-3.0-or-later
|
|
|
|
-module(guild_state_roles_tests).
|
|
-typing([eqwalizer]).
|
|
|
|
-include_lib("eunit/include/eunit.hrl").
|
|
|
|
handle_role_delete_strips_from_members_test() ->
|
|
RoleIdToDelete = <<"200">>,
|
|
Data = guild_data_index:normalize_map(#{
|
|
<<"roles">> => [
|
|
#{<<"id">> => <<"100">>, <<"name">> => <<"Admin">>},
|
|
#{<<"id">> => <<"200">>, <<"name">> => <<"Moderator">>}
|
|
],
|
|
<<"members">> => #{
|
|
1 => #{<<"user">> => #{<<"id">> => <<"1">>}, <<"roles">> => [<<"100">>, <<"200">>]},
|
|
2 => #{<<"user">> => #{<<"id">> => <<"2">>}, <<"roles">> => [<<"200">>]},
|
|
3 => #{<<"user">> => #{<<"id">> => <<"3">>}, <<"roles">> => [<<"100">>]}
|
|
},
|
|
<<"channels">> => []
|
|
}),
|
|
EventData = #{<<"role_id">> => RoleIdToDelete},
|
|
Result = guild_state_roles:handle_role_delete(EventData, Data),
|
|
Members = maps:get(<<"members">>, Result),
|
|
M1 = maps:get(1, Members),
|
|
M2 = maps:get(2, Members),
|
|
M3 = maps:get(3, Members),
|
|
?assertEqual([100], maps:get(<<"roles">>, M1)),
|
|
?assertEqual([], maps:get(<<"roles">>, M2)),
|
|
?assertEqual([100], maps:get(<<"roles">>, M3)).
|
|
|
|
handle_role_delete_strips_from_channel_overwrites_test() ->
|
|
RoleIdToDelete = <<"200">>,
|
|
Data = #{
|
|
<<"roles">> => [
|
|
#{<<"id">> => <<"100">>, <<"name">> => <<"Everyone">>},
|
|
#{<<"id">> => <<"200">>, <<"name">> => <<"Moderator">>}
|
|
],
|
|
<<"members">> => [],
|
|
<<"channels">> => [
|
|
#{
|
|
<<"id">> => <<"500">>,
|
|
<<"permission_overwrites">> => [
|
|
#{
|
|
<<"id">> => <<"100">>,
|
|
<<"type">> => 0,
|
|
<<"allow">> => <<"0">>,
|
|
<<"deny">> => <<"1024">>
|
|
},
|
|
#{
|
|
<<"id">> => <<"200">>,
|
|
<<"type">> => 0,
|
|
<<"allow">> => <<"1024">>,
|
|
<<"deny">> => <<"0">>
|
|
},
|
|
#{
|
|
<<"id">> => <<"1">>,
|
|
<<"type">> => 1,
|
|
<<"allow">> => <<"2048">>,
|
|
<<"deny">> => <<"0">>
|
|
}
|
|
]
|
|
}
|
|
]
|
|
},
|
|
EventData = #{<<"role_id">> => RoleIdToDelete},
|
|
Result = guild_state_roles:handle_role_delete(EventData, Data),
|
|
Channels = maps:get(<<"channels">>, Result),
|
|
[Ch1] = Channels,
|
|
Ch1Overwrites = maps:get(<<"permission_overwrites">>, Ch1),
|
|
?assertEqual(2, length(Ch1Overwrites)).
|
|
|
|
handle_role_create_test() ->
|
|
Data = #{
|
|
<<"roles">> => [#{<<"id">> => <<"1">>, <<"name">> => <<"Everyone">>}],
|
|
<<"members">> => [],
|
|
<<"channels">> => []
|
|
},
|
|
EventData = #{<<"role">> => #{<<"id">> => <<"2">>, <<"name">> => <<"New">>}},
|
|
Result = guild_state_roles:handle_role_create(EventData, Data),
|
|
Roles = guild_data_index:role_list(Result),
|
|
?assertEqual(2, length(Roles)),
|
|
RoleIndex = guild_data_index:role_index(Result),
|
|
?assertMatch(#{2 := _}, RoleIndex).
|
|
|
|
handle_role_update_replaces_role_test() ->
|
|
Data = #{
|
|
<<"roles">> => [
|
|
#{<<"id">> => <<"1">>, <<"name">> => <<"Old">>},
|
|
#{<<"id">> => <<"2">>, <<"name">> => <<"Keep">>}
|
|
],
|
|
<<"members">> => [],
|
|
<<"channels">> => []
|
|
},
|
|
EventData = #{<<"role">> => #{<<"id">> => <<"1">>, <<"name">> => <<"Updated">>}},
|
|
Result = guild_state_roles:handle_role_update(EventData, Data),
|
|
Roles = guild_data_index:role_list(Result),
|
|
[R1, R2] = Roles,
|
|
?assertEqual(<<"Updated">>, maps:get(<<"name">>, R1)),
|
|
?assertEqual(<<"Keep">>, maps:get(<<"name">>, R2)).
|
|
|
|
handle_role_update_bulk_test() ->
|
|
Data = #{
|
|
<<"roles">> => [
|
|
#{<<"id">> => <<"1">>, <<"name">> => <<"A">>},
|
|
#{<<"id">> => <<"2">>, <<"name">> => <<"B">>},
|
|
#{<<"id">> => <<"3">>, <<"name">> => <<"C">>}
|
|
],
|
|
<<"members">> => [],
|
|
<<"channels">> => []
|
|
},
|
|
EventData = #{
|
|
<<"roles">> => [
|
|
#{<<"id">> => <<"1">>, <<"name">> => <<"A2">>},
|
|
#{<<"id">> => <<"3">>, <<"name">> => <<"C2">>}
|
|
]
|
|
},
|
|
Result = guild_state_roles:handle_role_update_bulk(EventData, Data),
|
|
Roles = guild_data_index:role_list(Result),
|
|
[R1, R2, R3] = Roles,
|
|
?assertEqual(<<"A2">>, maps:get(<<"name">>, R1)),
|
|
?assertEqual(<<"B">>, maps:get(<<"name">>, R2)),
|
|
?assertEqual(<<"C2">>, maps:get(<<"name">>, R3)).
|
|
|
|
handle_role_delete_removes_role_from_list_test() ->
|
|
Data = #{
|
|
<<"roles">> => [
|
|
#{<<"id">> => <<"1">>, <<"name">> => <<"Keep">>},
|
|
#{<<"id">> => <<"2">>, <<"name">> => <<"Delete">>}
|
|
],
|
|
<<"members">> => [],
|
|
<<"channels">> => []
|
|
},
|
|
EventData = #{<<"role_id">> => <<"2">>},
|
|
Result = guild_state_roles:handle_role_delete(EventData, Data),
|
|
Roles = guild_data_index:role_list(Result),
|
|
?assertEqual(1, length(Roles)),
|
|
?assertEqual(<<"Keep">>, maps:get(<<"name">>, hd(Roles))).
|
|
|
|
strip_role_from_members_no_affected_users_test() ->
|
|
Data = guild_data_index:normalize_map(#{
|
|
<<"roles">> => [],
|
|
<<"members">> => #{
|
|
1 => #{<<"user">> => #{<<"id">> => <<"1">>}, <<"roles">> => [<<"100">>]}
|
|
},
|
|
<<"channels">> => []
|
|
}),
|
|
Result = guild_state_roles_delete:strip_role_from_members(999, Data),
|
|
#{<<"roles">> := Roles} = guild_data_index:get_member(1, Result),
|
|
?assertEqual([100], Roles).
|
|
|
|
strip_role_from_channel_overwrites_preserves_user_overwrites_test() ->
|
|
Data = #{
|
|
<<"channels">> => [
|
|
#{
|
|
<<"id">> => <<"500">>,
|
|
<<"permission_overwrites">> => [
|
|
#{
|
|
<<"id">> => <<"100">>,
|
|
<<"type">> => 0,
|
|
<<"allow">> => <<"0">>,
|
|
<<"deny">> => <<"0">>
|
|
},
|
|
#{
|
|
<<"id">> => <<"1">>,
|
|
<<"type">> => 1,
|
|
<<"allow">> => <<"1024">>,
|
|
<<"deny">> => <<"0">>
|
|
}
|
|
]
|
|
}
|
|
]
|
|
},
|
|
Result = guild_state_roles_delete:strip_role_from_channel_overwrites(100, Data),
|
|
[Ch] = guild_data_index:channel_list(Result),
|
|
Overwrites = maps:get(<<"permission_overwrites">>, Ch),
|
|
?assertEqual(1, length(Overwrites)),
|
|
?assertEqual(1, maps:get(<<"type">>, hd(Overwrites))).
|
|
|
|
extract_role_ids_from_role_update_test() ->
|
|
EventData = #{<<"role">> => #{<<"id">> => <<"42">>}},
|
|
?assertEqual([42], guild_state_roles:extract_role_ids_from_role_update(EventData)).
|
|
|
|
extract_role_ids_from_role_update_missing_id_test() ->
|
|
EventData = #{<<"role">> => #{}},
|
|
?assertEqual([], guild_state_roles:extract_role_ids_from_role_update(EventData)).
|
|
|
|
extract_role_ids_from_role_update_missing_role_test() ->
|
|
?assertEqual([], guild_state_roles:extract_role_ids_from_role_update(#{})).
|
|
|
|
extract_role_ids_from_role_update_invalid_id_test() ->
|
|
?assertEqual(
|
|
[],
|
|
guild_state_roles:extract_role_ids_from_role_update(
|
|
#{<<"role">> => #{<<"id">> => <<"001">>}}
|
|
)
|
|
),
|
|
?assertEqual(
|
|
[],
|
|
guild_state_roles:extract_role_ids_from_role_update(
|
|
#{<<"role">> => #{<<"id">> => <<"0">>}}
|
|
)
|
|
).
|
|
|
|
extract_role_ids_from_role_update_bulk_test() ->
|
|
EventData = #{<<"roles">> => [#{<<"id">> => <<"1">>}, #{<<"id">> => <<"2">>}]},
|
|
?assertEqual([1, 2], guild_state_roles:extract_role_ids_from_role_update_bulk(EventData)).
|
|
|
|
extract_role_ids_from_role_update_bulk_empty_test() ->
|
|
?assertEqual([], guild_state_roles:extract_role_ids_from_role_update_bulk(#{})).
|
|
|
|
extract_role_ids_from_role_delete_test() ->
|
|
EventData = #{<<"role_id">> => <<"55">>},
|
|
?assertEqual([55], guild_state_roles:extract_role_ids_from_role_delete(EventData)).
|
|
|
|
extract_role_ids_from_role_delete_missing_test() ->
|
|
?assertEqual([], guild_state_roles:extract_role_ids_from_role_delete(#{})).
|
|
|
|
handle_role_delete_invalid_id_noop_test() ->
|
|
Data = #{<<"roles">> => [#{<<"id">> => <<"1">>, <<"name">> => <<"Keep">>}]},
|
|
?assertEqual(
|
|
Data, guild_state_roles:handle_role_delete(#{<<"role_id">> => <<"001">>}, Data)
|
|
).
|