%%%------------------------------------------------------------------- %%% @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").