diff --git a/events/tests.py b/events/tests.py index 4ed33df..7294e95 100644 --- a/events/tests.py +++ b/events/tests.py @@ -1,112 +1,80 @@ -from django.test import TestCase -from events.models import Player, Event, Availability, Team, Positioning -import datetime -import pytz -# Create your tests here. +from django.test import TestCase, Client +from django.test.utils import setup_test_environment +from django.urls import reverse +from .models import Event +from datetime import datetime +FIXTURES = ['blaseball'] -class BenchcoachTestCase(TestCase): - def setUp(self): - for first_name, last_name, jersey_number in [ - ("Rush", "Valenzuela", 1), - ("Baby", "Triumphant", 2) - ]: - Player.objects.create(first_name=first_name, last_name=last_name, jersey_number=jersey_number) +class TestEventModel(TestCase): + fixtures = FIXTURES - for name in ["Firefighters", "Garages"]: - Team.objects.create(name=name) + def test_query_event(self): + """ + Return the desired event + """ + event = Event.objects.get(id=1) + self.assertEqual("Chicago Firefighters", event.away_event.name) + self.assertEqual("Dallas Steaks", event.home_event.name) + self.assertEqual('George Fourman Stadium', event.venue.name) + self.assertEqual(datetime( + year=2020, + month=8, + day=24, + hour=16, + minute=0, + second=1), event.start) - for start, home_team_id, away_team_id in [ - (datetime.datetime(2020, 1, 2, 12, 0), 1, 2), # id = 1 - (datetime.datetime(2020, 1, 3, 12, 0), 2, 1), # id = 2 - (datetime.datetime(2020, 1, 4, 12, 0), 2, 1) # id = 3 - ]: - Event.objects.create(start=start, home_team_id=home_team_id, away_team_id=away_team_id) +class TestEventViews(TestCase): + fixtures = FIXTURES - for event_id in [ - 1 - ]: - for player_id, available in [ - (1,"Yes"), - (2,"No") - ]: - Availability.objects.create(event_id=event_id, player_id=player_id, available=available) + def test_event_list(self): + response = self.client.get(reverse('schedule')) + self.assertEqual(200, response.status_code) - for event_id in [ - 1 - ]: - for player_id, position in [ - (1, "C"), - (2, "1B") - ]: - Positioning.objects.create(event_id=event_id, player_id=player_id, position=position) + def test_event_edit(self): + response = self.client.get(reverse('edit event', args=[2])) + self.assertEqual(200, response.status_code) - for event_id in [ - 2 - ]: - for player_id, available in [ - (1,"Yes"), - (2,"Yes") - ]: - Availability.objects.create(event_id=event_id, player_id=player_id, available=available) + # create new event + new_event_data = { + 'home_team': 23, + 'away_team': 24, + 'start':datetime( + year=2021, + month=1, + day=1, + hour=9, + minute=0, + second=0), + 'venue':19 + } - for event_id in [ - 3 - ]: - for player_id, available in [ - (1,"No"), - (2,"No") - ]: - Availability.objects.create(event_id=event_id, player_id=player_id, available=available) - pass + response = self.client.post(reverse('edit event', args=[0]), data=new_event_data) + self.assertEqual(201, response.status_code) + new_event = Event.objects.get(id=response.context['id']) + self.assertEqual(new_event_data['home_team'], new_event.home_team.id) + self.assertEqual(new_event_data['away_team'], new_event.away_team_id) + self.assertEqual(new_event_data['start'], new_event.start) - - def test_player(self): - """Test that player works""" - player_1 = Player.objects.get(first_name="Rush") - player_2 = Player.objects.get(first_name="Baby") - self.assertEqual(str(player_1), f"Valenzuela, Rush") - self.assertEqual(str(player_2), f"Triumphant, Baby") - pass - - def test_event(self): - event = Event.objects.get(pk=1) - self.assertEqual(event.start.year, 2020) - self.assertEqual(event.start.month, 1) - self.assertEqual(event.start.day, 2) - self.assertEqual(event.start.hour, 12) - self.assertEqual(event.start.minute, 0) - self.assertEqual(event.home_team.name, "Firefighters") - self.assertEqual(event.away_team.name, "Garages") - - def test_availability(self): - availability_1 = Availability.objects.get(event_id=1, player_id=1) - availability_2 = Availability.objects.get(event_id=1, player_id=2) - - self.assertEqual(availability_1.available, "Yes") - self.assertEqual(availability_2.available, "No") - pass - - def test_positioning(self): - positioning_1 = Positioning.objects.get(event_id=1, player_id=1) - positioning_2 = Positioning.objects.get(event_id=1, player_id=2) - # positing_1 - pass - - def test_combine_info(self): - event = Event.objects.get(pk=1) - event_id = 1 - player_query = Player.objects.all() - positioning_query = Positioning.objects.filter(event=event).select_related('player') - availability_query = Availability.objects.filter(event=event).select_related('player') - player_event_info = [] - - for player in player_query: - player_event_info.append( - { - "player":player, - "positioning":positioning_query.get(player_id=player.id), - "availability":availability_query.get(player_id=player.id) + # modify event + modified_event_data = { + 'home_team': 23, + 'away_team': 24, + 'start':datetime( + year=2021, + month=1, + day=1, + hour=9, + minute=0, + second=0), + 'venue':19 } - ) + response = self.client.post(reverse('edit event', args=[1]), data=modified_event_data) + self.assertEqual(200, response.status_code) + self.assertEqual(1, response.context['id']) + modified_event = Event.objects.get(id=response.context['id']) - pass + self.assertEqual(modified_event_data['home_team'], modified_event.home_team.id) + self.assertEqual(modified_event_data['away_team'], modified_event.away_team.id) + self.assertEqual(modified_event_data['start'], modified_event.start) + self.assertEqual(modified_event_data['venue'], modified_event.venue.id) diff --git a/lineups/tests.py b/lineups/tests.py index 7ce503c..55f395e 100644 --- a/lineups/tests.py +++ b/lineups/tests.py @@ -1,3 +1,52 @@ from django.test import TestCase +from django.test import TestCase, Client +from django.test.utils import setup_test_environment +from django.urls import reverse +from .models import Positioning, Player +from .forms import PositioningFormSet -# Create your tests here. +class TestVenueViews(TestCase): + fixtures = ['blaseball'] + + def test_positioning_list(self): + response = self.client.get(reverse('edit lineup', args=[1])) + self.assertEqual(response.status_code, 200) + + def test_positioning_formset(self): + event = 1 + + sample_data = [ + # first player positioning + (1, Player.objects.get(id=1).id, 'P'), + (2, Player.objects.get(id=2).id, 'C'), + (3, Player.objects.get(id=3).id, '1B') + ] + data = {} + + for i, (order, player, position) in enumerate(sample_data): + data[f'form-{i}-order']=order + data[f'form-{i}-player']=player + data[f'form-{i}-position'] = position + + management = { + 'form-INITIAL_FORMS': '0', + 'form-TOTAL_FORMS': len(sample_data), + 'form-MAX_NUM_FORMS': '' + } + + formset = PositioningFormSet({**management, **data}) + + self.assertTrue(formset.is_valid()) + for form in formset: + self.assertTrue(form.is_valid()) + + response = self.client.post(reverse('edit lineup', args=[event]), {**management, **data}) + + self.assertEqual(response.status_code, 200) + + for d in sample_data: + with self.subTest(d): + p = Positioning.objects.get(player_id=d[1], event_id=event) + self.assertEqual(d[0], p.order) + self.assertEqual(d[2], p.position) + pass \ No newline at end of file diff --git a/players/tests.py b/players/tests.py index 7ce503c..dc24f5d 100644 --- a/players/tests.py +++ b/players/tests.py @@ -1,3 +1,58 @@ -from django.test import TestCase +from django.test import TestCase, Client +from django.urls import reverse +from .models import Player + +FIXTURES = ['blaseball'] + +class TestPlayerModel(TestCase): + fixtures = FIXTURES + + def test_query_player(self): + """ + Return the desired player + """ + player = Player.objects.get(id=1) + self.assertEqual(player.first_name, "Edric") + self.assertEqual(player.last_name, "Tosser") + self.assertEqual(player.jersey_number, 1) + self.assertEqual(player.team.name, "Chicago Firefighters") + +class TestPlayerViews(TestCase): + fixtures = FIXTURES + + def test_player_list(self): + response = self.client.get(reverse('players list')) + self.assertEqual(response.status_code, 200) + + def test_player_edit(self): + response = self.client.get(reverse('edit player', args=[1])) + self.assertEqual(response.status_code, 200) + + # create new player + new_player_data = { + 'first_name': "A new player first name", + 'last_name': "A new player last name", + 'jersey_number':99, + 'team':1 + } + + response = self.client.post(reverse('edit player', args=[0]), data=new_player_data) + self.assertEqual(201, response.status_code) + new_player = Player.objects.get(id=response.context['id']) + self.assertEqual(new_player_data['first_name'], new_player.first_name) + self.assertEqual(new_player_data['last_name'], new_player.last_name) + + # modify player + modified_player_data = { + 'first_name': "A changed player first name", + 'last_name': "A changed player last name", + 'jersey_number': 99, + 'team': 1 + } + response = self.client.post(reverse('edit player', args=[1]), data=modified_player_data) + self.assertEqual(200, response.status_code) + self.assertEqual(1, response.context['id']) + modified_player = Player.objects.get(id=response.context['id']) + self.assertEqual(modified_player_data['first_name'], modified_player.first_name) + self.assertEqual(modified_player_data['last_name'], modified_player.last_name) -# Create your tests here. diff --git a/teams/tests.py b/teams/tests.py index 7ce503c..0e52a25 100644 --- a/teams/tests.py +++ b/teams/tests.py @@ -1,3 +1,41 @@ +from django.urls import reverse from django.test import TestCase +from .models import Team # Create your tests here. +class TestTeamModel(TestCase): + fixtures = ['blaseball'] + + def test_query_team(self): + """ + Return the desired team + """ + team = Team.objects.get(id=1) + self.assertEqual(team.name, "Chesapeake Racetrack and Ballpark") + +class TestTeamViews(TestCase): + fixtures = ['blaseball'] + + def test_team_list(self): + response = self.client.get(reverse('teams list')) + self.assertEqual(response.status_code, 200) + self.assertIn((1, 'Chesapeake Racetrack and Ballpark'), response.context['items']) + self.assertIn((2, 'Tokyo Fitness Center'), response.context['items']) + self.assertIn((25, 'ILB Historical Preservation Site'), response.context['items']) + + def test_team_edit(self): + response = self.client.get(reverse('edit team', args=[1])) + self.assertEqual(response.status_code, 200) + + #create new team + response = self.client.post(reverse('edit team', args=[0]), data={'name': "A new team"}) + self.assertEqual(201, response.status_code) + new_team = Team.objects.get(id=response.context['id']) + self.assertEqual('A new team',new_team.name, ) + + # modify team + response = self.client.post(reverse('edit team', args=[1]), data={'name': "A different team name"}) + self.assertEqual(200, response.status_code) + self.assertEqual(1, response.context['id']) + modified_team = Team.objects.get(id=response.context['id']) + self.assertEqual('A different team name', modified_team.name) \ No newline at end of file diff --git a/venues/tests.py b/venues/tests.py index 7ce503c..151c3c9 100644 --- a/venues/tests.py +++ b/venues/tests.py @@ -1,3 +1,40 @@ from django.test import TestCase +from django.urls import reverse +from .models import Venue -# Create your tests here. +class TestVenueModel(TestCase): + fixtures = ['blaseball'] + + def test_query_venue(self): + """ + Return the desired venue + """ + venue = Venue.objects.get(id=1) + self.assertEqual(venue.name, "Chesapeake Racetrack and Ballpark") + +class TestVenueViews(TestCase): + fixtures = ['blaseball'] + + def test_venue_list(self): + response = self.client.get(reverse('venues list')) + self.assertEqual(response.status_code, 200) + self.assertIn((1, 'Chesapeake Racetrack and Ballpark'), response.context['items']) + self.assertIn((2, 'Tokyo Fitness Center'), response.context['items']) + self.assertIn((25, 'ILB Historical Preservation Site'), response.context['items']) + + def test_venue_edit(self): + response = self.client.get(reverse('edit venue', args=[1])) + self.assertEqual(response.status_code, 200) + + #create new venue + response = self.client.post(reverse('edit venue', args=[0]), data={'name': "A new venue"}) + self.assertEqual(201, response.status_code) + new_venue = Venue.objects.get(id=response.context['id']) + self.assertEqual('A new venue',new_venue.name, ) + + # modify venue + response = self.client.post(reverse('edit venue', args=[1]), data={'name': "A different venue name"}) + self.assertEqual(200, response.status_code) + self.assertEqual(1, response.context['id']) + modified_venue = Venue.objects.get(id=response.context['id']) + self.assertEqual('A different venue name', modified_venue.name) \ No newline at end of file