from unittest import mock from copy import deepcopy from .models import Submission from problem.models import Problem, ProblemTag from utils.api.tests import APITestCase DEFAULT_PROBLEM_DATA = {"_id": "A-110", "title": "test", "description": "

test

", "input_description": "test", "output_description": "test", "time_limit": 1000, "memory_limit": 256, "difficulty": "Low", "visible": True, "tags": ["test"], "languages": ["C", "C++", "Java", "Python2"], "template": {}, "samples": [{"input": "test", "output": "test"}], "spj": False, "spj_language": "C", "spj_code": "", "test_case_id": "499b26290cc7994e0b497212e842ea85", "test_case_score": [{"output_name": "1.out", "input_name": "1.in", "output_size": 0, "stripped_output_md5": "d41d8cd98f00b204e9800998ecf8427e", "input_size": 0, "score": 0}], "rule_type": "ACM", "hint": "

test

", "source": "test"} DEFAULT_SUBMISSION_DATA = { "problem_id": "1", "user_id": 1, "username": "test", "code": "xxxxxxxxxxxxxx", "result": -2, "info": {}, "language": "C", "statistic_info": {} } # todo contest submission class SubmissionPrepare(APITestCase): def _create_problem_and_submission(self): user = self.create_admin("test", "test123", login=False) problem_data = deepcopy(DEFAULT_PROBLEM_DATA) tags = problem_data.pop("tags") problem_data["created_by"] = user self.problem = Problem.objects.create(**problem_data) for tag in tags: tag = ProblemTag.objects.create(name=tag) self.problem.tags.add(tag) self.problem.save() self.submission_data = deepcopy(DEFAULT_SUBMISSION_DATA) self.submission_data["problem_id"] = self.problem.id self.submission = Submission.objects.create(**self.submission_data) class SubmissionListTest(SubmissionPrepare): def setUp(self): self._create_problem_and_submission() self.create_user("123", "345") self.url = self.reverse("submission_list_api") def test_get_submission_list(self): resp = self.client.get(self.url, data={"limit": "10"}) self.assertSuccess(resp) @mock.patch("submission.views.oj.judge_task.delay") class SubmissionAPITest(SubmissionPrepare): def setUp(self): self._create_problem_and_submission() self.user = self.create_user("123", "test123") self.url = self.reverse("submission_api") def test_create_submission(self, judge_task): resp = self.client.post(self.url, self.submission_data) self.assertSuccess(resp) judge_task.assert_called()