Files
EventHubBack/test/api/users/user_verification_tests.erl
T
aleksey 7d39c004a1
CI / test (push) Successful in 8m11s
CI / deploy-ift (push) Successful in 3m30s
CI / e2e-ift (push) Successful in 6m10s
CI / deploy-stage (push) Successful in 3m3s
CI / e2e-stage (push) Successful in 1m15s
fix(ct): adapt API tests to sole Default personal
Default create_calendar to commercial; reuse existing personal on 409;
assert verify title Default; cover personal_exists / default_calendar.

Refs EventHub/EventHubBack#64
2026-07-30 22:29:52 +03:00

71 lines
3.7 KiB
Erlang
Raw 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.
%%%-------------------------------------------------------------------
%%% @doc Тесты процесса подтверждения регистрации.
%%%
%%% Проверяет:
%%% - регистрация создаёт пользователя со статусом `pending`
%%% - вход до подтверждения возвращает 403
%%% - получение верификационного токена через админку
%%% - подтверждение аккаунта через публичный эндпоинт
%%% - после подтверждения вход успешен
%%% - повторное использование токена возвращает ошибку
%%% - невалидный токен возвращает 404
%%% @end
%%%-------------------------------------------------------------------
-module(user_verification_tests).
-include_lib("eunit/include/eunit.hrl").
-export([test/0]).
-spec test() -> ok.
test() ->
ct:pal("=== User Verification Tests ==="),
AdminToken = api_test_runner:get_admin_token(),
Email = api_test_runner:unique_email(<<"verify">>),
Password = <<"TestPass123">>,
% 1. Регистрируем пользователя (должен получить статус pending)
{ok, 201, _, RegBody} = api_test_runner:client_request(post, <<"/v1/register">>, <<>>,
jsx:encode(#{email => Email, password => Password})),
#{<<"user">> := #{<<"id">> := UserId, <<"status">> := UserStatus}} =
jsx:decode(list_to_binary(RegBody), [return_maps]),
?assertEqual(<<"pending">>, UserStatus),
% 2. Попытка входа до подтверждения – должна вернуть 403
{ok, 403, _, _} = api_test_runner:client_request(post, <<"/v1/login">>, <<>>,
jsx:encode(#{email => Email, password => Password})),
% 3. Получаем верификационный токен через админку
#{<<"token">> := Token} = api_test_runner:admin_get(
<<"/v1/admin/users/", UserId/binary, "/verification-token">>, AdminToken),
% 4. Подтверждаем аккаунт через публичный эндпоинт
{ok, 200, _, _} = api_test_runner:client_request(post, <<"/v1/verify">>, <<>>,
jsx:encode(#{<<"token">> => Token})),
% 5. Теперь вход должен быть успешным
{ok, 200, _, LoginBody} = api_test_runner:client_request(post, <<"/v1/login">>, <<>>,
jsx:encode(#{email => Email, password => Password})),
#{<<"token">> := AuthToken} = jsx:decode(list_to_binary(LoginBody), [return_maps]),
?assert(is_binary(AuthToken)),
% 6. После активации — единственный personal с title Default
Calendars = api_test_runner:client_get(<<"/v1/calendars">>, AuthToken),
?assertEqual(1, length(Calendars)),
[DefaultCal] = Calendars,
?assertEqual(<<"personal">>, maps:get(<<"type">>, DefaultCal)),
?assertEqual(<<>>, maps:get(<<"short_name">>, DefaultCal)),
?assertEqual(<<"Default">>, maps:get(<<"title">>, DefaultCal)),
% 7. Повторное использование того же токена – ошибка 404
{ok, 404, _, _} = api_test_runner:client_request(post, <<"/v1/verify">>, <<>>,
jsx:encode(#{<<"token">> => Token})),
% 7. Повторное использование того же токена – ошибка 404
{ok, 404, _, _} = api_test_runner:client_request(post, <<"/v1/verify">>, <<>>,
jsx:encode(#{<<"token">> => Token})),
% 8. Невалидный токен – ошибка 404
{ok, 404, _, _} = api_test_runner:client_request(post, <<"/v1/verify">>, <<>>,
jsx:encode(#{<<"token">> => <<"invalid_token">>})),
ct:pal("=== All user verification tests passed ==="),
ok.