-module(admin_handler_users_tests). -include_lib("eunit/include/eunit.hrl"). -include("records.hrl"). setup() -> mnesia:start(), mnesia:create_table(user, [{attributes, record_info(fields, user)}, {ram_copies, [node()]}]), ok. cleanup(_) -> mnesia:delete_table(user), mnesia:stop(), ok. admin_users_test_() -> {foreach, fun setup/0, fun cleanup/1, [ {"User to JSON conversion", fun test_user_to_json/0}, {"Is admin check", fun test_is_admin/0} ]}. create_test_user(Role) -> UserId = base64:encode(crypto:strong_rand_bytes(16), #{mode => urlsafe, padding => false}), User = #user{id = UserId, email = <>, password_hash = <<"hash">>, role = Role, status = active, created_at = calendar:universal_time(), updated_at = calendar:universal_time()}, mnesia:dirty_write(User), UserId. test_user_to_json() -> UserId = create_test_user(user), {ok, User} = core_user:get_by_id(UserId), Json = admin_handler_user_by_id:user_to_json(User), ?assert(is_map(Json)), ?assertEqual(UserId, maps:get(id, Json)), ?assertEqual(user, maps:get(role, Json)), ?assertEqual(active, maps:get(status, Json)). test_is_admin() -> AdminId = create_test_user(admin), UserId = create_test_user(user), ?assert(admin_handler_stats:is_admin(AdminId)), ?assertNot(admin_handler_stats:is_admin(UserId)), ?assertNot(admin_handler_stats:is_admin(<<"nonexistent">>)).