Skip to content

Commit 4d0faf7

Browse files
committed
Added query counts to project game API tests.
1 parent 4328153 commit 4d0faf7

3 files changed

Lines changed: 425 additions & 52 deletions

File tree

project_manager/packages/api/tests/test_game_views.py

Lines changed: 141 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
# =============================================================================
22
# IMPORTS
33
# =============================================================================
4+
# Django
5+
from django.db import connection, reset_queries
6+
from django.test import override_settings
7+
48
# Third Party Django
59
from rest_framework import status
610
from rest_framework.reverse import reverse
@@ -29,17 +33,24 @@
2933
class PackageGameViewSetTestCase(APITestCase):
3034

3135
contributor = detail_api = game_1 = game_2 = list_api = owner = None
32-
package = package_game_1 = None
36+
package_1 = package_2 = package_game_1 = None
3337

3438
@classmethod
3539
def setUpTestData(cls):
3640
cls.owner = ForumUserFactory()
37-
cls.package = PackageFactory(
41+
cls.package_1 = PackageFactory(
42+
owner=cls.owner,
43+
)
44+
cls.package_2 = PackageFactory(
3845
owner=cls.owner,
3946
)
4047
cls.contributor = ForumUserFactory()
4148
PackageContributorFactory(
42-
package=cls.package,
49+
package=cls.package_1,
50+
user=cls.contributor,
51+
)
52+
PackageContributorFactory(
53+
package=cls.package_2,
4354
user=cls.contributor,
4455
)
4556
cls.game_1 = GameFactory(
@@ -63,11 +74,11 @@ def setUpTestData(cls):
6374
icon='icon4.jpg',
6475
)
6576
cls.package_game_1 = PackageGameFactory(
66-
package=cls.package,
77+
package=cls.package_1,
6778
game=cls.game_1,
6879
)
6980
cls.package_game_2 = PackageGameFactory(
70-
package=cls.package,
81+
package=cls.package_1,
7182
game=cls.game_2,
7283
)
7384
cls.regular_user = ForumUserFactory()
@@ -76,13 +87,13 @@ def setUpTestData(cls):
7687
cls.list_path = reverse(
7788
viewname=cls.list_api,
7889
kwargs={
79-
'package_slug': cls.package.slug,
90+
'package_slug': cls.package_1.slug,
8091
},
8192
)
8293
cls.detail_path = reverse(
8394
viewname=cls.detail_api,
8495
kwargs={
85-
'package_slug': cls.package.slug,
96+
'package_slug': cls.package_1.slug,
8697
'pk': cls.package_game_1.id,
8798
},
8899
)
@@ -120,9 +131,14 @@ def test_http_method_names(self):
120131
tuple2=('get', 'post', 'delete', 'options'),
121132
)
122133

134+
@override_settings(DEBUG=True)
123135
def test_get_list(self):
124136
# Verify that non-logged-in user can see results but not 'id'
125137
response = self.client.get(path=self.list_path)
138+
self.assertEqual(
139+
first=len(connection.queries),
140+
second=4,
141+
)
126142
self.assertEqual(
127143
first=response.status_code,
128144
second=status.HTTP_200_OK,
@@ -143,8 +159,13 @@ def test_get_list(self):
143159
)
144160

145161
# Verify that regular user can see results but not 'id'
162+
reset_queries()
146163
self.client.force_login(self.regular_user.user)
147164
response = self.client.get(path=self.list_path)
165+
self.assertEqual(
166+
first=len(connection.queries),
167+
second=6,
168+
)
148169
self.assertEqual(
149170
first=response.status_code,
150171
second=status.HTTP_200_OK,
@@ -163,8 +184,13 @@ def test_get_list(self):
163184
)
164185

165186
# Verify that contributors can see results AND 'id'
187+
reset_queries()
166188
self.client.force_login(self.contributor.user)
167189
response = self.client.get(path=self.list_path)
190+
self.assertEqual(
191+
first=len(connection.queries),
192+
second=6,
193+
)
168194
self.assertEqual(
169195
first=response.status_code,
170196
second=status.HTTP_200_OK,
@@ -184,8 +210,13 @@ def test_get_list(self):
184210
)
185211

