83 lines
4.0 KiB
Erlang
83 lines
4.0 KiB
Erlang
-module(api_booking_tests).
|
|
-export([test/0]).
|
|
|
|
-define(BASE_URL, "http://localhost:8080").
|
|
|
|
test() ->
|
|
io:format("Testing booking API...~n"),
|
|
|
|
OwnerEmail = api_test_runner:unique_email(<<"book_owner">>),
|
|
ParticipantEmail = api_test_runner:unique_email(<<"book_part">>),
|
|
|
|
OwnerToken = api_test_runner:register_and_login(OwnerEmail, <<"owner123">>),
|
|
ParticipantToken = api_test_runner:register_and_login(ParticipantEmail, <<"part123">>),
|
|
|
|
% Используем COMMERCIAL календари
|
|
AutoCalId = api_test_runner:extract_json(
|
|
api_test_runner:http_post("/v1/calendars",
|
|
#{title => <<"Auto">>, type => <<"commercial">>, confirmation => <<"auto">>}, OwnerToken), <<"id">>),
|
|
ManualCalId = api_test_runner:extract_json(
|
|
api_test_runner:http_post("/v1/calendars",
|
|
#{title => <<"Manual">>, type => <<"commercial">>, confirmation => <<"manual">>}, OwnerToken), <<"id">>),
|
|
|
|
% Создаём события
|
|
AutoEventId = api_test_runner:extract_json(
|
|
api_test_runner:http_post("/v1/calendars/" ++ binary_to_list(AutoCalId) ++ "/events",
|
|
#{title => <<"Auto Event">>, start_time => <<"2026-06-01T10:00:00Z">>, duration => 60}, OwnerToken), <<"id">>),
|
|
ManualEventId = api_test_runner:extract_json(
|
|
api_test_runner:http_post("/v1/calendars/" ++ binary_to_list(ManualCalId) ++ "/events",
|
|
#{title => <<"Manual Event">>, start_time => <<"2026-06-01T10:00:00Z">>, duration => 60}, OwnerToken), <<"id">>),
|
|
|
|
% TEST 1: Auto booking
|
|
io:format(" TEST 1: Auto booking... "),
|
|
AutoBookingId = api_test_runner:extract_json(
|
|
api_test_runner:http_post("/v1/events/" ++ binary_to_list(AutoEventId) ++ "/bookings", #{}, ParticipantToken), <<"id">>),
|
|
timer:sleep(200),
|
|
{ok, {{_, 200, _}, _, _}} = api_test_runner:http_get("/v1/bookings/" ++ binary_to_list(AutoBookingId), ParticipantToken),
|
|
io:format("OK~n"),
|
|
|
|
% TEST 2: Manual booking
|
|
io:format(" TEST 2: Manual booking... "),
|
|
ManualBookingId = api_test_runner:extract_json(
|
|
api_test_runner:http_post("/v1/events/" ++ binary_to_list(ManualEventId) ++ "/bookings", #{}, ParticipantToken), <<"id">>),
|
|
io:format("OK~n"),
|
|
|
|
% TEST 3: Duplicate booking
|
|
io:format(" TEST 3: Duplicate booking... "),
|
|
{ok, {{_, 409, _}, _, _}} = api_test_runner:http_post("/v1/events/" ++ binary_to_list(AutoEventId) ++ "/bookings", #{}, ParticipantToken),
|
|
io:format("OK~n"),
|
|
|
|
% TEST 4: Owner confirms booking
|
|
io:format(" TEST 4: Owner confirms booking... "),
|
|
{ok, {{_, 200, _}, _, _}} = api_test_runner:http_put("/v1/bookings/" ++ binary_to_list(ManualBookingId),
|
|
#{action => <<"confirm">>}, OwnerToken),
|
|
io:format("OK~n"),
|
|
|
|
% TEST 5: List event bookings
|
|
io:format(" TEST 5: List event bookings... "),
|
|
{ok, {{_, 200, _}, _, _}} = api_test_runner:http_get("/v1/events/" ++ binary_to_list(ManualEventId) ++ "/bookings", OwnerToken),
|
|
io:format("OK~n"),
|
|
|
|
% TEST 6: List user bookings
|
|
io:format(" TEST 6: List user bookings... "),
|
|
{ok, {{_, 200, _}, _, _}} = api_test_runner:http_get("/v1/user/bookings", ParticipantToken),
|
|
io:format("OK~n"),
|
|
|
|
% TEST 7: Cancel booking
|
|
io:format(" TEST 7: Cancel booking... "),
|
|
{ok, {{_, 200, _}, _, _}} = api_test_runner:http_delete("/v1/bookings/" ++ binary_to_list(AutoBookingId), ParticipantToken),
|
|
io:format("OK~n"),
|
|
|
|
% TEST 8: Owner declines booking (новое событие)
|
|
io:format(" TEST 8: Owner declines booking... "),
|
|
NewEventId = api_test_runner:extract_json(
|
|
api_test_runner:http_post("/v1/calendars/" ++ binary_to_list(ManualCalId) ++ "/events",
|
|
#{title => <<"Decline Event">>, start_time => <<"2026-06-02T10:00:00Z">>, duration => 60}, OwnerToken), <<"id">>),
|
|
NewBookingId = api_test_runner:extract_json(
|
|
api_test_runner:http_post("/v1/events/" ++ binary_to_list(NewEventId) ++ "/bookings", #{}, ParticipantToken), <<"id">>),
|
|
{ok, {{_, 200, _}, _, _}} = api_test_runner:http_put("/v1/bookings/" ++ binary_to_list(NewBookingId),
|
|
#{action => <<"decline">>}, OwnerToken),
|
|
io:format("OK~n"),
|
|
|
|
io:format("~n✅ Booking API tests passed!~n"),
|
|
{?MODULE, ok}. |