mirror of
https://github.com/fluxerapp/fluxer
synced 2026-10-07 19:22:14 +09:00
98 lines
3.1 KiB
Erlang
98 lines
3.1 KiB
Erlang
%% SPDX-License-Identifier: AGPL-3.0-or-later
|
|
|
|
-module(session_dm_partners_tests).
|
|
-typing([eqwalizer]).
|
|
|
|
-include_lib("eunit/include/eunit.hrl").
|
|
|
|
-define(SELF, 1).
|
|
-define(GUILD, 900).
|
|
-define(SESSION_ID, <<"session-1">>).
|
|
-define(FLAG, dm_presence_mutual_context).
|
|
|
|
handle_mutual_stores_partners_for_a_connected_guild_test() ->
|
|
{noreply, State} = session_dm_partners:handle_mutual(?GUILD, [2], state(connected())),
|
|
?assertEqual(#{?GUILD => #{2 => true}}, maps:get(dm_mutual_by_guild, State)).
|
|
|
|
handle_mutual_ignores_a_guild_that_is_not_connected_test() ->
|
|
Initial = state(#{}),
|
|
?assertEqual({noreply, Initial}, session_dm_partners:handle_mutual(?GUILD, [2], Initial)).
|
|
|
|
handle_mutual_drops_the_guild_when_nothing_is_mutual_test() ->
|
|
{noreply, With} = session_dm_partners:handle_mutual(?GUILD, [2], state(connected())),
|
|
{noreply, Without} = session_dm_partners:handle_mutual(?GUILD, [], With),
|
|
?assertEqual(#{}, maps:get(dm_mutual_by_guild, Without)).
|
|
|
|
forget_guild_drops_its_partners_test() ->
|
|
{noreply, With} = session_dm_partners:handle_mutual(?GUILD, [2], state(connected())),
|
|
?assertEqual(
|
|
#{}, maps:get(dm_mutual_by_guild, session_dm_partners:forget_guild(?GUILD, With))
|
|
).
|
|
|
|
register_all_sends_direct_partners_to_every_connected_guild_test() ->
|
|
with_flag(true, fun() ->
|
|
_ = session_dm_partners:register_all(state(connected())),
|
|
?assertEqual({update_dm_partners, ?SESSION_ID, [2, 3]}, receive_cast())
|
|
end).
|
|
|
|
register_guild_sends_direct_partners_to_that_guild_test() ->
|
|
with_flag(true, fun() ->
|
|
_ = session_dm_partners:register_guild(?GUILD, self(), state(#{})),
|
|
?assertEqual({update_dm_partners, ?SESSION_ID, [2, 3]}, receive_cast())
|
|
end).
|
|
|
|
register_all_is_inert_when_disabled_test() ->
|
|
with_flag(false, fun() ->
|
|
_ = session_dm_partners:register_all(state(connected())),
|
|
?assertEqual(none, receive_cast())
|
|
end).
|
|
|
|
bots_never_register_test() ->
|
|
with_flag(true, fun() ->
|
|
_ = session_dm_partners:register_all((state(connected()))#{bot => true}),
|
|
?assertEqual(none, receive_cast())
|
|
end).
|
|
|
|
state(Guilds) ->
|
|
#{
|
|
id => ?SESSION_ID,
|
|
user_id => ?SELF,
|
|
presence_pid => undefined,
|
|
guilds => Guilds,
|
|
channels => #{
|
|
100 => channel(1, [?SELF, 2]),
|
|
200 => channel(1, [?SELF, 3]),
|
|
300 => channel(3, [?SELF, 5, 6])
|
|
}
|
|
}.
|
|
|
|
channel(Type, RecipientIds) ->
|
|
#{
|
|
<<"type">> => Type,
|
|
<<"recipients">> => [#{<<"id">> => integer_to_binary(Id)} || Id <- RecipientIds]
|
|
}.
|
|
|
|
connected() ->
|
|
#{?GUILD => {self(), make_ref()}}.
|
|
|
|
receive_cast() ->
|
|
receive
|
|
{'$gen_cast', Msg} -> Msg
|
|
after 100 ->
|
|
none
|
|
end.
|
|
|
|
with_flag(Value, Fun) ->
|
|
Previous = application:get_env(fluxer_gateway, ?FLAG),
|
|
application:set_env(fluxer_gateway, ?FLAG, Value),
|
|
try
|
|
Fun()
|
|
after
|
|
restore_flag(Previous)
|
|
end.
|
|
|
|
restore_flag(undefined) ->
|
|
application:unset_env(fluxer_gateway, ?FLAG);
|
|
restore_flag({ok, Value}) ->
|
|
application:set_env(fluxer_gateway, ?FLAG, Value).
|