186212
# Verify that the owner can see results AND 'id'
213+
reset_queries()
187214
self.client.force_login(self.owner.user)
188215
response = self.client.get(path=self.list_path)
216+
self.assertEqual(
217+
first=len(connection.queries),
218+
second=5,
219+
)
189220
self.assertEqual(
190221
first=response.status_code,
191222
second=status.HTTP_200_OK,
@@ -204,6 +235,70 @@ def test_get_list(self):
204235
},
205236
)
206237

238+
@override_settings(DEBUG=True)
239+
def test_get_list_empty(self):
240+
list_path = reverse(
241+
viewname=self.list_api,
242+
kwargs={
243+
'package_slug': self.package_2.slug,
244+
},
245+
)
246+
247+
# Verify that non-logged-in user can see results but not 'id'
248+
response = self.client.get(path=list_path)
249+
self.assertEqual(
250+
first=len(connection.queries),
251+
second=2,
252+
)
253+
self.assertEqual(
254+
first=response.status_code,
255+
second=status.HTTP_200_OK,
256+
)
257+
self.assertEqual(first=response.json()['count'], second=0)
258+
259+
# Verify that regular user can see results but not 'id'
260+
reset_queries()
261+
self.client.force_login(self.regular_user.user)
262+
response = self.client.get(path=list_path)
263+
self.assertEqual(
264+
first=len(connection.queries),
265+
second=4,
266+
)
267+
self.assertEqual(
268+
first=response.status_code,
269+
second=status.HTTP_200_OK,
270+
)
271+
self.assertEqual(first=response.json()['count'], second=0)
272+
273+
# Verify that contributors can see results AND 'id'
274+
reset_queries()
275+
self.client.force_login(self.contributor.user)
276+
response = self.client.get(path=list_path)
277+
self.assertEqual(
278+
first=len(connection.queries),
279+
second=4,
280+
)
281+
self.assertEqual(
282+
first=response.status_code,
283+
second=status.HTTP_200_OK,
284+
)
285+
self.assertEqual(first=response.json()['count'], second=0)
286+
287+
# Verify that the owner can see results AND 'id'
288+
reset_queries()
289+
self.client.force_login(self.owner.user)
290+
response = self.client.get(path=list_path)
291+
self.assertEqual(
292+
first=len(connection.queries),
293+
second=4,
294+
)
295+
self.assertEqual(
296+
first=response.status_code,
297+
second=status.HTTP_200_OK,
298+
)
299+
self.assertEqual(first=response.json()['count'], second=0)
300+
301+
@override_settings(DEBUG=True)
207302
def test_get_list_failure(self):
208303
response = self.client.get(
209304
path=reverse(
@@ -213,6 +308,10 @@ def test_get_list_failure(self):
213308
}
214309
),
215310
)
311+
self.assertEqual(
312+
first=len(connection.queries),
313+
second=1,
314+
)
216315
self.assertEqual(
217316
first=response.status_code,
218317
second=status.HTTP_404_NOT_FOUND,
@@ -222,25 +321,40 @@ def test_get_list_failure(self):
222321
d2={'detail': 'Invalid package_slug.'},
223322
)
224323

324+
@override_settings(DEBUG=True)
225325
def test_get_details(self):
226326
# Verify that non-logged-in user cannot see details
227327
response = self.client.get(path=self.detail_path)
328+
self.assertEqual(
329+
first=len(connection.queries),
330+
second=3,
331+
)
228332
self.assertEqual(
229333
first=response.status_code,
230334
second=status.HTTP_403_FORBIDDEN,
231335
)
232336

233337
# Verify that regular user cannot see details
338+
reset_queries()
234339
self.client.force_login(self.regular_user.user)
235340
response = self.client.get(path=self.detail_path)
341+
self.assertEqual(
342+
first=len(connection.queries),
343+
second=5,
344+
)
236345
self.assertEqual(
237346
first=response.status_code,
238347
second=status.HTTP_403_FORBIDDEN,
239348
)
240349

241350
# Verify that contributors can see details
351+
reset_queries()
242352
self.client.force_login(self.contributor.user)
243353
response = self.client.get(path=self.detail_path)
354+
self.assertEqual(
355+
first=len(connection.queries),
356+
second=5,
357+
)
244358
request = response.wsgi_request
245359
icon = f'{request.scheme}://{request.get_host()}{self.game_1.icon.url}'
246360
self.assertEqual(
@@ -260,8 +374,13 @@ def test_get_details(self):
260374
)
261375

