Rewrite and expand EUnit suite; run unit tests in CI from shared test image. Refs EventHub/EventHubBack#36 [skip ci]
This commit is contained in:
@@ -0,0 +1,109 @@
|
||||
-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">>)).
|
||||
Reference in New Issue
Block a user