Files
EventHubBack/test/unit/core_admin_tests.erl

110 lines
4.3 KiB
Erlang
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
-module(core_admin_tests).
-include_lib("eunit/include/eunit.hrl").
-include("records.hrl").
-define(TABLES, [admin]).
setup() ->
eh_test_support:start_mnesia(),
eh_test_support:ensure_tables(?TABLES),
ok.
cleanup(_) ->
eh_test_support:clear_tables(?TABLES),
eh_test_support:delete_tables(?TABLES),
eh_test_support:stop_mnesia(),
ok.
core_admin_test_() ->
{foreach, fun setup/0, fun cleanup/1, [
{"Create admin", fun test_create/0},
{"Create admin email exists", fun test_create_email_exists/0},
{"Get by id", fun test_get_by_id/0},
{"Get by email", fun test_get_by_email/0},
{"List all", fun test_list_all/0},
{"Update fields", fun test_update/0},
{"Update role", fun test_update_role/0},
{"Block and unblock", fun test_block_unblock/0},
{"Update last login", fun test_update_last_login/0},
{"Delete", fun test_delete/0}
]}.
test_create() ->
Email = <<"admin1@test.local">>,
{ok, Admin} = core_admin:create(Email, <<"secret123">>, admin),
?assertEqual(Email, Admin#admin.email),
?assertEqual(admin, Admin#admin.role),
?assertEqual(active, Admin#admin.status),
?assertEqual(<<"admin1">>, Admin#admin.nickname),
?assert(is_binary(Admin#admin.id)),
?assert(is_binary(Admin#admin.password_hash)),
?assert(Admin#admin.password_hash =/= <<"secret123">>).
test_create_email_exists() ->
Email = <<"dup@test.local">>,
{ok, _} = core_admin:create(Email, <<"pass1">>, admin),
?assertEqual({error, email_exists}, core_admin:create(Email, <<"pass2">>, moderator)).
test_get_by_id() ->
{ok, Admin} = core_admin:create(<<"byid@test.local">>, <<"pass">>, admin),
{ok, Found} = core_admin:get_by_id(Admin#admin.id),
?assertEqual(Admin#admin.id, Found#admin.id),
?assertEqual(Admin#admin.email, Found#admin.email),
?assertEqual({error, not_found}, core_admin:get_by_id(<<"missing">>)).
test_get_by_email() ->
Email = <<"byemail@test.local">>,
{ok, Admin} = core_admin:create(Email, <<"pass">>, support),
{ok, Found} = core_admin:get_by_email(Email),
?assertEqual(Admin#admin.id, Found#admin.id),
?assertEqual({error, not_found}, core_admin:get_by_email(<<"nope@test.local">>)).
test_list_all() ->
?assertEqual([], core_admin:list_all()),
{ok, _} = core_admin:create(<<"a1@test.local">>, <<"pass">>, admin),
{ok, _} = core_admin:create(<<"a2@test.local">>, <<"pass">>, moderator),
List = core_admin:list_all(),
?assertEqual(2, length(List)).
test_update() ->
{ok, Admin} = core_admin:create(<<"upd@test.local">>, <<"pass">>, admin),
{ok, Updated} = core_admin:update(Admin#admin.id, [
{nickname, <<"nick">>},
{phone, <<"+7999">>},
{timezone, <<"Europe/Moscow">>}
]),
?assertEqual(<<"nick">>, Updated#admin.nickname),
?assertEqual(<<"+7999">>, Updated#admin.phone),
?assertEqual(<<"Europe/Moscow">>, Updated#admin.timezone),
?assertEqual({error, not_found}, core_admin:update(<<"missing">>, [{nickname, <<"x">>}])).
test_update_role() ->
{ok, Admin} = core_admin:create(<<"role@test.local">>, <<"pass">>, admin),
{ok, Updated} = core_admin:update_role(Admin#admin.id, superadmin),
?assertEqual(superadmin, Updated#admin.role),
{ok, Loaded} = core_admin:get_by_id(Admin#admin.id),
?assertEqual(superadmin, Loaded#admin.role),
?assertEqual({error, not_found}, core_admin:update_role(<<"missing">>, admin)).
test_block_unblock() ->
{ok, Admin} = core_admin:create(<<"block@test.local">>, <<"pass">>, admin),
{ok, Blocked} = core_admin:block(Admin#admin.id),
?assertEqual(blocked, Blocked#admin.status),
{ok, Active} = core_admin:unblock(Admin#admin.id),
?assertEqual(active, Active#admin.status),
?assertEqual({error, not_found}, core_admin:block(<<"missing">>)),
?assertEqual({error, not_found}, core_admin:unblock(<<"missing">>)).
test_update_last_login() ->
{ok, Admin} = core_admin:create(<<"login@test.local">>, <<"pass">>, admin),
OldLogin = Admin#admin.last_login,
{ok, Updated} = core_admin:update_last_login(Admin#admin.id),
?assert(Updated#admin.last_login >= OldLogin),
?assertEqual({error, not_found}, core_admin:update_last_login(<<"missing">>)).
test_delete() ->
{ok, Admin} = core_admin:create(<<"del@test.local">>, <<"pass">>, admin),
?assertEqual({ok, deleted}, core_admin:delete(Admin#admin.id)),
?assertEqual({error, not_found}, core_admin:get_by_id(Admin#admin.id)),
?assertEqual({error, not_found}, core_admin:delete(<<"missing">>)).