GitHub Access Token became invalid

It seems like the GitHub access token used for retrieving details about this repository from GitHub became invalid. This might prevent certain types of inspections from being run (in particular, everything related to pull requests).
Please ask an admin of your repository to re-new the access token on this website.
Completed
Pull Request — develop (#307)
by
unknown
46s
created

test_match_in_same_division_inverted()   C

Complexity

Conditions 13

Size

Total Lines 20

Duplication

Lines 20
Ratio 100 %

Importance

Changes 0
Metric Value
cc 13
dl 20
loc 20
rs 5.2936
c 0
b 0
f 0

How to fix   Complexity   

Complexity

Complex classes like test_match_in_same_division_inverted() often do a lot of different things. To break such a class down, we need to identify a cohesive component within that class. A common approach to find such a component is to look for fields/methods that share the same prefixes, or suffixes.

Once you have determined the fields that belong together, you can apply the Extract Class refactoring. If the component makes sense as a sub-class, Extract Subclass is also a candidate, and is often faster.

1
# coding=utf-8
2
from unittest.mock import MagicMock, Mock
3
import pytest
4
from server.stats.division_service import *
5
from tests import CoroMock
6
7
8
class MockDivisionAccessor(DivisionAccessor):
9
    def __init__(self):
10
        self.update_player = CoroMock()
11
        self.add_player = CoroMock()
12
        self._divisions = [Division(1, "League 1 - Division A", 1, 10.0),
13
                           Division(2, "League 1 - Division B", 1, 30.0),
14
                           Division(3, "League 1 - Division C", 1, 50.0),
15
                           Division(4, "League 2 - Division D", 2, 20.0),
16
                           Division(5, "League 2 - Division E", 2, 60.0),
17
                           Division(6, "League 2 - Division F", 2, 100.0),
18
                           Division(7, "League 3 - Division D", 3, 100.0),
19
                           Division(8, "League 3 - Division E", 3, 200.0),
20
                           Division(9, "League 3 - Division F", 3, 9999.0)]
21
22
        self._players = [PlayerDivisionInfo(1, 1, 9.5),
23
                         PlayerDivisionInfo(2, 1, 49.5),
24
                         PlayerDivisionInfo(3, 2, 0.0),
25
                         PlayerDivisionInfo(4, 3, 10.0)]
26
27
    async def get_player_infos(self, season: int) -> List['PlayerDivisionInfo']:
28
        return self._players
29
30
    async def get_divisions(self) -> List['Division']:
31
        return self._divisions
32
33
    async def update_player(self, player: 'PlayerDivisionInfo') -> None:
34 View Code Duplication
        pass
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated in your project.
Loading history...
35
36
    async def add_player(self, player: 'PlayerDivisionInfo') -> None:
37
        pass
38
39
40
@pytest.fixture()
41
def sample_players() -> List[PlayerDivisionInfo]:
42
    return [PlayerDivisionInfo(1, 1, 9.5),
43
            PlayerDivisionInfo(2, 1, 49.5),
44
            PlayerDivisionInfo(3, 2, 0.0),
45
            PlayerDivisionInfo(4, 3, 10.0)]
46
47
48
@pytest.fixture()
49
def division_service() -> DivisionService:
50
    accessor = Mock()
51
    accessor.get_divisions = CoroMock()
52
53
    return DivisionService(MockDivisionAccessor(), 1)
54
55
async def async_assert_player_division(division_service: DivisionService, player_id: int, division_id: int):
56 View Code Duplication
    assert (await division_service.get_player_division(player_id)).id == division_id
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated in your project.
Loading history...
57
58
59
@pytest.mark.asyncio
60
async def test_match_in_same_division(division_service):
61
    await division_service._get_players()  # required inits for asserts before real life usage
62
63
    assert division_service._players[1].league == 1
64
    assert division_service._players[1].score == 9.5
65
    await async_assert_player_division(division_service, 1, 1)
66
    assert division_service._players[2].league == 1
67
    assert division_service._players[2].score == 49.5
68
    await async_assert_player_division(division_service, 2, 3)
69
70
    await division_service.post_result(1, 2, 1)
71
72
    division_service.accessor.add_player.assert_not_called()
73
    division_service.accessor.update_player.assert_any_call(division_service._players[1])
74
    division_service.accessor.update_player.assert_any_call(division_service._players[2])
75
76
    assert division_service._players[1].league == 1
77
    assert division_service._players[1].score == 10.5
78 View Code Duplication
    await async_assert_player_division(division_service, 1, 2)
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated in your project.
Loading history...
79
    assert division_service._players[2].league == 1
80
    assert division_service._players[2].score == 49.0
81
    await async_assert_player_division(division_service, 2, 3)
82
83
84
@pytest.mark.asyncio
85
async def test_match_in_same_division_inverted(division_service):
86
    await division_service._get_players()  # required inits for asserts before real life usage
87
88
    assert division_service._players[1].league == 1
89
    assert division_service._players[1].score == 9.5
90
    await async_assert_player_division(division_service, 1, 1)
91
    assert division_service._players[2].league == 1
92
    assert division_service._players[2].score == 49.5
93
    await async_assert_player_division(division_service, 2, 3)
94
95
    await division_service.post_result(2, 1, 2)
96
97
    division_service.accessor.add_player.assert_not_called()
98
    division_service.accessor.update_player.assert_any_call(division_service._players[1])
99
    division_service.accessor.update_player.assert_any_call(division_service._players[2])
100 View Code Duplication
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated in your project.
Loading history...
101
    assert division_service._players[1].league == 1
102
    assert division_service._players[1].score == 10.5
103
    await async_assert_player_division(division_service, 1, 2)
104
    assert division_service._players[2].league == 1
105
    assert division_service._players[2].score == 49.0
106
    await async_assert_player_division(division_service, 2, 3)
107
108
109
@pytest.mark.asyncio
110
async def test_match_winner_ascends_league(division_service):
111
    await division_service._get_players()  # required inits for asserts before real life usage
112
113
    assert division_service._players[1].league == 1
114
    assert division_service._players[1].score == 9.5
115
    await async_assert_player_division(division_service, 1, 1)
116
    assert division_service._players[2].league == 1
117
    assert division_service._players[2].score == 49.5
118 View Code Duplication
    await async_assert_player_division(division_service, 2, 3)
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated in your project.
Loading history...
119
120
    await division_service.post_result(2, 1, 1)
121
122
    division_service.accessor.add_player.assert_not_called()
123
    division_service.accessor.update_player.assert_any_call(division_service._players[1])
124
    division_service.accessor.update_player.assert_any_call(division_service._players[2])
125
126
    assert division_service._players[1].league == 1
127
    assert division_service._players[1].score == 9.0
128
    await async_assert_player_division(division_service, 1, 1)
129
    assert division_service._players[2].league == 2
130
    assert division_service._players[2].score == 0.0
131
    await async_assert_player_division(division_service, 2, 4)
132
133
134
@pytest.mark.asyncio
135
async def test_do_not_fall_below_0(division_service):
136
    await division_service._get_players()  # required inits for asserts before real life usage
137
138
    assert division_service._players[1].league == 1
139
    assert division_service._players[1].score == 9.5
140
    assert division_service._players[3].league == 2
141
    assert division_service._players[3].score == 0.0
142
143
    await division_service.post_result(1, 3, 1)
144
145
    division_service.accessor.add_player.assert_not_called()
146
    division_service.accessor.update_player.assert_any_call(division_service._players[1])
147
    division_service.accessor.update_player.assert_any_call(division_service._players[3])
148
149
    assert division_service._players[1].league == 1
150
    assert division_service._players[1].score == 11.0
151
    assert division_service._players[3].league == 2
152
    assert division_service._players[3].score == 0.0
153
154
155
@pytest.mark.asyncio
156
async def test_gain_loss_winner_inferior(division_service):
157
    await division_service._get_players()  # required inits for asserts before real life usage
158
159
    division_service._players[3].score = 11.0
160
161
    assert division_service._players[1].league == 1
162
    assert division_service._players[1].score == 9.5
163
    assert division_service._players[3].league == 2
164
    assert division_service._players[3].score == 11.0
165
166
    await division_service.post_result(1, 3, 1)
167
168
    division_service.accessor.add_player.assert_not_called()
169
    division_service.accessor.update_player.assert_any_call(division_service._players[1])
170
    division_service.accessor.update_player.assert_any_call(division_service._players[3])
171
172
    assert division_service._players[1].league == 1
173 View Code Duplication
    assert division_service._players[1].score == 11.0
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated in your project.
Loading history...
174
    assert division_service._players[3].league == 2
175
    assert division_service._players[3].score == 10.0
176
177
178
@pytest.mark.asyncio
179
async def test_gain_loss_winner_superior(division_service):
180
    await division_service._get_players()  # required inits for asserts before real life usage
181
182
    division_service._players[3].score = 11.0
183
184
    assert division_service._players[1].league == 1
185
    assert division_service._players[1].score == 9.5
186
    assert division_service._players[3].league == 2
187
    assert division_service._players[3].score == 11.0
188
189
    await division_service.post_result(1, 3, 2)
190
191
    division_service.accessor.add_player.assert_not_called()
192
    division_service.accessor.update_player.assert_any_call(division_service._players[1])
193
    division_service.accessor.update_player.assert_any_call(division_service._players[3])
194
195
    assert division_service._players[1].league == 1
196
    assert division_service._players[1].score == 9.0
197
    assert division_service._players[3].league == 2
198
    assert division_service._players[3].score == 11.5
199
200
201
@pytest.mark.asyncio
202
async def test_new_player(division_service):
203
    await division_service._get_players()  # required inits for asserts before real life usage
204
205
    assert 98 not in division_service._players
206
    assert 99 not in division_service._players
207
208
    await division_service.post_result(98, 99, 2)
209
210
    assert division_service.accessor.add_player.call_count == 2
211
    assert division_service.accessor.update_player.call_count == 2
212
213
    assert division_service._players[98].league == 1
214
    assert division_service._players[98].score == 0.0
215
    assert division_service._players[99].league == 1
216
    assert division_service._players[99].score == 1.0
217
218
219
@pytest.mark.asyncio
220
async def test_draw(division_service):
221
    await division_service._get_players()  # required inits for asserts before real life usage
222
223
    assert division_service._players[1].league == 1
224
    assert division_service._players[1].score == 9.5
225
    await async_assert_player_division(division_service, 1, 1)
226
    assert division_service._players[2].league == 1
227
    assert division_service._players[2].score == 49.5
228
    await async_assert_player_division(division_service, 2, 3)
229
230
    await division_service.post_result(1, 2, 0)
231
232
    division_service.accessor.add_player.assert_not_called()
233
    division_service.accessor.update_player.assert_any_call(division_service._players[1])
234
    division_service.accessor.update_player.assert_any_call(division_service._players[2])
235
236
    assert division_service._players[1].league == 1
237
    assert division_service._players[1].score == 9.5
238
    await async_assert_player_division(division_service, 1, 1)
239
    assert division_service._players[2].league == 1
240
    assert division_service._players[2].score == 49.5
241
    await async_assert_player_division(division_service, 2, 3)
242