Skip to content

Commit

Permalink
Fetch GQL info from series or section depending on relations
Browse files Browse the repository at this point in the history
  • Loading branch information
matti-lamppu committed Feb 14, 2025
1 parent e37e7ef commit 79f50f9
Show file tree
Hide file tree
Showing 4 changed files with 375 additions and 118 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -18,10 +18,17 @@
from tilavarauspalvelu.integrations.keyless_entry.typing import (
PindoraReservationSeriesAccessCodeValidity,
PindoraReservationSeriesResponse,
PindoraSeasonalBookingAccessCodeValidity,
PindoraSeasonalBookingResponse,
)
from utils.date_utils import local_datetime

from tests.factories import RecurringReservationFactory, ReservationFactory
from tests.factories import (
ApplicationSectionFactory,
RecurringReservationFactory,
ReservationFactory,
ReservationUnitFactory,
)
from tests.helpers import patch_method

from .helpers import recurring_reservation_query, recurring_reservations_query
Expand Down Expand Up @@ -355,3 +362,65 @@ def test_recurring_reservations__query__pindora_info__reservation_past(graphql):
assert response.has_errors is False, response

assert response.first_query_object["pindoraInfo"] is None


@freeze_time(local_datetime(2022, 1, 1))
def test_recurring_reservations__query__pindora_info__in_application_section(graphql):
section = ApplicationSectionFactory.create()
reservation_unit = ReservationUnitFactory.create()
series = RecurringReservationFactory.create(
begin=local_datetime(2022, 1, 1, 10),
end=local_datetime(2022, 1, 1, 12),
allocated_time_slot__reservation_unit_option__application_section=section,
reservation_unit=reservation_unit,
)
ReservationFactory.create(
recurring_reservation=series,
access_type=AccessType.ACCESS_CODE,
state=ReservationStateChoice.CONFIRMED,
type=ReservationTypeChoice.NORMAL,
)

graphql.login_with_superuser()

query = pindora_query(series)

response = PindoraSeasonalBookingResponse(
access_code="12345",
access_code_keypad_url="https://keypad.test.ovaa.fi/hel/list/kannelmaen_leikkipuisto",
access_code_phone_number="+358407089833",
access_code_sms_number="+358407089834",
access_code_sms_message="a12345",
access_code_generated_at=local_datetime(2022, 1, 1),
access_code_is_active=True,
reservation_unit_code_validity=[
PindoraSeasonalBookingAccessCodeValidity(
reservation_unit_id=reservation_unit.uuid,
access_code_valid_minutes_before=10,
access_code_valid_minutes_after=5,
begin=local_datetime(2022, 1, 1, 12),
end=local_datetime(2022, 1, 1, 13),
),
],
)

with patch_method(PindoraClient.get_seasonal_booking, return_value=response):
response = graphql(query)

assert response.has_errors is False, response

assert response.first_query_object["pindoraInfo"] == {
"accessCode": "12345",
"accessCodeGeneratedAt": "2022-01-01T00:00:00+02:00",
"accessCodeIsActive": True,
"accessCodeKeypadUrl": "https://keypad.test.ovaa.fi/hel/list/kannelmaen_leikkipuisto",
"accessCodePhoneNumber": "+358407089833",
"accessCodeSmsMessage": "a12345",
"accessCodeSmsNumber": "+358407089834",
"accessCodeValidity": [
{
"accessCodeBeginsAt": "2022-01-01T11:50:00+02:00",
"accessCodeEndsAt": "2022-01-01T13:05:00+02:00",
}
],
}
234 changes: 133 additions & 101 deletions backend/tests/test_graphql_api/test_reservation/test_query.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,12 +12,20 @@
from tilavarauspalvelu.enums import AccessType, CustomerTypeChoice, ReservationStateChoice, ReservationTypeChoice
from tilavarauspalvelu.integrations.keyless_entry import PindoraClient
from tilavarauspalvelu.integrations.keyless_entry.exceptions import PindoraAPIError
from tilavarauspalvelu.integrations.keyless_entry.typing import PindoraReservationResponse
from tilavarauspalvelu.integrations.keyless_entry.typing import (
PindoraReservationResponse,
PindoraReservationSeriesAccessCodeValidity,
PindoraReservationSeriesResponse,
PindoraSeasonalBookingAccessCodeValidity,
PindoraSeasonalBookingResponse,
)
from tilavarauspalvelu.models import PersonalInfoViewLog
from utils.date_utils import local_datetime

from tests.factories import (
ApplicationSectionFactory,
PaymentOrderFactory,
RecurringReservationFactory,
ReservationFactory,
ReservationUnitFactory,
UnitFactory,
Expand Down Expand Up @@ -446,15 +454,7 @@ def pindora_response() -> PindoraReservationResponse:
)


