Files
benchcoach-django/benchcoach/tests.py
2022-05-14 07:16:31 -05:00

282 lines
9.4 KiB
Python

from django.test import TestCase
from .models import Event, Player, Team, Venue, Positioning
from .forms import PositioningFormSet
from datetime import datetime
from django.urls import reverse
FIXTURES = ["blaseball"]
class TestEventModel(TestCase):
fixtures = FIXTURES
def test_query_event(self):
"""
Return the desired event
"""
event = Event.objects.get(id=1)
self.assertEqual("Chicago Firefighters", event.away_team.name)
self.assertEqual("Dallas Steaks", event.home_team.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,
)
class TestEventViews(TestCase):
fixtures = FIXTURES
def test_event_list(self):
response = self.client.get(reverse("schedule"))
self.assertEqual(200, response.status_code)
def test_event_edit(self):
response = self.client.get(reverse("edit event", args=[2]))
self.assertEqual(200, response.status_code)
# 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,
}
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)
# 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"])
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)
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
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)
class TestTeamModel(TestCase):
fixtures = ["blaseball"]
def test_query_team(self):
"""
Return the desired team
"""
team = Team.objects.get(id=1)
self.assertEqual(team.name, "Chicago Firefighters")
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(
{"id": 1, "title": "Chicago Firefighters"}, response.context["items"]
)
self.assertIn({"id": 2, "title": "Boston Flowers"}, response.context["items"])
self.assertIn({"id": 24, "title": "Baltimore Crabs"}, 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)
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("locations list"))
self.assertEqual(response.status_code, 200)
self.assertIn(
{"id": 1, "title": "Chesapeake Racetrack and Ballpark"},
response.context["items"],
)
self.assertIn(
{"id": 2, "title": "Tokyo Fitness Center"}, response.context["items"]
)
self.assertIn(
{"id": 25, "title": "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)