from pathlib import Path from unittest.mock import patch import pytest from aiohttp import ClientSession from connectors import GestionSportsConnector from tests.unit_tests import responses def test_urls(connector, club): base_url = club.booking_platform.url relative_urls = club.booking_platform.urls relative_landing_url = relative_urls.get("landing-page").path assert connector.landing_url == f"{base_url}/{relative_landing_url}" relative_login_url = relative_urls.get("login").path assert connector.login_url == f"{base_url}/{relative_login_url}" relative_booking_url = relative_urls.get("booking").path assert connector.booking_url == f"{base_url}/{relative_booking_url}" relative_user_bookings_url = relative_urls.get("user-bookings").path assert connector.user_bookings_url == f"{base_url}/{relative_user_bookings_url}" relative_cancel_url = relative_urls.get("cancellation").path assert connector.booking_cancellation_url == f"{base_url}/{relative_cancel_url}" @patch("config.get_resources_folder") def test_urls_payload_templates(mock_resources, club): path_to_resources = Path("some/path/to/resource") mock_resources.return_value = path_to_resources connector = GestionSportsConnector(club) relative_urls = club.booking_platform.urls login_payload = relative_urls.get("login").payload_template assert connector.login_template == path_to_resources / login_payload booking_payload = relative_urls.get("booking").payload_template assert connector.booking_template == path_to_resources / booking_payload user_bookings_payload = relative_urls.get("user-bookings").payload_template assert connector.user_bookings_template == path_to_resources / user_bookings_payload cancel_payload = relative_urls.get("cancellation").payload_template assert connector.booking_cancel_template == path_to_resources / cancel_payload @pytest.mark.asyncio async def test_landing_page(aioresponses, connector, landing_response): responses.make_landing_request_success(aioresponses, connector, landing_response) async with ClientSession() as session: response = await connector.land(session) assert response.status == 200 assert response.cookies.get("PHPSESSID").value == "987512" assert await response.text() == landing_response @pytest.mark.asyncio async def test_login_success(aioresponses, connector, user, login_success_response): responses.make_login_request_success( aioresponses, connector, login_success_response ) async with ClientSession() as session: response = await connector.login(session, user) assert response.status == 200 assert response.cookies.get("COOK_COMPTE").value == "e2be1" assert response.cookies.get("COOK_ID_CLUB").value == "22" assert response.cookies.get("COOK_ID_USER").value == "666" assert await response.json() == login_success_response @pytest.mark.asyncio async def test_login_failure(aioresponses, connector, user, login_failure_response): responses.make_login_request_fail(aioresponses, connector, login_failure_response) async with ClientSession() as session: response = await connector.login(session, user) assert response.status == 200 assert len(response.cookies) == 0 assert await response.json() == login_failure_response 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 async def test_get_ongoing_bookings( aioresponses, connector, user, user_bookings_get_response, user_bookings_list, ): responses.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_cancellation_request( aioresponses, connector, user_bookings_get_response, 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.cancel_booking_id(session, 123) assert await response.json() == cancellation_response @pytest.mark.asyncio async def test_cancel_booking_success( aioresponses, connector, user, cancellation_success_booking_filter, cancellation_success_from_start, ): responses.set_full_cancellation_responses( aioresponses, connector, cancellation_success_from_start ) async with ClientSession() as session: response = await connector.cancel_booking( session, cancellation_success_booking_filter ) assert await response.json() == cancellation_success_from_start[4]