110 lines
4.3 KiB
Erlang
110 lines
4.3 KiB
Erlang
-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">>)).
|