69 lines
3.1 KiB
Erlang
69 lines
3.1 KiB
Erlang
%%%-------------------------------------------------------------------
|
|
%%% @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"). |