262376
# Verify that the owner can see details
377+
reset_queries()
263378
self.client.force_login(self.owner.user)
264379
response = self.client.get(path=self.detail_path)
380+
self.assertEqual(
381+
first=len(connection.queries),
382+
second=5,
383+
)
265384
self.assertEqual(
266385
first=response.status_code,
267386
second=status.HTTP_200_OK,
@@ -278,17 +397,22 @@ def test_get_details(self):
278397
},
279398
)
280399

400+
@override_settings(DEBUG=True)
281401
def test_get_detail_failure(self):
282402
self.client.force_login(self.owner.user)
283403
response = self.client.get(
284404
path=reverse(
285405
viewname=self.detail_api,
286406
kwargs={
287-
'package_slug': self.package.slug,
407+
'package_slug': self.package_1.slug,
288408
'pk': 'invalid',
289409
},
290410
),
291411
)
412+
self.assertEqual(
413+
first=len(connection.queries),
414+
second=3,
415+
)
292416
self.assertEqual(
293417
first=response.status_code,
294418
second=status.HTTP_404_NOT_FOUND,
@@ -404,7 +528,7 @@ def test_delete(self):
404528
path=reverse(
405529
viewname=self.detail_api,
406530
kwargs={
407-
'package_slug': self.package.slug,
531+
'package_slug': self.package_1.slug,
408532
'pk': self.package_game_2.id,
409533
},
410534
),
@@ -421,7 +545,7 @@ def test_options(self):
421545
content = response.json()
422546
self.assertEqual(
423547
first=content['name'],
424-
second=f'{self.package} - Game',
548+
second=f'{self.package_1} - Game',
425549
)
426550
self.assertNotIn(member='actions', container=content)
427551

@@ -432,7 +556,7 @@ def test_options(self):
432556
content = response.json()
433557
self.assertEqual(
434558
first=content['name'],
435-
second=f'{self.package} - Game',
559+
second=f'{self.package_1} - Game',
436560
)
437561
self.assertNotIn(member='actions', container=content)
438562

@@ -443,7 +567,7 @@ def test_options(self):
443567
content = response.json()
444568
self.assertEqual(
445569
first=content['name'],
446-
second=f'{self.package} - Game',
570+
second=f'{self.package_1} - Game',
447571
)
448572
self.assertIn(member='actions', container=content)
449573
self.assertSetEqual(set1=set(content['actions']), set2={'POST'})
@@ -455,7 +579,7 @@ def test_options(self):
455579
content = response.json()
456580
self.assertEqual(
457581
first=content['name'],
458-
second=f'{self.package} - Game',
582+
second=f'{self.package_1} - Game',
459583
)
460584
self.assertIn(member='actions', container=content)
461585
self.assertSetEqual(set1=set(content['actions']), set2={'POST'})
@@ -467,7 +591,7 @@ def test_options_object(self):
467591
content = response.json()
468592
self.assertEqual(
469593
first=content['name'],
470-
second=f'{self.package} - Game',
594+
second=f'{self.package_1} - Game',
471595
)
472596
self.assertNotIn(member='actions', container=content)
473597

@@ -478,7 +602,7 @@ def test_options_object(self):
478602
content = response.json()
479603
self.assertEqual(
480604
first=content['name'],
481-
second=f'{self.package} - Game',
605+
second=f'{self.package_1} - Game',
482606
)
483607
self.assertNotIn(member='actions', container=content)
484608

@@ -489,7 +613,7 @@ def test_options_object(self):
489613
content = response.json()
490614
self.assertEqual(
491615
first=content['name'],
492-
second=f'{self.package} - Game',
616+
second=f'{self.package_1} - Game',
493617
)
494618
self.assertIn(member='actions', container=content)
495619
self.assertSetEqual(set1=set(content['actions']), set2={'DELETE'})
@@ -501,7 +625,7 @@ def test_options_object(self):
501625
content = response.json()
502626
self.assertEqual(
503627
first=content['name'],
504-
second=f'{self.package} - Game',
628+
second=f'{self.package_1} - Game',
505629
)
506630
self.assertIn(member='actions', container=content)
507631
self.assertSetEqual(set1=set(content['actions']), set2={'DELETE'})

0 commit comments

Comments
 (0)