created a gestion sports services class that handles the connection while the connector is dedicated to the requests
This commit is contained in:
parent
bcd8dc0733
commit
e6023e0687
12 changed files with 513 additions and 593 deletions
|
@ -4,6 +4,7 @@ from pathlib import Path
|
|||
import pendulum
|
||||
import pytest
|
||||
from connectors import GestionSportsConnector
|
||||
from gestion_sports_services import GestionSportsServices
|
||||
from models import (
|
||||
BookingFilter,
|
||||
BookingOpening,
|
||||
|
@ -184,6 +185,11 @@ def connector(club) -> GestionSportsConnector:
|
|||
return GestionSportsConnector(club)
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def gs_services() -> GestionSportsServices:
|
||||
return GestionSportsServices()
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def user() -> User:
|
||||
return User(login="padel.testing@jouf.fr", password="ridicule")
|
||||
|
@ -226,6 +232,22 @@ def booking_failure_response() -> dict:
|
|||
return json.loads(booking_failure_file.read_text(encoding="utf-8"))
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def booked_courts_response(
|
||||
court11,
|
||||
court12,
|
||||
court13,
|
||||
court14,
|
||||
booking_success_response,
|
||||
booking_failure_response,
|
||||
) -> list[tuple[int, dict]]:
|
||||
court1_resp = court11.id, booking_failure_response
|
||||
court2_resp = court12.id, booking_failure_response
|
||||
court3_resp = court13.id, booking_success_response
|
||||
court4_resp = court14.id, booking_failure_response
|
||||
return [court1_resp, court2_resp, court3_resp, court4_resp]
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def booking_success_from_start(
|
||||
landing_response,
|
||||
|
@ -350,3 +372,8 @@ def cancellation_success_booking_filter() -> BookingFilter:
|
|||
return BookingFilter(
|
||||
sport_name="Sport1", date=pendulum.parse("2024-03-21T13:30:00Z")
|
||||
)
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def service() -> GestionSportsServices:
|
||||
return GestionSportsServices()
|
||||
|
|
83
tests/unit_tests/responses.py
Normal file
83
tests/unit_tests/responses.py
Normal file
|
@ -0,0 +1,83 @@
|
|||
def make_landing_request_success(aioresponses, connector, landing_response):
|
||||
aioresponses.get(
|
||||
connector.landing_url,
|
||||
status=200,
|
||||
headers={"Set-Cookie": "PHPSESSID=987512"},
|
||||
body=landing_response,
|
||||
)
|
||||
|
||||
|
||||
def make_login_request_fail(aioresponses, connector, login_failure_response):
|
||||
aioresponses.post(
|
||||
connector.login_url,
|
||||
status=200,
|
||||
payload=login_failure_response,
|
||||
)
|
||||
|
||||
|
||||
def make_login_request_success(aioresponses, connector, login_success_response):
|
||||
aioresponses.post(
|
||||
connector.login_url,
|
||||
status=200,
|
||||
headers={"Set-Cookie": "COOK_COMPTE=e2be1;" "COOK_ID_CLUB=22;COOK_ID_USER=666"},
|
||||
payload=login_success_response,
|
||||
)
|
||||
|
||||
|
||||
def set_booking_request(aioresponses, connector, booking_response):
|
||||
aioresponses.post(connector.booking_url, status=200, payload=booking_response)
|
||||
|
||||
|
||||
def set_full_booking_requests_responses(aioresponses, connector, responses_list):
|
||||
make_landing_request_success(aioresponses, connector, responses_list[0])
|
||||
make_login_request_success(aioresponses, connector, responses_list[1])
|
||||
for response in responses_list[2:]:
|
||||
set_booking_request(aioresponses, connector, response)
|
||||
|
||||
|
||||
def set_ongoing_bookings_response(
|
||||
aioresponses, connector, user_bookings_get_response, user_bookings_post_response
|
||||
):
|
||||
set_hash_response(aioresponses, connector, user_bookings_get_response)
|
||||
set_bookings_response(aioresponses, connector, user_bookings_post_response)
|
||||
|
||||
|
||||
def set_hash_response(aioresponses, connector, user_bookings_get_response):
|
||||
aioresponses.get(
|
||||
connector.user_bookings_url, status=200, body=user_bookings_get_response
|
||||
)
|
||||
|
||||
|
||||
def set_bookings_response(aioresponses, connector, user_bookings_post_response):
|
||||
aioresponses.post(
|
||||
connector.user_bookings_url, status=200, payload=user_bookings_post_response
|
||||
)
|
||||
|
||||
|
||||
def set_full_user_bookings_responses(aioresponses, connector, responses):
|
||||
make_landing_request_success(aioresponses, connector, responses[0])
|
||||
make_login_request_success(aioresponses, connector, responses[1])
|
||||
set_ongoing_bookings_response(aioresponses, connector, *responses[2:])
|
||||
|
||||
|
||||
def set_cancellation_response(aioresponses, connector, response):
|
||||
aioresponses.post(connector.booking_cancellation_url, status=200, payload=response)
|
||||
|
||||
|
||||
def set_full_cancellation_by_id_responses(aioresponses, connector, responses):
|
||||
make_landing_request_success(aioresponses, connector, responses[0])
|
||||
make_login_request_success(aioresponses, connector, responses[1])
|
||||
set_hash_response(aioresponses, connector, responses[2])
|
||||
set_cancellation_response(aioresponses, connector, responses[3])
|
||||
|
||||
|
||||
def set_full_cancellation_responses(aioresponses, connector, responses):
|
||||
make_landing_request_success(aioresponses, connector, responses[0])
|
||||
make_login_request_success(aioresponses, connector, responses[1])
|
||||
|
||||
# the request to get the hash is made twice
|
||||
set_hash_response(aioresponses, connector, responses[2])
|
||||
set_hash_response(aioresponses, connector, responses[2])
|
||||
|
||||
set_bookings_response(aioresponses, connector, responses[3])
|
||||
set_cancellation_response(aioresponses, connector, responses[4])
|
|
@ -15,7 +15,7 @@ from pendulum import DateTime, Timezone
|
|||
)
|
||||
def test_get_booking_filter():
|
||||
booking_filter = config.get_booking_filter()
|
||||
assert booking_filter.sport_id == "padel"
|
||||
assert booking_filter.sport_name == "padel"
|
||||
assert booking_filter.date == DateTime(
|
||||
year=2024,
|
||||
month=2,
|
||||
|
|
|
@ -5,90 +5,7 @@ import pytest
|
|||
from aiohttp import ClientSession
|
||||
from connectors import GestionSportsConnector
|
||||
|
||||
|
||||
def make_landing_request_success(aioresponses, connector, landing_response):
|
||||
aioresponses.get(
|
||||
connector.landing_url,
|
||||
status=200,
|
||||
headers={"Set-Cookie": "PHPSESSID=987512"},
|
||||
body=landing_response,
|
||||
)
|
||||
|
||||
|
||||
def make_login_request_fail(aioresponses, connector, login_failure_response):
|
||||
aioresponses.post(
|
||||
connector.login_url,
|
||||
status=200,
|
||||
payload=login_failure_response,
|
||||
)
|
||||
|
||||
|
||||
def make_login_request_success(aioresponses, connector, login_success_response):
|
||||
aioresponses.post(
|
||||
connector.login_url,
|
||||
status=200,
|
||||
headers={"Set-Cookie": "COOK_COMPTE=e2be1;" "COOK_ID_CLUB=22;COOK_ID_USER=666"},
|
||||
payload=login_success_response,
|
||||
)
|
||||
|
||||
|
||||
def set_booking_request(aioresponses, connector, booking_response):
|
||||
aioresponses.post(connector.booking_url, status=200, payload=booking_response)
|
||||
|
||||
|
||||
def set_full_booking_requests_responses(aioresponses, connector, responses_list):
|
||||
make_landing_request_success(aioresponses, connector, responses_list[0])
|
||||
make_login_request_success(aioresponses, connector, responses_list[1])
|
||||
for response in responses_list[2:]:
|
||||
set_booking_request(aioresponses, connector, response)
|
||||
|
||||
|
||||
def set_ongoing_bookings_response(
|
||||
aioresponses, connector, user_bookings_get_response, user_bookings_post_response
|
||||
):
|
||||
set_hash_response(aioresponses, connector, user_bookings_get_response)
|
||||
set_bookings_response(aioresponses, connector, user_bookings_post_response)
|
||||
|
||||
|
||||
def set_hash_response(aioresponses, connector, user_bookings_get_response):
|
||||
aioresponses.get(
|
||||
connector.user_bookings_url, status=200, body=user_bookings_get_response
|
||||
)
|
||||
|
||||
|
||||
def set_bookings_response(aioresponses, connector, user_bookings_post_response):
|
||||
aioresponses.post(
|
||||
connector.user_bookings_url, status=200, payload=user_bookings_post_response
|
||||
)
|
||||
|
||||
|
||||
def set_full_user_bookings_responses(aioresponses, connector, responses):
|
||||
make_landing_request_success(aioresponses, connector, responses[0])
|
||||
make_login_request_success(aioresponses, connector, responses[1])
|
||||
set_ongoing_bookings_response(aioresponses, connector, *responses[2:])
|
||||
|
||||
|
||||
def set_cancellation_response(aioresponses, connector, response):
|
||||
aioresponses.post(connector.booking_cancellation_url, status=200, payload=response)
|
||||
|
||||
|
||||
def set_full_cancellation_by_id_responses(aioresponses, connector, responses):
|
||||
make_landing_request_success(aioresponses, connector, responses[0])
|
||||
make_login_request_success(aioresponses, connector, responses[1])
|
||||
set_hash_response(aioresponses, connector, responses[2])
|
||||
set_cancellation_response(aioresponses, connector, responses[3])
|
||||
|
||||
|
||||
def set_full_cancellation_responses(aioresponses, connector, responses):
|
||||
make_landing_request_success(aioresponses, connector, responses[0])
|
||||
make_login_request_success(aioresponses, connector, responses[1])
|
||||
|
||||
# the request to get the hash is made twice
|
||||
set_hash_response(aioresponses, connector, responses[2])
|
||||
set_hash_response(aioresponses, connector, responses[2])
|
||||
|
||||
set_bookings_response(aioresponses, connector, responses[3])
|
||||
set_cancellation_response(aioresponses, connector, responses[4])
|
||||
from tests.unit_tests import responses
|
||||
|
||||
|
||||
def test_urls(connector, club):
|
||||
|
@ -134,7 +51,7 @@ def test_urls_payload_templates(mock_resources, club):
|
|||
|
||||
@pytest.mark.asyncio
|
||||
async def test_landing_page(aioresponses, connector, landing_response):
|
||||
make_landing_request_success(aioresponses, connector, landing_response)
|
||||
responses.make_landing_request_success(aioresponses, connector, landing_response)
|
||||
|
||||
async with ClientSession() as session:
|
||||
response = await connector.land(session)
|
||||
|
@ -146,7 +63,9 @@ async def test_landing_page(aioresponses, connector, landing_response):
|
|||
|
||||
@pytest.mark.asyncio
|
||||
async def test_login_success(aioresponses, connector, user, login_success_response):
|
||||
make_login_request_success(aioresponses, connector, login_success_response)
|
||||
responses.make_login_request_success(
|
||||
aioresponses, connector, login_success_response
|
||||
)
|
||||
|
||||
async with ClientSession() as session:
|
||||
response = await connector.login(session, user)
|
||||
|
@ -160,7 +79,7 @@ async def test_login_success(aioresponses, connector, user, login_success_respon
|
|||
|
||||
@pytest.mark.asyncio
|
||||
async def test_login_failure(aioresponses, connector, user, login_failure_response):
|
||||
make_login_request_fail(aioresponses, connector, login_failure_response)
|
||||
responses.make_login_request_fail(aioresponses, connector, login_failure_response)
|
||||
|
||||
async with ClientSession() as session:
|
||||
response = await connector.login(session, user)
|
||||
|
@ -170,38 +89,9 @@ async def test_login_failure(aioresponses, connector, user, login_failure_respon
|
|||
assert await response.json() == login_failure_response
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_booking_success(
|
||||
aioresponses,
|
||||
connector,
|
||||
user,
|
||||
booking_filter,
|
||||
booking_success_from_start,
|
||||
):
|
||||
set_full_booking_requests_responses(
|
||||
aioresponses, connector, booking_success_from_start
|
||||
)
|
||||
|
||||
court_booked = await connector.book(user, booking_filter)
|
||||
|
||||
assert court_booked.id == 2
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_booking_failure(
|
||||
aioresponses,
|
||||
connector,
|
||||
user,
|
||||
booking_filter,
|
||||
booking_failure_from_start,
|
||||
):
|
||||
set_full_booking_requests_responses(
|
||||
aioresponses, connector, booking_failure_from_start
|
||||
)
|
||||
|
||||
court_booked = await connector.book(user, booking_filter)
|
||||
|
||||
assert court_booked is None
|
||||
def test_get_booked_court(connector, booked_courts_response):
|
||||
booked_court = connector.get_booked_court(booked_courts_response, "Sport1")
|
||||
assert booked_court.number == 3
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
|
@ -212,7 +102,7 @@ async def test_get_ongoing_bookings(
|
|||
user_bookings_get_response,
|
||||
user_bookings_list,
|
||||
):
|
||||
set_ongoing_bookings_response(
|
||||
responses.set_ongoing_bookings_response(
|
||||
aioresponses, connector, user_bookings_get_response, user_bookings_list
|
||||
)
|
||||
|
||||
|
@ -222,81 +112,19 @@ async def test_get_ongoing_bookings(
|
|||
assert len(bookings) == 2
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_get_ongoing_bookings(
|
||||
aioresponses,
|
||||
connector,
|
||||
user,
|
||||
user_bookings_get_response,
|
||||
user_bookings_list,
|
||||
):
|
||||
set_ongoing_bookings_response(
|
||||
aioresponses, connector, user_bookings_get_response, user_bookings_list
|
||||
)
|
||||
|
||||
async with ClientSession() as session:
|
||||
bookings = await connector.get_ongoing_bookings(session)
|
||||
|
||||
assert len(bookings) == 2
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_has_user_ongoing_bookings(
|
||||
aioresponses,
|
||||
connector,
|
||||
user,
|
||||
user_has_ongoing_bookings_from_start,
|
||||
):
|
||||
set_full_user_bookings_responses(
|
||||
aioresponses, connector, user_has_ongoing_bookings_from_start
|
||||
)
|
||||
|
||||
has_bookings = await connector.has_user_ongoing_booking(user)
|
||||
|
||||
assert has_bookings
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_has_user_ongoing_bookings(
|
||||
aioresponses,
|
||||
connector,
|
||||
user,
|
||||
user_has_no_ongoing_bookings_from_start,
|
||||
):
|
||||
set_full_user_bookings_responses(
|
||||
aioresponses, connector, user_has_no_ongoing_bookings_from_start
|
||||
)
|
||||
has_bookings = await connector.has_user_ongoing_booking(user)
|
||||
|
||||
assert not has_bookings
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_cancellation_request(
|
||||
aioresponses, connector, user_bookings_get_response, cancellation_response
|
||||
):
|
||||
set_hash_response(aioresponses, connector, user_bookings_get_response)
|
||||
set_cancellation_response(aioresponses, connector, cancellation_response)
|
||||
responses.set_hash_response(aioresponses, connector, user_bookings_get_response)
|
||||
responses.set_cancellation_response(aioresponses, connector, cancellation_response)
|
||||
|
||||
async with ClientSession() as session:
|
||||
response = await connector.send_cancellation_request(session, 123)
|
||||
response = await connector.cancel_booking_id(session, 123)
|
||||
|
||||
assert await response.json() == cancellation_response
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_cancel_booking_id(
|
||||
aioresponses, connector, user, cancellation_by_id_from_start
|
||||
):
|
||||
set_full_cancellation_by_id_responses(
|
||||
aioresponses, connector, cancellation_by_id_from_start
|
||||
)
|
||||
|
||||
response = await connector.cancel_booking_id(user, 132)
|
||||
|
||||
assert await response.json() == cancellation_by_id_from_start[3]
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_cancel_booking_success(
|
||||
aioresponses,
|
||||
|
@ -305,10 +133,13 @@ async def test_cancel_booking_success(
|
|||
cancellation_success_booking_filter,
|
||||
cancellation_success_from_start,
|
||||
):
|
||||
set_full_cancellation_responses(
|
||||
responses.set_full_cancellation_responses(
|
||||
aioresponses, connector, cancellation_success_from_start
|
||||
)
|
||||
|
||||
response = await connector.cancel_booking(user, cancellation_success_booking_filter)
|
||||
async with ClientSession() as session:
|
||||
response = await connector.cancel_booking(
|
||||
session, cancellation_success_booking_filter
|
||||
)
|
||||
|
||||
assert await response.json() == cancellation_success_from_start[4]
|
||||
|
|
110
tests/unit_tests/test_gestion_sports_services.py
Normal file
110
tests/unit_tests/test_gestion_sports_services.py
Normal file
|
@ -0,0 +1,110 @@
|
|||
import pytest
|
||||
from gestion_sports_services import GestionSportsServices
|
||||
|
||||
from tests.unit_tests import responses
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_booking_success(
|
||||
aioresponses,
|
||||
connector,
|
||||
club,
|
||||
user,
|
||||
booking_filter,
|
||||
booking_success_from_start,
|
||||
):
|
||||
responses.set_full_booking_requests_responses(
|
||||
aioresponses, connector, booking_success_from_start
|
||||
)
|
||||
|
||||
court_booked = await GestionSportsServices.book(club, user, booking_filter)
|
||||
|
||||
assert court_booked.id == 2
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_booking_failure(
|
||||
aioresponses,
|
||||
gs_services,
|
||||
connector,
|
||||
club,
|
||||
user,
|
||||
booking_filter,
|
||||
booking_failure_from_start,
|
||||
):
|
||||
responses.set_full_booking_requests_responses(
|
||||
aioresponses, connector, booking_failure_from_start
|
||||
)
|
||||
|
||||
court_booked = await gs_services.book(club, user, booking_filter)
|
||||
|
||||
assert court_booked is None
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_user_has_available_booking_slots(
|
||||
aioresponses,
|
||||
gs_services,
|
||||
connector,
|
||||
user,
|
||||
club,
|
||||
user_has_ongoing_bookings_from_start,
|
||||
):
|
||||
responses.set_full_user_bookings_responses(
|
||||
aioresponses, connector, user_has_ongoing_bookings_from_start
|
||||
)
|
||||
|
||||
has_user_available_slots = await gs_services.has_user_available_slots(user, club)
|
||||
|
||||
assert has_user_available_slots
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_user_has_no_available_booking_slots(
|
||||
aioresponses,
|
||||
gs_services,
|
||||
connector,
|
||||
user,
|
||||
club,
|
||||
user_has_no_ongoing_bookings_from_start,
|
||||
):
|
||||
responses.set_full_user_bookings_responses(
|
||||
aioresponses, connector, user_has_no_ongoing_bookings_from_start
|
||||
)
|
||||
|
||||
has_user_available_slots = await gs_services.has_user_available_slots(user, club)
|
||||
|
||||
assert not has_user_available_slots
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_cancel_booking(
|
||||
aioresponses,
|
||||
gs_services,
|
||||
connector,
|
||||
user,
|
||||
club,
|
||||
booking_filter,
|
||||
cancellation_success_from_start,
|
||||
):
|
||||
responses.set_full_cancellation_responses(
|
||||
aioresponses, connector, cancellation_success_from_start
|
||||
)
|
||||
|
||||
await gs_services.cancel_booking(user, club, booking_filter)
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_cancel_booking_id(
|
||||
aioresponses,
|
||||
gs_services,
|
||||
connector,
|
||||
user,
|
||||
club,
|
||||
cancellation_success_from_start,
|
||||
):
|
||||
responses.set_full_cancellation_responses(
|
||||
aioresponses, connector, cancellation_success_from_start
|
||||
)
|
||||
|
||||
await gs_services.cancel_booking_id(user, club, 65464)
|
Loading…
Add table
Add a link
Reference in a new issue