Source code for oioioi.complaints.tests

from datetime import datetime, timezone  # pylint: disable=E0611

from django.contrib.auth.models import User
from django.core import mail
from django.test.utils import override_settings
from django.urls import reverse

from oioioi.base.tests import TestCase, fake_time
from oioioi.complaints.models import ComplaintsConfig
from oioioi.contests.models import Contest
from oioioi.participants.models import Participant


@override_settings(EMAIL_BACKEND='django.core.mail.backends.locmem.EmailBackend')
[docs]class TestMakingComplaint(TestCase):
[docs] fixtures = ['test_users', 'test_contest']
[docs] def test_making_complaint(self): contest = Contest.objects.get() contest.controller_name = 'oioioi.oi.controllers.OIOnsiteContestController' contest.save() user = User.objects.get(username='test_user') p = Participant(contest=contest, user=user, status='ACTIVE') p.save() with fake_time(datetime(2012, 8, 11, tzinfo=timezone.utc)): self.assertTrue(self.client.login(username='test_user')) response = self.client.post( reverse('add_complaint', kwargs={'contest_id': contest.id}), {'complaint': "I am innocent! It is your fault!"}, follow=True, ) self.assertEqual(response.status_code, 403) cconfig = ComplaintsConfig( contest=contest, enabled=True, start_date=datetime(2012, 8, 10, tzinfo=timezone.utc), end_date=datetime(2012, 8, 12, tzinfo=timezone.utc), ) cconfig.save() with fake_time(datetime(2012, 8, 9, tzinfo=timezone.utc)): response = self.client.get( reverse('add_complaint', kwargs={'contest_id': contest.id}) ) self.assertEqual(response.status_code, 403) with fake_time(datetime(2012, 8, 13, tzinfo=timezone.utc)): response = self.client.get( reverse('add_complaint', kwargs={'contest_id': contest.id}) ) self.assertEqual(response.status_code, 403) with fake_time(datetime(2012, 8, 11, tzinfo=timezone.utc)): response = self.client.post( reverse('add_complaint', kwargs={'contest_id': contest.id}), {'complaint': "I am innocent! It is your fault!"}, follow=True, ) self.assertEqual(response.status_code, 200) self.assertContains(response, "has been sent") jurym = mail.outbox[0].message() userm = mail.outbox[1].message() del mail.outbox[:] # Header class doesn't offer 'in' operator expected = "[oioioi-complaints] Complaint: Test User (test_user)" self.assertEqual(expected, jurym['Subject']) self.assertEqual(expected, userm['Subject']) self.assertEqual("dummy@example.com", jurym['To']) self.assertEqual("test_user@example.com", userm['To']) self.assertEqual(jurym['Message-ID'], userm['References']) self.assertEqual(userm['Message-ID'], jurym['References']) self.assertIn("your fault!", jurym.as_string()) self.assertIn("your fault!", userm.as_string())