@freeze_time(local_datetime(2022, 1, 1))
def test_reservation__query__pindora_info(graphql):
reservation = ReservationFactory.create(
access_type=AccessType.ACCESS_CODE,
state=ReservationStateChoice.CONFIRMED,
begin=local_datetime(2022, 1, 1, 12),
end=local_datetime(2022, 1, 1, 13),
)

def pindora_query(reservation: Reservation) -> str:
fields = """
pindoraInfo {
accessCode
Expand All @@ -469,7 +469,19 @@ def test_reservation__query__pindora_info(graphql):
}
"""
global_id = to_global_id("ReservationNode", reservation.pk)
query = reservation_query(fields=fields, id=global_id)
return reservation_query(fields=fields, id=global_id)


@freeze_time(local_datetime(2022, 1, 1))
def test_reservation__query__pindora_info(graphql):
reservation = ReservationFactory.create(
access_type=AccessType.ACCESS_CODE,
state=ReservationStateChoice.CONFIRMED,
begin=local_datetime(2022, 1, 1, 12),
end=local_datetime(2022, 1, 1, 13),
)

query = pindora_query(reservation)

graphql.force_login(reservation.user)

Expand Down Expand Up @@ -501,21 +513,7 @@ def test_reservation__query__pindora_info__access_code_not_active(graphql, as_re
end=local_datetime(2022, 1, 1, 13),
)

fields = """
pindoraInfo {
accessCode
accessCodeGeneratedAt
accessCodeIsActive
accessCodeKeypadUrl
accessCodePhoneNumber
accessCodeSmsNumber
accessCodeSmsMessage
accessCodeBeginsAt
accessCodeEndsAt
}
"""
global_id = to_global_id("ReservationNode", reservation.pk)
query = reservation_query(fields=fields, id=global_id)
query = pindora_query(reservation)

if as_reservee:
graphql.force_login(reservation.user)
Expand Down Expand Up @@ -546,21 +544,7 @@ def test_reservation__query__pindora_info__not_confirmed(graphql, as_reservee):
end=local_datetime(2022, 1, 1, 13),
)

fields = """
pindoraInfo {
accessCode
accessCodeGeneratedAt
accessCodeIsActive
accessCodeKeypadUrl
accessCodePhoneNumber
accessCodeSmsNumber
accessCodeSmsMessage
accessCodeBeginsAt
accessCodeEndsAt
}
"""
global_id = to_global_id("ReservationNode", reservation.pk)
query = reservation_query(fields=fields, id=global_id)
query = pindora_query(reservation)

if as_reservee:
graphql.force_login(reservation.user)
Expand All @@ -587,21 +571,7 @@ def test_reservation__query__pindora_info__access_type_not_access_code(graphql):
end=local_datetime(2022, 1, 1, 13),
)

fields = """
pindoraInfo {
accessCode
accessCodeGeneratedAt
accessCodeIsActive
accessCodeKeypadUrl
accessCodePhoneNumber
accessCodeSmsNumber
accessCodeSmsMessage
accessCodeBeginsAt
accessCodeEndsAt
}
"""
global_id = to_global_id("ReservationNode", reservation.pk)
query = reservation_query(fields=fields, id=global_id)
query = pindora_query(reservation)

graphql.force_login(reservation.user)

Expand All @@ -622,21 +592,7 @@ def test_reservation__query__pindora_info__pindora_call_fails(graphql):
end=local_datetime(2022, 1, 1, 13),
)

fields = """
pindoraInfo {
accessCode
accessCodeGeneratedAt
accessCodeIsActive
accessCodeKeypadUrl
accessCodePhoneNumber
accessCodeSmsNumber
accessCodeSmsMessage
accessCodeBeginsAt
accessCodeEndsAt
}
"""
global_id = to_global_id("ReservationNode", reservation.pk)
query = reservation_query(fields=fields, id=global_id)
query = pindora_query(reservation)

graphql.force_login(reservation.user)

Expand All @@ -657,21 +613,7 @@ def test_reservation__query__pindora_info__pindora_data_cached(graphql):
end=local_datetime(2022, 1, 1, 13),
)

fields = """
pindoraInfo {
accessCode
accessCodeGeneratedAt
accessCodeIsActive
accessCodeKeypadUrl
accessCodePhoneNumber
accessCodeSmsNumber
accessCodeSmsMessage
accessCodeBeginsAt
accessCodeEndsAt
}
"""
global_id = to_global_id("ReservationNode", reservation.pk)
query = reservation_query(fields=fields, id=global_id)
query = pindora_query(reservation)

graphql.force_login(reservation.user)

Expand Down Expand Up @@ -708,21 +650,7 @@ def test_reservation__query__pindora_info__reservation_past(graphql):
end=local_datetime(2022, 1, 1, 13),
)

