Merge pull request 'Expose ticket waves on public event responses' (#66) from feat/public-ticket-waves into main
Some checks failed
lint.yml / Merge pull request 'Expose ticket waves on public event responses' (#66) from feat/public-ticket-waves into main (push) Failing after 0s
Some checks failed
lint.yml / Merge pull request 'Expose ticket waves on public event responses' (#66) from feat/public-ticket-waves into main (push) Failing after 0s
Reviewed-on: #66
This commit is contained in:
commit
26c0a5c429
2 changed files with 79 additions and 7 deletions
|
|
@ -5,6 +5,10 @@ from ..models import (
|
|||
CreateEvent,
|
||||
CreateTicket,
|
||||
EventExtra,
|
||||
PromoCode,
|
||||
PublicEvent,
|
||||
PublicEventExtra,
|
||||
TicketWave,
|
||||
effective_payment_methods,
|
||||
)
|
||||
|
||||
|
|
@ -108,3 +112,63 @@ def test_payment_methods_are_normalised_and_deduplicated():
|
|||
def test_unknown_payment_method_is_rejected():
|
||||
with pytest.raises(ValidationError):
|
||||
EventExtra(payment_methods=["cash"])
|
||||
|
||||
|
||||
# --- public projection ------------------------------------------------------
|
||||
|
||||
|
||||
def test_public_extra_exposes_waves_but_never_promo_codes():
|
||||
"""A buyer needs a wave id to choose a tier, so waves are public; promo
|
||||
codes stay organizer-only (aiolabs/events#61, v1.6.1-aio.12)."""
|
||||
organizer = EventExtra(
|
||||
promo_codes=[PromoCode(code="SECRET", discount_percent=50)],
|
||||
ticket_waves=[
|
||||
TicketWave(
|
||||
id="early",
|
||||
title="Early",
|
||||
opening_date="2030-01-01",
|
||||
closing_date="2030-02-01",
|
||||
currency="sat",
|
||||
price_per_ticket=10,
|
||||
amount_tickets=5,
|
||||
)
|
||||
],
|
||||
)
|
||||
|
||||
public = PublicEventExtra(**organizer.dict())
|
||||
|
||||
assert [wave.id for wave in public.ticket_waves] == ["early"]
|
||||
assert public.ticket_waves[0].price_per_ticket == 10
|
||||
assert not hasattr(public, "promo_codes")
|
||||
assert "promo_codes" not in public.dict()
|
||||
|
||||
|
||||
def test_public_event_response_carries_waves():
|
||||
"""End of the chain: what `GET /events/{id}` actually serialises."""
|
||||
wave = TicketWave(
|
||||
id="regular",
|
||||
title="Regular",
|
||||
opening_date="2030-01-01",
|
||||
closing_date="2030-02-01",
|
||||
currency="sat",
|
||||
price_per_ticket=25,
|
||||
amount_tickets=40,
|
||||
)
|
||||
organizer_extra = EventExtra(
|
||||
ticket_waves=[wave], promo_codes=[PromoCode(code="SECRET")]
|
||||
)
|
||||
public = PublicEvent(
|
||||
id="evt",
|
||||
name="Test",
|
||||
info="",
|
||||
canceled=False,
|
||||
event_start_date="2030-01-01",
|
||||
currency="sat",
|
||||
price_per_ticket=25,
|
||||
banner=None,
|
||||
extra=PublicEventExtra(**organizer_extra.dict()),
|
||||
)
|
||||
body = public.dict()
|
||||
|
||||
assert [w["id"] for w in body["extra"]["ticket_waves"]] == ["regular"]
|
||||
assert "promo_codes" not in body["extra"]
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue