Coverage for backend/tests/test_game.py: 100%
20 statements
« prev ^ index » next coverage.py v7.6.12, created at 2025-04-17 17:55 +0000
« prev ^ index » next coverage.py v7.6.12, created at 2025-04-17 17:55 +0000
1import pytest
3from backend.game import GameLoop
4from backend.game_state import Lobby
5from backend.models import Burger, Drink, Order, Side
8@pytest.mark.parametrize(
9 ["correct_order", "inp_order", "exp"],
10 [
11 pytest.param(
12 Order(burger=Burger(ingredients=["a", "b"]), side=None, drink=None),
13 Order(burger=Burger(ingredients=["a", "b"]), side=None, drink=None),
14 500,
15 id="correct burger only",
16 ),
17 pytest.param(
18 Order(burger=Burger(ingredients=["a", "b"]), side=Side(table_state="fries"), drink=None),
19 Order(burger=Burger(ingredients=["a", "b"]), side=Side(table_state="fries"), drink=None),
20 800,
21 id="correct burger and side",
22 ),
23 pytest.param(
24 Order(
25 burger=Burger(ingredients=["a", "b"]),
26 side=Side(table_state="fries"),
27 drink=Drink(color="blue", size="M", fill=100),
28 ),
29 Order(
30 burger=Burger(ingredients=["a", "b"]),
31 side=Side(table_state="fries"),
32 drink=Drink(color="blue", size="M", fill=100),
33 ),
34 1200,
35 id="correct burger, side, and drink",
36 ),
37 pytest.param(
38 Order(
39 burger=Burger(ingredients=["a"]),
40 side=None,
41 drink=None,
42 ),
43 Order(
44 burger=Burger(ingredients=[]),
45 side=None,
46 drink=None,
47 ),
48 300,
49 id="incorrect burger",
50 ),
51 pytest.param(
52 Order(
53 burger=Burger(ingredients=["a", "b"]),
54 side=None,
55 drink=None,
56 ),
57 Order(
58 burger=None,
59 side=None,
60 drink=None,
61 ),
62 300,
63 id="missing burger",
64 ),
65 pytest.param(
66 Order(
67 burger=Burger(ingredients=["a", "b"]),
68 side=Side(table_state="fries"),
69 drink=None,
70 ),
71 Order(
72 burger=Burger(ingredients=["a", "b"]),
73 side=None,
74 drink=None,
75 ),
76 600,
77 id="correct burger and missing side",
78 ),
79 ],
80)
81def test_grade_order(correct_order: Order, inp_order: Order, exp: float) -> None:
82 """Test grade order."""
83 game_loop = GameLoop(lobby=Lobby(code=("Lettuce", "Tomato", "Onion")))
84 game_loop.order = correct_order
86 out = game_loop.grade_order(inp_order)
88 assert exp == out
91@pytest.mark.parametrize(
92 ["correct_color", "inp_color", "color_score"],
93 [
94 ["blue", "orange", 0],
95 ["blue", "blue", 50],
96 ],
97)
98@pytest.mark.parametrize(
99 ["correct_size", "inp_size", "size_score"],
100 [
101 ["M", "L", 0],
102 ["M", "M", 50],
103 ],
104)
105@pytest.mark.parametrize(
106 "inp_fill",
107 range(100 + 1),
108)
109def test_grade_order_drink(
110 correct_color: str,
111 inp_color: str,
112 color_score: float,
113 correct_size: str,
114 inp_size: str,
115 size_score: float,
116 inp_fill: float,
117) -> None:
118 """Grade order test for drinks specifically to take advantage of parameter matrix."""
119 game_loop = GameLoop(lobby=Lobby(("Lettuce", "Tomato", "Onion")))
120 game_loop.order = Order(
121 burger=Burger(ingredients=["a", "b"]),
122 side=Side(table_state="fries"),
123 drink=Drink(color=correct_color, size=correct_size, fill=100),
124 )
126 inp_order = Order(
127 burger=Burger(ingredients=["a", "b"]),
128 side=Side(table_state="fries"),
129 drink=Drink(color=inp_color, size=inp_size, fill=inp_fill),
130 )
131 fill_score = int((1 - abs(1 - inp_fill / 100)) ** 0.5 * 100)
133 out = game_loop.grade_order(inp_order)
135 assert 1000 + color_score + size_score + fill_score == out