Рефакторинг обработчиков. Часть 3 #21

This commit is contained in:
2026-05-13 23:02:59 +03:00
parent 61bb44ab4a
commit 40806df62a
91 changed files with 6138 additions and 7150 deletions

View File

@@ -0,0 +1,69 @@
%%%-------------------------------------------------------------------
%%% @doc Тесты клиентского API для получения своих бронирований.
%%%
%%% Покрывает эндпоинты:
%%% GET /v1/user/bookings
%%%
%%% Проверяет:
%%% - получение списка бронирований текущего пользователя
%%% - что бронирование, созданное пользователем, присутствует в ответе
%%% - ошибку 401 при отсутствии токена
%%% @end
%%%-------------------------------------------------------------------
-module(user_my_bookings_tests).
-include_lib("eunit/include/eunit.hrl").
-export([test/0]).
%%%===================================================================
%%% Главная тестовая функция
%%%===================================================================
-spec test() -> ok.
test() ->
ct:pal("=== User My Bookings Tests ==="),
OwnerToken = api_test_runner:get_user_token(),
ParticipantEmail = api_test_runner:unique_email(<<"mybooker">>),
ParticipantToken = api_test_runner:register_and_login(ParticipantEmail, <<"pass">>),
% Создаём календарь и событие
CalId = api_test_runner:create_calendar(OwnerToken, #{title => <<"MyBookTest">>}),
#{<<"id">> := EventId} = api_test_runner:client_post(
<<"/v1/calendars/", CalId/binary, "/events">>, OwnerToken,
#{title => <<"Event for my booking">>,
start_time => <<"2026-06-01T10:00:00Z">>,
duration => 60}),
% Бронируем событие от имени участника и подтверждаем
#{<<"id">> := BookingId} = api_test_runner:client_post(
<<"/v1/events/", EventId/binary, "/bookings">>, ParticipantToken, #{}),
api_test_runner:client_put(<<"/v1/bookings/", BookingId/binary>>, OwnerToken,
#{action => <<"confirm">>}),
test_get_my_bookings(ParticipantToken, BookingId),
test_get_my_bookings_unauthorized(),
ct:pal("=== All user my bookings tests passed ==="),
ok.
%%%===================================================================
%%% Тестовые функции
%%%===================================================================
%% @doc Успешное получение своих бронирований: 200 OK, содержит бронирование.
-spec test_get_my_bookings(binary(), binary()) -> ok.
test_get_my_bookings(Token, ExpectedBookingId) ->
ct:pal(" TEST: Get my bookings"),
Bookings = api_test_runner:client_get(<<"/v1/user/bookings">>, Token),
?assert(is_list(Bookings)),
?assert(length(Bookings) >= 1),
?assert(lists:any(fun(B) -> maps:get(<<"id">>, B) =:= ExpectedBookingId end, Bookings)),
ct:pal(" OK: booking ~s found in list", [ExpectedBookingId]).
%% @doc Запрос без токена: 401 Unauthorized.
-spec test_get_my_bookings_unauthorized() -> ok.
test_get_my_bookings_unauthorized() ->
ct:pal(" TEST: Get my bookings without token"),
Resp = api_test_runner:client_request(get, <<"/v1/user/bookings">>, <<>>),
?assertMatch({ok, 401, _, _}, Resp),
ct:pal(" OK: got 401").