fields = """
pindoraInfo {
accessCode
accessCodeGeneratedAt
accessCodeIsActive
accessCodeKeypadUrl
accessCodePhoneNumber
accessCodeSmsNumber
accessCodeSmsMessage
accessCodeBeginsAt
accessCodeEndsAt
}
"""
global_id = to_global_id("ReservationNode", reservation.pk)
query = reservation_query(fields=fields, id=global_id)
query = pindora_query(reservation)

graphql.force_login(reservation.user)

Expand All @@ -732,3 +660,107 @@ def test_reservation__query__pindora_info__reservation_past(graphql):
assert response.has_errors is False, response

assert response.first_query_object["pindoraInfo"] is None


@freeze_time(local_datetime(2022, 1, 1))
def test_reservation__query__pindora_info__in_recurring_reservation(graphql):
series = RecurringReservationFactory.create()
reservation = ReservationFactory.create(
access_type=AccessType.ACCESS_CODE,
state=ReservationStateChoice.CONFIRMED,
begin=local_datetime(2022, 1, 1, 12),
end=local_datetime(2022, 1, 1, 13),
recurring_reservation=series,
)

query = pindora_query(reservation)

graphql.force_login(reservation.user)

response = PindoraReservationSeriesResponse(
reservation_unit_id=uuid.uuid4(),
access_code="12345",
access_code_keypad_url="https://keypad.test.ovaa.fi/hel/list/kannelmaen_leikkipuisto",
access_code_phone_number="+358407089833",
access_code_sms_number="+358407089834",
access_code_sms_message="a12345",
access_code_generated_at=local_datetime(2022, 1, 1),
access_code_is_active=True,
reservation_unit_code_validity=[
PindoraReservationSeriesAccessCodeValidity(
access_code_valid_minutes_before=10,
access_code_valid_minutes_after=5,
begin=local_datetime(2022, 1, 1, 12),
end=local_datetime(2022, 1, 1, 13),
),
],
)

with patch_method(PindoraClient.get_reservation_series, return_value=response):
response = graphql(query)

assert response.has_errors is False, response

assert response.first_query_object["pindoraInfo"] == {
"accessCode": "12345",
"accessCodeIsActive": True,
"accessCodeGeneratedAt": "2022-01-01T00:00:00+02:00",
"accessCodeKeypadUrl": "https://keypad.test.ovaa.fi/hel/list/kannelmaen_leikkipuisto",
"accessCodePhoneNumber": "+358407089833",
"accessCodeSmsMessage": "a12345",
"accessCodeSmsNumber": "+358407089834",
"accessCodeBeginsAt": "2022-01-01T11:50:00+02:00",
"accessCodeEndsAt": "2022-01-01T13:05:00+02:00",
}


@freeze_time(local_datetime(2022, 1, 1))
def test_reservation__query__pindora_info__in_application_section(graphql):
section = ApplicationSectionFactory.create()
reservation = ReservationFactory.create(
access_type=AccessType.ACCESS_CODE,
state=ReservationStateChoice.CONFIRMED,
begin=local_datetime(2022, 1, 1, 12),
end=local_datetime(2022, 1, 1, 13),
recurring_reservation__allocated_time_slot__reservation_unit_option__application_section=section,
)

query = pindora_query(reservation)

graphql.force_login(reservation.user)

response = PindoraSeasonalBookingResponse(
access_code="12345",
access_code_keypad_url="https://keypad.test.ovaa.fi/hel/list/kannelmaen_leikkipuisto",
access_code_phone_number="+358407089833",
access_code_sms_number="+358407089834",
access_code_sms_message="a12345",
access_code_generated_at=local_datetime(2022, 1, 1),
access_code_is_active=True,
reservation_unit_code_validity=[
PindoraSeasonalBookingAccessCodeValidity(
reservation_unit_id=uuid.uuid4(),
access_code_valid_minutes_before=10,
access_code_valid_minutes_after=5,
begin=local_datetime(2022, 1, 1, 12),
end=local_datetime(2022, 1, 1, 13),
),
],
)

with patch_method(PindoraClient.get_seasonal_booking, return_value=response):
response = graphql(query)

assert response.has_errors is False, response

assert response.first_query_object["pindoraInfo"] == {
"accessCode": "12345",
"accessCodeIsActive": True,
"accessCodeGeneratedAt": "2022-01-01T00:00:00+02:00",
"accessCodeKeypadUrl": "https://keypad.test.ovaa.fi/hel/list/kannelmaen_leikkipuisto",
"accessCodePhoneNumber": "+358407089833",
"accessCodeSmsMessage": "a12345",
"accessCodeSmsNumber": "+358407089834",
"accessCodeBeginsAt": "2022-01-01T11:50:00+02:00",
"accessCodeEndsAt": "2022-01-01T13:05:00+02:00",
}
Loading

0 comments on commit 79f50f9

Please sign in to comment.