Files
fluxer/fluxer_gateway/test/guild_visibility_channels_tests.erl
T

250 lines
9.0 KiB
Erlang

%% SPDX-License-Identifier: AGPL-3.0-or-later
-module(guild_visibility_channels_tests).
-typing([eqwalizer]).
-include_lib("eunit/include/eunit.hrl").
filter_connected_session_entries_excludes_pending_test() ->
Normal = #{session_id => <<"s1">>, user_id => 1, pending_connect => false},
Pending = #{session_id => <<"s2">>, user_id => 2, pending_connect => true},
NoPending = #{session_id => <<"s3">>, user_id => 3},
Sessions = #{<<"s1">> => Normal, <<"s2">> => Pending, <<"s3">> => NoPending},
Result = guild_visibility_channels:filter_connected_session_entries(Sessions),
ResultIds = lists:sort([Sid || {Sid, _} <- Result]),
?assertEqual([<<"s1">>, <<"s3">>], ResultIds).
update_viewable_map_for_channel_add_test() ->
Map = #{100 => true},
Result = guild_visibility_channels:update_viewable_map_for_channel(Map, 200, true),
?assertEqual(true, maps:is_key(200, Result)),
?assertEqual(true, maps:is_key(100, Result)).
update_viewable_map_for_channel_remove_test() ->
Map = #{100 => true, 200 => true},
Result = guild_visibility_channels:update_viewable_map_for_channel(Map, 100, false),
?assertEqual(false, maps:is_key(100, Result)),
?assertEqual(true, maps:is_key(200, Result)).
viewable_channel_map_test() ->
Set = sets:from_list([10, 20, 30]),
Map = guild_visibility_channels:viewable_channel_map(Set),
?assertEqual(3, map_size(Map)),
?assertEqual(true, maps:get(10, Map)),
?assertEqual(true, maps:get(20, Map)),
?assertEqual(true, maps:get(30, Map)).
viewable_channel_map_empty_test() ->
Map = guild_visibility_channels:viewable_channel_map(sets:new()),
?assertEqual(#{}, Map).
viewable_channel_set_uses_cached_session_data_test() ->
UserId = 10,
State = #{
sessions => #{
<<"s1">> => #{
user_id => UserId,
viewable_channels => #{100 => true, 200 => true}
}
},
data => #{
<<"guild">> => #{<<"owner_id">> => <<"999">>},
<<"members">> => [],
<<"channels">> => [],
<<"roles">> => []
}
},
ChannelSet = guild_visibility_channels:viewable_channel_set(UserId, State),
?assertEqual(true, sets:is_element(100, ChannelSet)),
?assertEqual(true, sets:is_element(200, ChannelSet)),
?assertEqual(false, sets:is_element(999, ChannelSet)).
administrator_sees_all_channels_test() ->
GuildId = 50,
UserId = 10,
ChannelId = 100,
Admin = constants:administrator_permission(),
State = #{
id => GuildId,
data => #{
<<"guild">> => #{<<"owner_id">> => <<"999">>},
<<"roles">> => [
#{
<<"id">> => integer_to_binary(GuildId),
<<"permissions">> => integer_to_binary(Admin)
}
],
<<"members">> => [
#{<<"user">> => #{<<"id">> => integer_to_binary(UserId)}, <<"roles">> => []}
],
<<"channels">> => [
#{
<<"id">> => integer_to_binary(ChannelId),
<<"permission_overwrites">> => [
#{
<<"id">> => integer_to_binary(GuildId),
<<"type">> => 0,
<<"allow">> => <<"0">>,
<<"deny">> => integer_to_binary(constants:view_channel_permission())
}
]
}
]
}
},
Channels = guild_visibility_channels:get_user_viewable_channels(UserId, State),
?assertEqual([ChannelId], Channels).
owner_sees_all_channels_test() ->
GuildId = 60,
OwnerId = 10,
ChannelId = 200,
State = #{
id => GuildId,
data => #{
<<"guild">> => #{<<"owner_id">> => integer_to_binary(OwnerId)},
<<"roles">> => [
#{<<"id">> => integer_to_binary(GuildId), <<"permissions">> => <<"0">>}
],
<<"members">> => [
#{<<"user">> => #{<<"id">> => integer_to_binary(OwnerId)}, <<"roles">> => []}
],
<<"channels">> => [
#{<<"id">> => integer_to_binary(ChannelId), <<"permission_overwrites">> => []}
]
}
},
Channels = guild_visibility_channels:get_user_viewable_channels(OwnerId, State),
?assertEqual([ChannelId], Channels).
everyone_role_grants_view_test() ->
GuildId = 70,
UserId = 10,
ChannelId = 300,
ViewPerm = constants:view_channel_permission(),
State = #{
id => GuildId,
data => #{
<<"guild">> => #{<<"owner_id">> => <<"999">>},
<<"roles">> => [
#{
<<"id">> => integer_to_binary(GuildId),
<<"permissions">> => integer_to_binary(ViewPerm)
}
],
<<"members">> => [
#{<<"user">> => #{<<"id">> => integer_to_binary(UserId)}, <<"roles">> => []}
],
<<"channels">> => [
#{<<"id">> => integer_to_binary(ChannelId), <<"permission_overwrites">> => []}
]
}
},
Channels = guild_visibility_channels:get_user_viewable_channels(UserId, State),
?assertEqual([ChannelId], Channels).
multiple_channels_partial_visibility_test() ->
GuildId = 110,
UserId = 10,
ViewPerm = constants:view_channel_permission(),
State = #{
id => GuildId,
data => #{
<<"guild">> => #{<<"owner_id">> => <<"999">>},
<<"roles">> => [
#{
<<"id">> => integer_to_binary(GuildId),
<<"permissions">> => integer_to_binary(ViewPerm)
},
#{<<"id">> => <<"300">>, <<"permissions">> => <<"0">>}
],
<<"members">> => [
#{<<"user">> => #{<<"id">> => integer_to_binary(UserId)}, <<"roles">> => []}
],
<<"channels">> => [
#{<<"id">> => <<"100">>, <<"permission_overwrites">> => []},
#{
<<"id">> => <<"101">>,
<<"permission_overwrites">> => [
#{
<<"id">> => integer_to_binary(GuildId),
<<"type">> => 0,
<<"allow">> => <<"0">>,
<<"deny">> => integer_to_binary(ViewPerm)
}
]
},
#{<<"id">> => <<"102">>, <<"permission_overwrites">> => []}
]
}
},
Channels = lists:sort(guild_visibility_channels:get_user_viewable_channels(UserId, State)),
?assertEqual([100, 102], Channels).
invalid_channel_ids_are_skipped_test() ->
GuildId = 120,
UserId = 10,
ViewPerm = constants:view_channel_permission(),
State = #{
id => GuildId,
data => #{
<<"guild">> => #{<<"owner_id">> => <<"999">>},
<<"roles">> => [
#{
<<"id">> => integer_to_binary(GuildId),
<<"permissions">> => integer_to_binary(ViewPerm)
}
],
<<"members">> => [
#{<<"user">> => #{<<"id">> => integer_to_binary(UserId)}, <<"roles">> => []}
],
<<"channels">> => [
#{<<"id">> => <<"001">>, <<"permission_overwrites">> => []},
#{<<"id">> => <<"400">>, <<"permission_overwrites">> => []}
]
}
},
Channels = guild_visibility_channels:get_user_viewable_channels(UserId, State),
?assertEqual([400], Channels).
invalid_parent_id_does_not_include_category_test() ->
GuildId = 130,
UserId = 10,
ViewPerm = constants:view_channel_permission(),
State = #{
id => GuildId,
data => #{
<<"guild">> => #{<<"owner_id">> => <<"999">>},
<<"roles">> => [
#{
<<"id">> => integer_to_binary(GuildId),
<<"permissions">> => integer_to_binary(ViewPerm)
}
],
<<"members">> => [
#{<<"user">> => #{<<"id">> => integer_to_binary(UserId)}, <<"roles">> => []}
],
<<"channels">> => [
#{
<<"id">> => <<"2">>,
<<"type">> => 4,
<<"permission_overwrites">> => [
#{
<<"id">> => integer_to_binary(GuildId),
<<"type">> => 0,
<<"allow">> => <<"0">>,
<<"deny">> => integer_to_binary(ViewPerm)
}
]
},
#{
<<"id">> => <<"401">>,
<<"parent_id">> => <<"002">>,
<<"permission_overwrites">> => []
}
]
}
},
Channels = guild_visibility_channels:get_user_viewable_channels(UserId, State),
?assertEqual([401], Channels).