mirror of
https://github.com/fluxerapp/fluxer
synced 2026-10-07 19:22:14 +09:00
213 lines
7.1 KiB
Erlang
213 lines
7.1 KiB
Erlang
%% SPDX-License-Identifier: AGPL-3.0-or-later
|
|
|
|
-module(guild_data_normalize_tests).
|
|
-typing([eqwalizer]).
|
|
|
|
-include_lib("eunit/include/eunit.hrl").
|
|
|
|
snowflake_uses_fluxer_response_shape_test() ->
|
|
?assertEqual(123, snowflake_id:parse(<<"123">>)),
|
|
?assertEqual(123, snowflake_id:parse(123)),
|
|
?assertError({invalid_snowflake, <<"0">>}, snowflake_id:parse(<<"0">>)),
|
|
?assertError({invalid_snowflake, 0}, snowflake_id:parse(0)),
|
|
?assertError({invalid_snowflake, <<"001">>}, snowflake_id:parse(<<"001">>)),
|
|
?assertError({invalid_snowflake, <<"+1">>}, snowflake_id:parse(<<"+1">>)),
|
|
?assertError({invalid_snowflake, <<"-1">>}, snowflake_id:parse(<<"-1">>)),
|
|
?assertError({invalid_snowflake, null}, snowflake_id:parse(null)).
|
|
|
|
permission_accepts_unsigned_decimal_strings_test() ->
|
|
?assertEqual(0, permission_bits:parse(<<"0">>)),
|
|
?assertEqual(1, permission_bits:parse(<<"001">>)),
|
|
?assertEqual(42, permission_bits:parse(42)),
|
|
?assertError({invalid_bitset, <<"+1">>}, permission_bits:parse(<<"+1">>)),
|
|
?assertError({invalid_bitset, <<"-1">>}, permission_bits:parse(<<"-1">>)).
|
|
|
|
member_role_ids_are_integer_keyed_in_memory_test() ->
|
|
Member = normalized_member(#{
|
|
<<"user">> => #{<<"id">> => <<"42">>},
|
|
<<"roles">> => [<<"10">>, 20]
|
|
}),
|
|
?assertEqual(42, maps:get(<<"id">>, maps:get(<<"user">>, Member))),
|
|
?assertEqual([10, 20], maps:get(<<"roles">>, Member)).
|
|
|
|
member_role_ids_reject_invalid_snowflakes_test() ->
|
|
?assertError(
|
|
{invalid_snowflake, <<"001">>},
|
|
normalized_member(#{<<"user">> => #{<<"id">> => <<"42">>}, <<"roles">> => [<<"001">>]})
|
|
).
|
|
|
|
role_permissions_are_integer_in_memory_test() ->
|
|
Role = normalized_role(#{
|
|
<<"id">> => <<"55">>,
|
|
<<"permissions">> => <<"1024">>
|
|
}),
|
|
?assertEqual(55, maps:get(<<"id">>, Role)),
|
|
?assertEqual(1024, maps:get(<<"permissions">>, Role)).
|
|
|
|
int_fields_follow_fluxer_non_negative_int32_schema_test() ->
|
|
Guild = #{
|
|
<<"id">> => <<"10">>,
|
|
<<"owner_id">> => <<"20">>,
|
|
<<"member_count">> => <<"0">>,
|
|
<<"online_count">> => <<"-1">>,
|
|
<<"banner_width">> => -1
|
|
},
|
|
Normalized = maps:get(<<"guild">>, normalized_guild_data(#{<<"guild">> => Guild})),
|
|
?assertEqual(0, maps:get(<<"member_count">>, Normalized)),
|
|
?assertNot(maps:is_key(<<"online_count">>, Normalized)),
|
|
?assertNot(maps:is_key(<<"banner_width">>, Normalized)).
|
|
|
|
guild_normalizes_only_fluxer_response_snowflakes_test() ->
|
|
Guild = #{
|
|
<<"id">> => <<"10">>,
|
|
<<"owner_id">> => <<"20">>,
|
|
<<"system_channel_id">> => null,
|
|
<<"rules_channel_id">> => <<"30">>,
|
|
<<"permissions">> => <<"8">>
|
|
},
|
|
?assertEqual(
|
|
#{
|
|
<<"id">> => 10,
|
|
<<"owner_id">> => 20,
|
|
<<"system_channel_id">> => null,
|
|
<<"rules_channel_id">> => 30,
|
|
<<"permissions">> => 8
|
|
},
|
|
maps:get(<<"guild">>, normalized_guild_data(#{<<"guild">> => Guild}))
|
|
).
|
|
|
|
guild_rejects_invalid_snowflake_fields_test() ->
|
|
Guild = #{
|
|
<<"id">> => <<"10">>,
|
|
<<"owner_id">> => <<"20">>,
|
|
<<"afk_channel_id">> => <<"invalid">>
|
|
},
|
|
?assertError(
|
|
{invalid_snowflake, <<"invalid">>}, normalized_guild_data(#{<<"guild">> => Guild})
|
|
).
|
|
|
|
channel_normalizes_required_optional_and_nullable_ids_test() ->
|
|
Channel = normalized_channel(#{
|
|
<<"id">> => <<"100">>,
|
|
<<"guild_id">> => null,
|
|
<<"owner_id">> => null,
|
|
<<"parent_id">> => <<"200">>,
|
|
<<"last_message_id">> => <<"300">>
|
|
}),
|
|
?assertEqual(100, maps:get(<<"id">>, Channel)),
|
|
?assertNot(maps:is_key(<<"guild_id">>, Channel)),
|
|
?assertEqual(null, maps:get(<<"owner_id">>, Channel)),
|
|
?assertEqual(200, maps:get(<<"parent_id">>, Channel)),
|
|
?assertEqual(300, maps:get(<<"last_message_id">>, Channel)).
|
|
|
|
channel_rejects_invalid_nullable_snowflake_test() ->
|
|
?assertError(
|
|
{invalid_snowflake, <<"001">>},
|
|
normalized_channel(#{<<"id">> => <<"100">>, <<"last_message_id">> => <<"001">>})
|
|
).
|
|
|
|
channel_rejects_invalid_permission_overwrites_test() ->
|
|
?assertError(
|
|
{invalid_snowflake, <<"011">>},
|
|
normalized_channel(#{
|
|
<<"id">> => <<"100">>,
|
|
<<"permission_overwrites">> => [
|
|
#{
|
|
<<"id">> => <<"011">>,
|
|
<<"type">> => 0,
|
|
<<"allow">> => <<"1">>,
|
|
<<"deny">> => <<"0">>
|
|
}
|
|
]
|
|
})
|
|
),
|
|
?assertError(
|
|
{invalid_bitset, <<"bad">>},
|
|
normalized_channel(#{
|
|
<<"id">> => <<"100">>,
|
|
<<"permission_overwrites">> => [
|
|
#{
|
|
<<"id">> => <<"12">>,
|
|
<<"type">> => 0,
|
|
<<"allow">> => <<"bad">>,
|
|
<<"deny">> => <<"0">>
|
|
}
|
|
]
|
|
})
|
|
).
|
|
|
|
channel_filters_non_permission_overwrite_schema_test() ->
|
|
Channel = normalized_channel(#{
|
|
<<"id">> => <<"100">>,
|
|
<<"permission_overwrites">> => [
|
|
#{
|
|
<<"id">> => <<"10">>,
|
|
<<"type">> => 0,
|
|
<<"allow">> => <<"1">>,
|
|
<<"deny">> => <<"0">>
|
|
},
|
|
#{<<"type">> => 0, <<"allow">> => <<"1">>, <<"deny">> => <<"0">>},
|
|
#{<<"id">> => <<"13">>, <<"type">> => 0, <<"allow">> => <<"1">>},
|
|
#{<<"id">> => <<"14">>, <<"type">> => 0, <<"deny">> => <<"0">>},
|
|
#{
|
|
<<"id">> => <<"15">>,
|
|
<<"type">> => 2,
|
|
<<"allow">> => <<"1">>,
|
|
<<"deny">> => <<"0">>
|
|
}
|
|
]
|
|
}),
|
|
?assertEqual(
|
|
[
|
|
#{<<"id">> => 10, <<"type">> => 0, <<"allow">> => 1, <<"deny">> => 0}
|
|
],
|
|
maps:get(<<"permission_overwrites">>, Channel)
|
|
).
|
|
|
|
channel_overwrites_keep_only_fluxer_schema_fields_test() ->
|
|
Channel = normalized_channel(#{
|
|
<<"id">> => <<"100">>,
|
|
<<"permission_overwrites">> => [
|
|
#{
|
|
<<"id">> => <<"10">>,
|
|
<<"type">> => 1,
|
|
<<"allow">> => <<"2048">>,
|
|
<<"deny">> => <<"0">>,
|
|
<<"extra">> => <<"drop">>
|
|
}
|
|
]
|
|
}),
|
|
?assertEqual(
|
|
[
|
|
#{<<"id">> => 10, <<"type">> => 1, <<"allow">> => 2048, <<"deny">> => 0}
|
|
],
|
|
maps:get(<<"permission_overwrites">>, Channel)
|
|
).
|
|
|
|
nicks_are_integer_keyed_in_memory_test() ->
|
|
Channel = normalized_channel(#{
|
|
<<"id">> => <<"100">>,
|
|
<<"nicks">> => #{<<"10">> => <<"Ada">>}
|
|
}),
|
|
?assertEqual(#{10 => <<"Ada">>}, maps:get(<<"nicks">>, Channel)).
|
|
|
|
nicks_reject_invalid_snowflake_keys_test() ->
|
|
?assertError(
|
|
{invalid_snowflake, <<"bad">>},
|
|
normalized_channel(#{
|
|
<<"id">> => <<"100">>, <<"nicks">> => #{<<"bad">> => <<"ignored">>}
|
|
})
|
|
).
|
|
|
|
normalized_member(Member) ->
|
|
#{} = guild_data_normalize:member(Member).
|
|
|
|
normalized_role(Role) ->
|
|
#{} = guild_data_normalize:role(Role).
|
|
|
|
normalized_guild_data(Data) ->
|
|
#{} = guild_data_normalize:guild_data(Data).
|
|
|
|
normalized_channel(Channel) ->
|
|
#{} = guild_data_normalize:channel(Channel).
|