Source code for oioioi.contestlogo.tests

import calendar

from django.contrib.auth.models import User
from django.core.files.base import ContentFile
from django.urls import reverse
from django.utils.http import http_date
from django.utils.timezone import timedelta

from oioioi.base.tests import TestCase
from oioioi.contestlogo.models import ContestIcon, ContestLogo
from oioioi.contests.models import Contest
from oioioi.programs.controllers import ProgrammingContestController


[docs]class ContestControllerWithoutDefaults(ProgrammingContestController):
[docs] def default_contestlogo_url(self): return None
[docs] def default_contesticons_urls(self): return []
[docs]class ContestControllerWithDefaults(ProgrammingContestController):
[docs] def default_contestlogo_url(self): return '/some/URL/'
[docs] def default_contesticons_urls(self): return ['/another/URL/']
[docs]class TestProcessorsWithoutUploadedFiles(TestCase):
[docs] fixtures = ['test_users', 'test_contest']
[docs] def _render_menu(self): user = User.objects.get(username='test_user') self.assertTrue(self.client.login(username=user)) return self.client.get(reverse('index'), follow=True).content.decode('utf-8')
[docs] def test_without_defaults(self): contest = Contest.objects.get() contest.controller_name = ( 'oioioi.contestlogo.tests.ContestControllerWithoutDefaults' ) contest.save() response = self._render_menu() self.assertNotIn('class="contesticon"', response)
[docs] def test_with_defaults(self): contest = Contest.objects.get() contest.controller_name = ( 'oioioi.contestlogo.tests.ContestControllerWithDefaults' ) contest.save() response = self._render_menu() self.assertIn('/some/URL/', response) self.assertIn('class="contesticon"', response) self.assertIn('/another/URL/', response)
[docs]class TestProcessorsWithUploadedFiles(TestCase):
[docs] fixtures = ['test_users', 'test_contest', 'test_logo', 'test_icon']
[docs] def _render_menu(self): user = User.objects.get(username='test_user') self.assertTrue(self.client.login(username=user)) return self.client.get(reverse('index'), follow=True).content.decode('utf-8')
[docs] def test_with_defauts_and_uploaded_files(self): contest = Contest.objects.get() contest.controller_name = ( 'oioioi.contestlogo.tests.ContestControllerWithDefaults' ) contest.save() response = self._render_menu() self.assertNotIn('/some/URL/', response) self.assertIn('/c/c/logo/', response) self.assertIn('class="contesticon"', response) self.assertNotIn('/another/URL/', response) self.assertIn('/c/c/icons/', response)
[docs]class TestUpdatedAt(TestCase):
[docs] fixtures = ['test_contest', 'test_logo', 'test_icon']
[docs] def to_http_date(self, dt): return http_date(calendar.timegm(dt.utctimetuple()))
[docs] def request_file(self, url, update_date): date_before = self.to_http_date(update_date - timedelta(days=10)) date_after = self.to_http_date(update_date + timedelta(days=10)) self.client.defaults['HTTP_IF_MODIFIED_SINCE'] = date_before response = self.client.get(url) self.assertEqual(response.status_code, 200) self.client.defaults['HTTP_IF_MODIFIED_SINCE'] = date_after response = self.client.get(url) self.assertEqual(response.status_code, 304)
[docs] def test_icon_last_modified(self): icon = ContestIcon.objects.get() icon.image = ContentFile(b'eloziom', name='foo') icon.save() self.request_file('/c/c/icons/%d/' % icon.pk, icon.updated_at)
[docs] def test_logo_last_modified(self): logo = ContestLogo.objects.get() logo.image = ContentFile(b'eloziom', name='foo') logo.save() self.request_file('/c/c/logo/', logo.updated_at)