import re
from django.contrib.auth.models import User
from django.core import mail
from oioioi.base.tests import TestCase
from oioioi.confirmations.utils import (
ProofCorrupted,
submission_receipt_proof,
verify_submission_receipt_proof,
)
from oioioi.contests.models import Contest, ProblemInstance
from oioioi.participants.models import Participant
from oioioi.programs.models import ProgramSubmission
from oioioi.programs.tests import SubmitFileMixin
[docs]class TestEmailReceipt(TestCase, SubmitFileMixin):
[docs] fixtures = [
'test_users',
'test_contest',
'test_full_package',
'test_problem_instance',
'test_submission',
]
[docs] def setUp(self):
contest = Contest.objects.get()
contest.controller_name = 'oioioi.oi.controllers.OIContestController'
contest.save()
Participant(contest=contest, user=User.objects.get(username='test_user')).save()
[docs] def test_sending_receipt(self):
contest = Contest.objects.get()
problem_instance = ProblemInstance.objects.get()
self.assertTrue(self.client.login(username='test_user'))
response = self.submit_file(contest, problem_instance, file_size=1337)
self._assertSubmitted(contest, response)
email = mail.outbox[0].message().as_string()
del mail.outbox[0]
self.assertIn("OIOIOI login: test_user", email)
self.assertIn(f"Contest id: {contest.id}", email)
self.assertIn(f"Problem: {problem_instance.short_name}", email)
self.assertIn("Submissions to this task: 2", email)
self.assertIn("1337 bytes", email)
proof = re.search(
r'--- BEGIN PROOF DATA ---(.*)--- END PROOF DATA ---', email, re.DOTALL
)
self.assertTrue(proof)
verify_submission_receipt_proof(proof.group(1), b'a' * 1337)
self.assertTrue(self.client.login(username='test_admin'))
response = self.submit_file(
contest, problem_instance, user='test_admin', kind='NORMAL'
)
self._assertSubmitted(contest, response)
self.assertEqual(len(mail.outbox), 1)
[docs] def test_not_sending_receipt(self):
contest = Contest.objects.get()
problem_instance = ProblemInstance.objects.get()
self.assertTrue(self.client.login(username='test_admin'))
response = self.submit_file(contest, problem_instance, user='test_user')
self._assertSubmitted(contest, response)
self.assertEqual(len(mail.outbox), 0)
response = self.submit_file(
contest, problem_instance, user='test_admin', kind='IGNORED'
)
self._assertSubmitted(contest, response)
self.assertEqual(len(mail.outbox), 0)