From aa99e9f634ccd8d44706ba8f09a5322124e7b2b0 Mon Sep 17 00:00:00 2001 From: hohoTT <609029365@qq.com> Date: Sat, 15 Aug 2015 20:56:39 +0800 Subject: [PATCH 1/3] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=B9=B6=E5=88=A0?= =?UTF-8?q?=E9=99=A4=E6=B5=8B=E8=AF=95=E4=B8=AD=E4=B8=8D=E5=BF=85=E8=A6=81?= =?UTF-8?q?=E7=9A=84=E4=B8=9C=E8=A5=BF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- account/tests.py | 8 +------- announcement/tests.py | 2 +- 2 files changed, 2 insertions(+), 8 deletions(-) diff --git a/account/tests.py b/account/tests.py index c8279aa..10070fa 100644 --- a/account/tests.py +++ b/account/tests.py @@ -152,18 +152,16 @@ class UserAdminAPITest(APITestCase): user = User.objects.create(username="testx", real_name="xx", admin_type=SUPER_ADMIN) user.set_password("testxx") user.save() + self.client.login(username="testx", password="testxx") def test_success_get_data(self): - self.client.login(username="testx", password="testxx") self.assertEqual(self.client.get(self.url).data["code"], 0) def test_error_admin_type(self): - self.client.login(username="testx", password="testxx") response = self.client.get(self.url + "?admin_type=error") self.assertEqual(response.data, {"code": 1, "data": u"参数错误"}) def test_query_by_keyword(self): - self.client.login(username="testx", password="testxx") user1 = User.objects.create(username="test1", real_name="aa") user1.set_password("testaa") user1.save() @@ -180,27 +178,23 @@ class UserAdminAPITest(APITestCase): self.assertEqual(response.data["code"], 0) def test_put_invalid_data(self): - self.client.login(username="testx", password="testxx") data = {"username": "test", "password": "testaa", "email": "60@qq.com", "admin_type": "2"} response = self.client.put(self.url, data=data) self.assertEqual(response.data["code"], 1) def test_user_does_not_exist(self): - self.client.login(username="testx", password="testxx") data = {"id": 2, "username": "test0", "real_name": "test00", "password": "testaa","email": "60@qq.com", "admin_type": "2"} response = self.client.put(self.url, data=data) self.assertEqual(response.data, {"code": 1, "data": u"该用户不存在!"}) def test_success_user_edit_not_password(self): - self.client.login(username="testx", password="testxx") data = {"id": 1, "username": "test0", "real_name": "test00", "email": "60@qq.com", "admin_type": "2"} response = self.client.put(self.url, data=data) self.assertEqual(response.data["code"], 0) def test_success_user_edit_change_password(self): - self.client.login(username="testx", password="testxx") data = {"id": 1, "username": "test0", "real_name": "test00", "password": "111111", "email": "60@qq.com", "admin_type": "2"} response = self.client.put(self.url, data=data) diff --git a/announcement/tests.py b/announcement/tests.py index 708f3c6..7ce2467 100644 --- a/announcement/tests.py +++ b/announcement/tests.py @@ -105,7 +105,7 @@ class AnnouncementPageTest(TestCase): created_by=User.objects.get(username="test"), visible=False) - def test_success_announcement(self): + def test_visit_announcement_successfully(self): response = self.client.get('/announcement/1/') self.assertEqual(response.status_code, 200) 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 2/3] =?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 909d6bb..badcca0 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 1823655..17d098d 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 4560ffc..64a58b4 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) From 30348f0c5d0ec006f4e5aee0b88f92f5f38f9793 Mon Sep 17 00:00:00 2001 From: hohoTT <609029365@qq.com> Date: Sun, 16 Aug 2015 16:52:26 +0800 Subject: [PATCH 3/3] =?UTF-8?q?=E5=88=A0=E9=99=A4problem=E4=B8=AD=E5=A4=9A?= =?UTF-8?q?=E4=BD=99=E7=9A=84=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- oj/urls.py | 3 ++- problem/tests.py | 17 +++++++++++++++++ problem/views.py | 5 +++++ 3 files changed, 24 insertions(+), 1 deletion(-) diff --git a/oj/urls.py b/oj/urls.py index badcca0..909d6bb 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, ProblemAdminAPIView +from problem.views import TestCaseUploadAPIView, ProblemTagAdminAPIView, ProblemAdminAPIView from submission.views import SubmissionAPIView urlpatterns = [ @@ -49,6 +49,7 @@ 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 17d098d..91affae 100644 --- a/problem/tests.py +++ b/problem/tests.py @@ -39,6 +39,7 @@ class ProblemPageTest(TestCase): self.assertTemplateUsed(response, "utils/error.html") + class ProblemAdminTest(APITestCase): def _create_data(self, problem_id, visible, tags): data = {"id": problem_id, @@ -147,3 +148,19 @@ class ProblemAdminTest(APITestCase): data = {"problem_id": 1} response = self.client.get(self.url, data=data) self.assertEqual(response.data["code"], 0) + + +class ProblemTagAdminAPITest(APITestCase): + def setUp(self): + self.client = APIClient() + self.url = reverse('problem_tag_admin_api') + self.user = User.objects.create(username="testx", admin_type=SUPER_ADMIN) + self.user.set_password("testxx") + self.user.save() + self.client.login(username="testx", password="testxx") + ProblemTag.objects.create(name="tag1") + + # 以下是返回所有的问题的标签 + def test_get_all_problem_tag_successfully(self): + self.assertEqual(self.client.get(self.url).data["code"], 0) + diff --git a/problem/views.py b/problem/views.py index 64a58b4..1d1702d 100644 --- a/problem/views.py +++ b/problem/views.py @@ -28,6 +28,11 @@ def problem_page(request, problem_id): return render(request, "oj/problem/problem.html", {"problem": problem, "samples": json.loads(problem.samples)}) +class ProblemTagAdminAPIView(APIView): + def get(self, request): + return success_response(ProblemTagSerializer(ProblemTag.objects.all(), many=True).data) + + class ProblemAdminAPIView(APIView): def post(self, request): """