mirror of
https://github.com/fluxerapp/fluxer
synced 2026-10-07 19:22:14 +09:00
250 lines
9.0 KiB
Erlang
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).
|