openbackloggery/collection/games/tests/test_game.py

83 lines
2.8 KiB
Python

from django.test import TestCase
from games.models import Game, Platform
class GameTest(TestCase):
"""
Game Model
"""
def setUp(self):
self.platform = Platform.objects.create(name='BestPlatform4Ever')
Game.objects.create(
name='Deponia',
playing=True,
collection=self.platform,
status=Game.EXCLUDED)
Game.objects.create(
name='Aladdin', playing=True, collection=self.platform)
Game.objects.create(
name='Persona 5', playing=True, collection=self.platform)
Game.objects.create(
name='The Witcher III',
playing=False,
collection=self.platform,
wish=True)
self.index_url = '/games/'
def test_game_are_sorted_by_playing_and_name(self):
"""
Games should be sorted by playing state (playing should be True first)
then by name in alphabetical order.
"""
games = list(Game.objects.all().values_list('name', flat=True))
sorted_games = list(Game.objects.all().order_by(
'-playing', 'name').values_list('name', flat=True))
self.assertEqual(games, sorted_games)
def test_index(self):
"""
Context gives 'playing_games'.
Context gives 'last_timelines'.
"""
res = self.client.get(self.index_url)
self.assertEqual(res.status_code, 200)
self.assertTrue('playing_games' in res.context)
self.assertTrue('last_timelines' in res.context)
self.assertTrue('object_list' in res.context)
def test_index_queryset(self):
"""
Queryset excludes wishlist games.
Queryset excludes games that have status EXCLUDED.
Queryset is sorted by name.
"""
res = self.client.get(self.index_url)
games = res.context.get('object_list')
for game in games:
self.assertFalse(game.wish)
self.assertTrue(game.status != Game.EXCLUDED)
sorted_games = list(games.order_by('name'))
self.assertEqual([x.name for x in games], [s.name for s in sorted_games])
def test_index_playing_games(self):
"""
'playing_games' contains games that have playing=True.
"""
res = self.client.get(self.index_url)
playing_games = res.context.get('playing_games')
for game in playing_games:
self.assertTrue(game.playing)
def test_index_last_timelines(self):
"""
'last_timelines' only have 5 items.
'last_timelines' have NO games with status EXCLUDED.
"""
res = self.client.get(self.index_url)
games = res.context.get('last_timelines')
self.assertEqual(len(games), 5)
for game in games:
self.assertTrue(game.status != Game.EXCLUDED)