修改problem中的测试及views

This commit is contained in:
hohoTT 2015-08-16 14:28:09 +08:00
parent dc67491e6e
commit 277ee83b0f
3 changed files with 54 additions and 27 deletions

View File

@ -13,7 +13,7 @@ from group.views import (GroupAdminAPIView, GroupMemberAdminAPIView,
from admin.views import AdminTemplateView from admin.views import AdminTemplateView
from problem.views import TestCaseUploadAPIView, ProblemTagAdminAPIView, ProblemAdminAPIView from problem.views import TestCaseUploadAPIView, ProblemAdminAPIView
from submission.views import SubmissionAPIView from submission.views import SubmissionAPIView
urlpatterns = [ urlpatterns = [
@ -49,7 +49,6 @@ urlpatterns = [
url(r'^api/admin/group_join/$', JoinGroupAPIView.as_view(), name="group_join_admin_api"), 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/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/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<problem_id>\d+)/my_submissions/$', "submission.views.problem_my_submissions_list_page", url(r'^problem/(?P<problem_id>\d+)/my_submissions/$', "submission.views.problem_my_submissions_list_page",
name="problem_my_submissions_page"), name="problem_my_submissions_page"),
url(r'^my_submission/(?P<submission_id>\w+)/$', "submission.views.my_submission", name="my_submission_page"), url(r'^my_submission/(?P<submission_id>\w+)/$', "submission.views.my_submission", name="my_submission_page"),

View File

@ -11,7 +11,32 @@ from problem.models import Problem, ProblemTag
class ProblemPageTest(TestCase): 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): class ProblemAdminTest(APITestCase):
@ -47,7 +72,7 @@ class ProblemAdminTest(APITestCase):
output_description="output1_description", output_description="output1_description",
test_case_id="1", test_case_id="1",
source="source1", source="source1",
samples=[{"input": "1 1", "output": "2"}], samples=json.dumps([{"input": "1 1", "output": "2"}]),
time_limit=100, time_limit=100,
memory_limit=1000, memory_limit=1000,
difficulty=1, difficulty=1,
@ -98,3 +123,27 @@ class ProblemAdminTest(APITestCase):
problem.tags.add(*ProblemTag.objects.filter(id__in=data["tags"])) problem.tags.add(*ProblemTag.objects.filter(id__in=data["tags"]))
response = self.client.put(self.url, data=json.dumps(data), content_type="application/json") response = self.client.put(self.url, data=json.dumps(data), content_type="application/json")
self.assertEqual(response.data["code"], 0) 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)

View File

@ -20,27 +20,6 @@ from .serizalizers import (CreateProblemSerializer, EditProblemSerializer, Probl
from .models import Problem, ProblemTag 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): def problem_page(request, problem_id):
try: try:
problem = Problem.objects.get(id=problem_id) problem = Problem.objects.get(id=problem_id)
@ -60,7 +39,6 @@ class ProblemAdminAPIView(APIView):
serializer = CreateProblemSerializer(data=request.data) serializer = CreateProblemSerializer(data=request.data)
if serializer.is_valid(): if serializer.is_valid():
data = serializer.data data = serializer.data
print data
problem = Problem.objects.create(title=data["title"], problem = Problem.objects.create(title=data["title"],
description=data["description"], description=data["description"],
input_description=data["input_description"], input_description=data["input_description"],
@ -145,7 +123,8 @@ class ProblemAdminAPIView(APIView):
problem = problem.filter(visible=(visible == "true")) problem = problem.filter(visible=(visible == "true"))
keyword = request.GET.get("keyword", None) keyword = request.GET.get("keyword", None)
if keyword: 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) return paginate(request, problem, ProblemSerializer)