75 lines
2.7 KiB
Python
75 lines
2.7 KiB
Python
from datetime import timedelta
|
|
|
|
from django.core.exceptions import ImproperlyConfigured
|
|
from django.test import TestCase
|
|
|
|
from games.models import Game
|
|
from submissions.models import Submission
|
|
|
|
from .models import Event
|
|
from .scoping import current_event
|
|
|
|
|
|
class EventScopedManagerTests(TestCase):
|
|
def setUp(self):
|
|
self.event_a = Event.objects.create(name="Event A", path="event-a")
|
|
self.event_b = Event.objects.create(name="Event B", path="event-b")
|
|
self.game = Game.objects.create(name="Test Game", path="test-game")
|
|
self.submission_a = Submission.objects.create(
|
|
event=self.event_a, game=self.game
|
|
)
|
|
self.submission_b = Submission.objects.create(
|
|
event=self.event_b, game=self.game
|
|
)
|
|
|
|
def test_for_event_raises_outside_event_context(self):
|
|
with self.assertRaises(ImproperlyConfigured):
|
|
list(Submission.for_event.all())
|
|
|
|
def test_for_event_filters_to_current_event(self):
|
|
token = current_event.set(self.event_a)
|
|
try:
|
|
results = list(Submission.for_event.all())
|
|
finally:
|
|
current_event.reset(token)
|
|
|
|
self.assertEqual(results, [self.submission_a])
|
|
|
|
|
|
class EventAvailabilityTests(TestCase):
|
|
def setUp(self):
|
|
from accounts.models import CustomUser
|
|
|
|
self.hidden = Event.objects.create(
|
|
name="Hidden", path="hidden", is_available=False
|
|
)
|
|
self.user = CustomUser.objects.create_user(username="user", password="x")
|
|
self.staff = CustomUser.objects.create_user(
|
|
username="staff", password="x", is_staff=True
|
|
)
|
|
|
|
def test_unavailable_event_is_404_for_regular_user(self):
|
|
self.client.force_login(self.user)
|
|
response = self.client.get(f"/{self.hidden.path}/market")
|
|
self.assertEqual(response.status_code, 404)
|
|
|
|
def test_unavailable_event_is_visible_to_staff(self):
|
|
self.client.force_login(self.staff)
|
|
response = self.client.get(f"/{self.hidden.path}/market")
|
|
self.assertEqual(response.status_code, 200)
|
|
|
|
def test_available_to_filters_for_regular_user_only(self):
|
|
self.assertNotIn(self.hidden, Event.objects.available_to(self.user))
|
|
self.assertIn(self.hidden, Event.objects.available_to(self.staff))
|
|
|
|
def test_home_prefers_available_event_for_staff(self):
|
|
available = Event.objects.create(name="Open", path="open")
|
|
Event.objects.filter(pk=self.hidden.pk).update(
|
|
created_at=available.created_at + timedelta(days=1)
|
|
)
|
|
self.client.force_login(self.staff)
|
|
response = self.client.get("/")
|
|
self.assertRedirects(
|
|
response, f"/{available.path}/", fetch_redirect_response=False
|
|
)
|