Completed
Push — main ( e8e40e...cd54d0 )
by Jochen
12:59 queued 09:31
created

tests.integration.services.ticketing.test_creation   A

Complexity

Total Complexity 9

Size/Duplication

Total Lines 92
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
eloc 54
dl 0
loc 92
rs 10
c 0
b 0
f 0
wmc 9

5 Functions

Rating   Name   Duplication   Size   Complexity  
A test_create_ticket() 0 7 1
A test_create_tickets() 0 12 3
A test_create_ticket_with_existing_code() 0 18 2
A test_create_tickets_with_clashing_generated_codes() 0 13 2
A assert_created_ticket() 0 16 1
1
"""
2
:Copyright: 2006-2020 Jochen Kupperschmidt
3
:License: Modified BSD, see LICENSE for details.
4
"""
5
6
from unittest.mock import patch
7
8
from pytest import raises
9
10
from byceps.services.ticketing import (
11
    event_service,
12
    ticket_creation_service,
13
    ticket_service,
14
)
15
16
17
def test_create_ticket(admin_app, category, ticket_owner):
18
    ticket = ticket_creation_service.create_ticket(category.id, ticket_owner.id)
19
20
    assert_created_ticket(ticket, category.id, ticket_owner.id)
21
22
    # Clean up.
23
    ticket_service.delete_ticket(ticket.id)
24
25
26
@patch(
27
    'byceps.services.ticketing.ticket_creation_service._generate_ticket_code'
28
)
29
def test_create_ticket_with_existing_code(
30
    generate_ticket_code_mock, admin_app, category, ticket_owner
31
):
32
    generate_ticket_code_mock.return_value = 'TAKEN'
33
34
    existing_ticket = ticket_creation_service.create_ticket(
35
        category.id, ticket_owner.id
36
    )
37
    assert existing_ticket.code == 'TAKEN'
38
39
    with raises(ticket_creation_service.TicketCreationFailedWithConflict):
40
        ticket_creation_service.create_ticket(category.id, ticket_owner.id)
41
42
    # Clean up.
43
    ticket_service.delete_ticket(existing_ticket.id)
44
45
46
def test_create_tickets(admin_app, category, ticket_owner):
47
    quantity = 3
48
    tickets = ticket_creation_service.create_tickets(
49
        category.id, ticket_owner.id, quantity
50
    )
51
52
    for ticket in tickets:
53
        assert_created_ticket(ticket, category.id, ticket_owner.id)
54
55
    # Clean up.
56
    for ticket in tickets:
57
        ticket_service.delete_ticket(ticket.id)
58
59
60
@patch(
61
    'byceps.services.ticketing.ticket_creation_service._generate_ticket_code'
62
)
63
def test_create_tickets_with_clashing_generated_codes(
64
    generate_ticket_code_mock, admin_app, category, ticket_owner
65
):
66
    generate_ticket_code_mock.return_value = 'CLASH'
67
68
    quantity = 3
69
70
    with raises(ticket_creation_service.TicketCodeGenerationFailed):
71
        tickets = ticket_creation_service.create_tickets(
72
            category.id, ticket_owner.id, quantity
73
        )
74
75
76
def assert_created_ticket(ticket, expected_category_id, expected_owner_id):
77
    assert ticket is not None
78
    assert ticket.created_at is not None
79
    assert ticket.code is not None
80
    assert ticket.bundle_id is None
81
    assert ticket.category_id == expected_category_id
82
    assert ticket.owned_by_id == expected_owner_id
83
    assert ticket.seat_managed_by_id is None
84
    assert ticket.user_managed_by_id is None
85
    assert ticket.occupied_seat_id is None
86
    assert ticket.used_by_id is None
87
    assert not ticket.revoked
88
    assert not ticket.user_checked_in
89
90
    events = event_service.get_events_for_ticket(ticket.id)
91
    assert len(events) == 0
92