mirror of
https://github.com/fluxerapp/fluxer
synced 2026-10-07 19:22:14 +09:00
217 lines
7.4 KiB
Erlang
217 lines
7.4 KiB
Erlang
%% SPDX-License-Identifier: AGPL-3.0-or-later
|
|
|
|
-module(guild_members_tests).
|
|
-typing([eqwalizer]).
|
|
-ifdef(TEST).
|
|
-include_lib("eunit/include/eunit.hrl").
|
|
|
|
get_users_to_mention_by_roles_basic_test() ->
|
|
State = test_state(),
|
|
Request = #{channel_id => 500, role_ids => [200], author_id => 1},
|
|
{reply, #{user_ids := UserIds}, _} = guild_members:get_users_to_mention_by_roles(
|
|
Request, State
|
|
),
|
|
?assertEqual([2], UserIds).
|
|
|
|
get_members_with_role_test() ->
|
|
State = test_state(),
|
|
{reply, #{user_ids := UserIds}, _} = guild_members:get_members_with_role(
|
|
#{role_id => 200}, State
|
|
),
|
|
?assertEqual([2], UserIds).
|
|
|
|
get_members_with_role_rejects_malformed_role_id_test() ->
|
|
State = test_state(),
|
|
{reply, #{user_ids := UserIds}, _} = guild_members:get_members_with_role(
|
|
#{role_id => <<"0200">>}, State
|
|
),
|
|
?assertEqual([], UserIds).
|
|
|
|
resolve_all_mentions_test() ->
|
|
State = test_state(),
|
|
Request = #{
|
|
channel_id => 500,
|
|
author_id => 1,
|
|
mention_everyone => false,
|
|
mention_here => false,
|
|
role_ids => [200],
|
|
user_ids => [3]
|
|
},
|
|
{reply, #{user_ids := UserIds}, _} = guild_members:resolve_all_mentions(Request, State),
|
|
?assertEqual([2, 3], UserIds).
|
|
|
|
resolve_channel_mentions_skips_invalid_channel_ids_test() ->
|
|
State = channel_mentions_state([]),
|
|
{reply, #{channels := Channels}, _} = guild_members:resolve_channel_mentions(
|
|
#{channel_ids => [<<"001">>, <<"500">>]},
|
|
State
|
|
),
|
|
?assertEqual([#{id => 500, name => <<"general">>, type => 0}], Channels).
|
|
|
|
resolve_channel_mentions_ignores_user_zero_overwrite_test() ->
|
|
ViewPerm = constants:view_channel_permission(),
|
|
Overwrites = [
|
|
#{
|
|
<<"id">> => <<"0">>,
|
|
<<"type">> => 1,
|
|
<<"allow">> => <<"0">>,
|
|
<<"deny">> => integer_to_binary(ViewPerm)
|
|
}
|
|
],
|
|
State = channel_mentions_state(Overwrites),
|
|
{reply, #{channels := Channels}, _} = guild_members:resolve_channel_mentions(
|
|
#{channel_ids => [<<"500">>]},
|
|
State
|
|
),
|
|
?assertEqual([#{id => 500, name => <<"general">>, type => 0}], Channels).
|
|
|
|
get_assignable_roles_owner_test() ->
|
|
State = test_state(),
|
|
{reply, #{role_ids := RoleIds}, _} = guild_members:get_assignable_roles(
|
|
#{user_id => 1}, State
|
|
),
|
|
?assertEqual(lists:sort([100, 200, 201]), lists:sort(RoleIds)).
|
|
|
|
get_viewable_channels_skips_malformed_channel_id_test() ->
|
|
State0 = test_state(),
|
|
Data0 = maps:get(data, State0),
|
|
Channels = maps:get(<<"channels">>, Data0),
|
|
BadChannel = #{<<"id">> => <<"0502">>, <<"type">> => 0, <<"permission_overwrites">> => []},
|
|
State = State0#{data => Data0#{<<"channels">> => [BadChannel | Channels]}},
|
|
{reply, #{channel_ids := ChannelIds}, _} = guild_members:get_viewable_channels(
|
|
#{user_id => 1}, State
|
|
),
|
|
?assert(lists:member(500, ChannelIds)),
|
|
?assertNot(lists:member(502, ChannelIds)).
|
|
|
|
check_target_member_test() ->
|
|
State = test_state(),
|
|
{reply, #{can_manage := true}, _} = guild_members:check_target_member(
|
|
#{user_id => 1, target_user_id => 2}, State
|
|
),
|
|
{reply, #{can_manage := false}, _} = guild_members:check_target_member(
|
|
#{user_id => 2, target_user_id => 1}, State
|
|
).
|
|
|
|
normalize_int_list_test() ->
|
|
?assertEqual(
|
|
[1, 2, 3], guild_members_common:normalize_int_list([<<"1">>, <<"2">>, <<"3">>])
|
|
),
|
|
?assertEqual([], guild_members_common:normalize_int_list([])).
|
|
|
|
normalize_int_list_rejects_malformed_snowflakes_test() ->
|
|
?assertEqual([3], guild_members_common:normalize_int_list([<<"001">>, <<"+2">>, <<"3">>])).
|
|
|
|
member_common_helpers_test() ->
|
|
?assertEqual(undefined, guild_members_common:member_user_id(#{})),
|
|
?assertEqual(
|
|
42, guild_members_common:member_user_id(#{<<"user">> => #{<<"id">> => <<"42">>}})
|
|
),
|
|
?assertEqual(
|
|
undefined,
|
|
guild_members_common:member_user_id(#{<<"user">> => #{<<"id">> => <<"042">>}})
|
|
),
|
|
?assertEqual(false, guild_members_common:is_member_bot(#{})),
|
|
?assertEqual(
|
|
true, guild_members_common:is_member_bot(#{<<"user">> => #{<<"bot">> => true}})
|
|
).
|
|
|
|
role_ids_from_roles_rejects_malformed_role_id_test() ->
|
|
Roles = [#{<<"id">> => <<"007">>}, #{<<"id">> => <<"8">>}],
|
|
?assertEqual([8], guild_members_common:role_ids_from_roles(Roles)).
|
|
|
|
test_state() ->
|
|
GuildId = 100,
|
|
OwnerId = 1,
|
|
MemberId = 2,
|
|
OtherId = 3,
|
|
ChannelId = 500,
|
|
RoleMod = 200,
|
|
RoleHigh = 201,
|
|
ViewPerm = constants:view_channel_permission(),
|
|
ManageRoles = constants:manage_roles_permission(),
|
|
#{
|
|
id => GuildId,
|
|
data => #{
|
|
<<"guild">> => #{<<"owner_id">> => integer_to_binary(OwnerId)},
|
|
<<"roles">> => [
|
|
#{
|
|
<<"id">> => integer_to_binary(GuildId),
|
|
<<"permissions">> => integer_to_binary(ViewPerm bor ManageRoles),
|
|
<<"position">> => 0
|
|
},
|
|
#{
|
|
<<"id">> => integer_to_binary(RoleMod),
|
|
<<"permissions">> => integer_to_binary(ViewPerm),
|
|
<<"position">> => 10
|
|
},
|
|
#{
|
|
<<"id">> => integer_to_binary(RoleHigh),
|
|
<<"permissions">> => integer_to_binary(ViewPerm),
|
|
<<"position">> => 20
|
|
}
|
|
],
|
|
<<"channels">> => [
|
|
#{
|
|
<<"id">> => integer_to_binary(ChannelId),
|
|
<<"type">> => 0,
|
|
<<"permission_overwrites">> => []
|
|
},
|
|
#{
|
|
<<"id">> => integer_to_binary(ChannelId + 1),
|
|
<<"type">> => 2,
|
|
<<"permission_overwrites">> => []
|
|
}
|
|
],
|
|
<<"members">> => [
|
|
#{
|
|
<<"user">> => #{<<"id">> => integer_to_binary(OwnerId)},
|
|
<<"roles">> => [integer_to_binary(GuildId)]
|
|
},
|
|
#{
|
|
<<"user">> => #{<<"id">> => integer_to_binary(MemberId)},
|
|
<<"roles">> => [integer_to_binary(RoleMod)],
|
|
<<"joined_at">> => <<"2024-01-01T00:00:00Z">>
|
|
},
|
|
#{
|
|
<<"user">> => #{<<"id">> => integer_to_binary(OtherId)},
|
|
<<"roles">> => [integer_to_binary(RoleHigh)],
|
|
<<"joined_at">> => <<"2024-01-02T00:00:00Z">>
|
|
}
|
|
]
|
|
}
|
|
}.
|
|
|
|
channel_mentions_state(Overwrites) ->
|
|
GuildId = 100,
|
|
ViewPerm = constants:view_channel_permission(),
|
|
#{
|
|
id => GuildId,
|
|
data => #{
|
|
<<"guild">> => #{<<"owner_id">> => <<"1">>},
|
|
<<"roles">> => [
|
|
#{
|
|
<<"id">> => integer_to_binary(GuildId),
|
|
<<"permissions">> => integer_to_binary(ViewPerm)
|
|
}
|
|
],
|
|
<<"channels">> => [
|
|
#{
|
|
<<"id">> => <<"500">>,
|
|
<<"name">> => <<"general">>,
|
|
<<"type">> => 0,
|
|
<<"permission_overwrites">> => Overwrites
|
|
},
|
|
#{
|
|
<<"id">> => <<"001">>,
|
|
<<"name">> => <<"bad">>,
|
|
<<"type">> => 0,
|
|
<<"permission_overwrites">> => []
|
|
}
|
|
],
|
|
<<"members">> => []
|
|
}
|
|
}.
|
|
|
|
-endif.
|