def _create_PA(self): problem = Problem.objects.get() pa = ProblemAttachment(problem=problem, description='problem-attachment', content=ContentFile('content-of-probatt', name='probatt.txt')) pa.save()
def test_attachments(self): contest = Contest.objects.get() problem = Problem.objects.get() ca = ContestAttachment(contest=contest, description='contest-attachment', content=ContentFile('content-of-conatt', name='conatt.txt')) ca.save() pa = ProblemAttachment(problem=problem, description='problem-attachment', content=ContentFile('content-of-probatt', name='probatt.txt')) pa.save() self.client.login(username='******') response = self.client.get(reverse('contest_files', kwargs={'contest_id': contest.id})) self.assertEqual(response.status_code, 200) for part in ['contest-attachment', 'conatt.txt', 'problem-attachment', 'probatt.txt']: self.assertIn(part, response.content) response = self.client.get(reverse('contest_attachment', kwargs={'contest_id': contest.id, 'attachment_id': ca.id})) self.assertEqual(response.content, 'content-of-conatt') response = self.client.get(reverse('problem_attachment', kwargs={'contest_id': contest.id, 'attachment_id': pa.id})) self.assertEqual(response.content, 'content-of-probatt')
def test_attachments(self): contest = Contest.objects.get() problem = Problem.objects.get() ca = ContestAttachment(contest=contest, description='contest-attachment', content=ContentFile('content-of-conatt', name='conatt.txt')) ca.save() pa = ProblemAttachment(problem=problem, description='problem-attachment', content=ContentFile('content-of-probatt', name='probatt.txt')) pa.save() round = Round.objects.get(pk=1) ra = ContestAttachment(contest=contest, description='round-attachment', content=ContentFile('content-of-roundatt', name='roundatt.txt'), round=round) ra.save() self.client.login(username='******') response = self.client.get(reverse('contest_files', kwargs={'contest_id': contest.id})) self.assertEqual(response.status_code, 200) for part in ['contest-attachment', 'conatt.txt', 'problem-attachment', 'probatt.txt', 'round-attachment', 'roundatt.txt']: self.assertIn(part, response.content) response = self.client.get(reverse('contest_attachment', kwargs={'contest_id': contest.id, 'attachment_id': ca.id})) self.assertStreamingEqual(response, 'content-of-conatt') response = self.client.get(reverse('problem_attachment', kwargs={'contest_id': contest.id, 'attachment_id': pa.id})) self.assertStreamingEqual(response, 'content-of-probatt') response = self.client.get(reverse('contest_attachment', kwargs={'contest_id': contest.id, 'attachment_id': ra.id})) self.assertStreamingEqual(response, 'content-of-roundatt') with fake_time(datetime(2011, 7, 10, tzinfo=utc)): response = self.client.get(reverse('contest_files', kwargs={'contest_id': contest.id})) self.assertEqual(response.status_code, 200) for part in ['contest-attachment', 'conatt.txt']: self.assertIn(part, response.content) for part in ['problem-attachment', 'probatt.txt', 'round-attachment', 'roundatt.txt']: self.assertNotIn(part, response.content) response = self.client.get(reverse('contest_attachment', kwargs={'contest_id': contest.id, 'attachment_id': ca.id})) self.assertStreamingEqual(response, 'content-of-conatt') check_not_accessible(self, 'problem_attachment', kwargs={'contest_id': contest.id, 'attachment_id': pa.id}) check_not_accessible(self, 'contest_attachment', kwargs={'contest_id': contest.id, 'attachment_id': ra.id})
def _process_attachments(self): """Remove previously added attachments for the problem, and saves new ones from attachment directory. """ problem_attachments = ProblemAttachment.objects.filter( problem=self.problem) if problem_attachments is not None: problem_attachments.delete() attachments_dir = os.path.join(self.rootdir, 'attachments') if not os.path.isdir(attachments_dir): return attachments = [ attachment for attachment in os.listdir(attachments_dir) if os.path.isfile(os.path.join(attachments_dir, attachment)) ] if len(attachments) == 0: return for attachment in attachments: path = os.path.join(attachments_dir, attachment) instance = ProblemAttachment(problem=self.problem, description=attachment) instance.content.save(attachment, File(open(path, 'rb'))) logger.info('%s: attachment: %s', path, attachment)
def test_attachments(self): contest = Contest.objects.get() problem = Problem.objects.get() ca = ContestAttachment(contest=contest, description='contest-attachment', content=ContentFile('content-of-conatt', name='conatt.txt')) ca.save() pa = ProblemAttachment(problem=problem, description='problem-attachment', content=ContentFile('content-of-probatt', name='probatt.txt')) pa.save() round = Round.objects.get(pk=1) ra = ContestAttachment(contest=contest, description='round-attachment', content=ContentFile('content-of-roundatt', name='roundatt.txt'), round=round) ra.save() self.client.login(username='******') response = self.client.get( reverse('contest_files', kwargs={'contest_id': contest.id})) self.assertEqual(response.status_code, 200) for part in [ 'contest-attachment', 'conatt.txt', 'problem-attachment', 'probatt.txt', 'round-attachment', 'roundatt.txt' ]: self.assertIn(part, response.content) response = self.client.get( reverse('contest_attachment', kwargs={ 'contest_id': contest.id, 'attachment_id': ca.id })) self.assertStreamingEqual(response, 'content-of-conatt') response = self.client.get( reverse('problem_attachment', kwargs={ 'contest_id': contest.id, 'attachment_id': pa.id })) self.assertStreamingEqual(response, 'content-of-probatt') response = self.client.get( reverse('contest_attachment', kwargs={ 'contest_id': contest.id, 'attachment_id': ra.id })) self.assertStreamingEqual(response, 'content-of-roundatt') with fake_time(datetime(2011, 7, 10, tzinfo=utc)): response = self.client.get( reverse('contest_files', kwargs={'contest_id': contest.id})) self.assertEqual(response.status_code, 200) for part in ['contest-attachment', 'conatt.txt']: self.assertIn(part, response.content) for part in [ 'problem-attachment', 'probatt.txt', 'round-attachment', 'roundatt.txt' ]: self.assertNotIn(part, response.content) response = self.client.get( reverse('contest_attachment', kwargs={ 'contest_id': contest.id, 'attachment_id': ca.id })) self.assertStreamingEqual(response, 'content-of-conatt') check_not_accessible(self, 'problem_attachment', kwargs={ 'contest_id': contest.id, 'attachment_id': pa.id }) check_not_accessible(self, 'contest_attachment', kwargs={ 'contest_id': contest.id, 'attachment_id': ra.id })