From 277ee83b0fefff1b7fba3ea67923c2054c1ebc88 Mon Sep 17 00:00:00 2001 From: hohoTT <609029365@qq.com> Date: Sun, 16 Aug 2015 14:28:09 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9problem=E4=B8=AD=E7=9A=84?= =?UTF-8?q?=E6=B5=8B=E8=AF=95=E5=8F=8Aviews?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- oj/urls.py | 3 +-- problem/tests.py | 53 ++++++++++++++++++++++++++++++++++++++++++++++-- problem/views.py | 25 ++--------------------- 3 files changed, 54 insertions(+), 27 deletions(-) diff --git a/oj/urls.py b/oj/urls.py index 909d6bb0..badcca09 100644 --- a/oj/urls.py +++ b/oj/urls.py @@ -13,7 +13,7 @@ from group.views import (GroupAdminAPIView, GroupMemberAdminAPIView, from admin.views import AdminTemplateView -from problem.views import TestCaseUploadAPIView, ProblemTagAdminAPIView, ProblemAdminAPIView +from problem.views import TestCaseUploadAPIView, ProblemAdminAPIView from submission.views import SubmissionAPIView urlpatterns = [ @@ -49,7 +49,6 @@ urlpatterns = [ url(r'^api/admin/group_join/$', JoinGroupAPIView.as_view(), name="group_join_admin_api"), url(r'^api/admin/problem/$', ProblemAdminAPIView.as_view(), name="problem_admin_api"), url(r'^api/admin/test_case_upload/$', TestCaseUploadAPIView.as_view(), name="test_case_upload_api"), - url(r'^api/admin/tag/$', ProblemTagAdminAPIView.as_view(), name="problem_tag_admin_api"), url(r'^problem/(?P\d+)/my_submissions/$', "submission.views.problem_my_submissions_list_page", name="problem_my_submissions_page"), url(r'^my_submission/(?P\w+)/$', "submission.views.my_submission", name="my_submission_page"), diff --git a/problem/tests.py b/problem/tests.py index 18236552..17d098d2 100644 --- a/problem/tests.py +++ b/problem/tests.py @@ -11,7 +11,32 @@ from problem.models import Problem, ProblemTag class ProblemPageTest(TestCase): - pass + def setUp(self): + self.client = APIClient() + self.user = User.objects.create(username="test", admin_type=SUPER_ADMIN) + self.user.set_password("testaa") + self.user.save() + self.client.login(username="test", password="testaa") + self.problem = Problem.objects.create(title="title1", + description="description1", + input_description="input1_description", + output_description="output1_description", + test_case_id="1", + source="source1", + samples=json.dumps([{"input": "1 1", "output": "2"}]), + time_limit=100, + memory_limit=1000, + difficulty=1, + hint="hint1", + created_by=User.objects.get(username="test")) + + def test_visit_problem_successfully(self): + response = self.client.get('/problem/1/') + self.assertEqual(response.status_code, 200) + + def test_problem_does_not_exist(self): + response = self.client.get('/problem/3/') + self.assertTemplateUsed(response, "utils/error.html") class ProblemAdminTest(APITestCase): @@ -47,7 +72,7 @@ class ProblemAdminTest(APITestCase): output_description="output1_description", test_case_id="1", source="source1", - samples=[{"input": "1 1", "output": "2"}], + samples=json.dumps([{"input": "1 1", "output": "2"}]), time_limit=100, memory_limit=1000, difficulty=1, @@ -98,3 +123,27 @@ class ProblemAdminTest(APITestCase): problem.tags.add(*ProblemTag.objects.filter(id__in=data["tags"])) response = self.client.put(self.url, data=json.dumps(data), content_type="application/json") self.assertEqual(response.data["code"], 0) + + # 以下是题目分页的测试 + def test_success_get_data(self): + self.assertEqual(self.client.get(self.url).data["code"], 0) + + def test_query_by_keyword(self): + response = self.client.get(self.url + "?keyword=title1") + self.assertEqual(response.data["code"], 0) + + def test_query_by_visible(self): + response = self.client.get(self.url + "?visible=true") + self.assertEqual(response.data["code"], 0) + for item in response.data["data"]: + self.assertEqual(item["visible"], True) + + def test_query_problem_does_not_exist(self): + data = {"problem_id": 2} + response = self.client.get(self.url, data=data) + self.assertEqual(response.data, {"code": 1, "data": u"题目不存在"}) + + def test_query_problem_exists(self): + data = {"problem_id": 1} + response = self.client.get(self.url, data=data) + self.assertEqual(response.data["code"], 0) diff --git a/problem/views.py b/problem/views.py index 4560ffc4..64a58b4b 100644 --- a/problem/views.py +++ b/problem/views.py @@ -20,27 +20,6 @@ from .serizalizers import (CreateProblemSerializer, EditProblemSerializer, Probl from .models import Problem, ProblemTag -class ProblemTagAdminAPIView(APIView): - def post(self, request): - """ - 创建标签的接口 - --- - request_serializer: CreateProblemTagSerializer - """ - serializer = CreateProblemTagSerializer(data=request.data) - if serializer.is_valid(): - try: - tag = ProblemTag.objects.get(name=serializer.data["name"]) - except ProblemTag.DoesNotExist: - tag = ProblemTag.objects.create(name=serializer.data["name"]) - return success_response(ProblemTagSerializer(tag).data) - else: - return error_response(serializer) - - def get(self, request): - return success_response(ProblemTagSerializer(ProblemTag.objects.all(), many=True).data) - - def problem_page(request, problem_id): try: problem = Problem.objects.get(id=problem_id) @@ -60,7 +39,6 @@ class ProblemAdminAPIView(APIView): serializer = CreateProblemSerializer(data=request.data) if serializer.is_valid(): data = serializer.data - print data problem = Problem.objects.create(title=data["title"], description=data["description"], input_description=data["input_description"], @@ -145,7 +123,8 @@ class ProblemAdminAPIView(APIView): problem = problem.filter(visible=(visible == "true")) keyword = request.GET.get("keyword", None) if keyword: - problem = problem.filter(Q(difficulty__contains=keyword)) + problem = problem.filter(Q(title__contains=keyword) | + Q(description__contains=keyword)) return paginate(request, problem, ProblemSerializer)