[后台]修复contestAdmin,比赛和问题API的逻辑问题,主要针对超级管理员和普通管理员的差别.写了测试,是两个api测试覆盖率达100%
This commit is contained in:
@@ -28,6 +28,9 @@ class ContestAdminAPITest(APITestCase):
|
||||
self.group = Group.objects.create(name="group1", description="des0",
|
||||
join_group_setting=0, visible=True,
|
||||
admin=user2)
|
||||
self.group2 = Group.objects.create(name="group2", description="des0",
|
||||
join_group_setting=0, visible=True,
|
||||
admin=user1)
|
||||
self.global_contest = Contest.objects.create(title="titlex", description="descriptionx", mode=1,
|
||||
contest_type=2, show_rank=True, show_user_submission=True,
|
||||
start_time="2015-08-15T10:00:00.000Z",
|
||||
@@ -78,7 +81,7 @@ class ContestAdminAPITest(APITestCase):
|
||||
response = self.client.post(self.url, data=data)
|
||||
self.assertEqual(response.data["code"], 0)
|
||||
|
||||
def test_group_contest_successfully(self):
|
||||
def test_group_contest_super_admin_successfully(self):
|
||||
self.client.login(username="test1", password="testaa")
|
||||
data = {"title": "title3", "description": "description3", "mode": 1, "contest_type": 0,
|
||||
"show_rank": True, "show_user_submission": True, "start_time": "2015-08-15T10:00:00.000Z",
|
||||
@@ -86,6 +89,14 @@ class ContestAdminAPITest(APITestCase):
|
||||
response = self.client.post(self.url, data=data)
|
||||
self.assertEqual(response.data["code"], 0)
|
||||
|
||||
def test_group_contest_admin_successfully(self):
|
||||
self.client.login(username="test2", password="testbb")
|
||||
data = {"title": "title6", "description": "description6", "mode": 2, "contest_type": 0,
|
||||
"show_rank": True, "show_user_submission": True, "start_time": "2015-08-15T10:00:00.000Z",
|
||||
"end_time": "2015-08-15T12:00:00.000Z", "groups": [self.group.id], "visible": True}
|
||||
response = self.client.post(self.url, data=data)
|
||||
self.assertEqual(response.data["code"], 0)
|
||||
|
||||
def test_time_error(self):
|
||||
self.client.login(username="test1", password="testaa")
|
||||
data = {"title": "title2", "description": "description2", "mode": 1, "contest_type": 2,
|
||||
@@ -141,6 +152,15 @@ class ContestAdminAPITest(APITestCase):
|
||||
self.assertEqual(response.data["data"]["end_time"], "2015-08-15T13:00:00Z")
|
||||
self.assertEqual(response.data["data"]["visible"], False)
|
||||
|
||||
def test_edit_group_contest_unsuccessfully(self):
|
||||
self.client.login(username="test2", password="testbb")
|
||||
data = {"id": self.group_contest.id, "title": "titleyyy", "description": "descriptionyyyy", "mode": 1,
|
||||
"contest_type": 0, "show_rank": True, "show_user_submission": True,
|
||||
"start_time": "2015-08-15T10:00:00.000Z", "end_time": "2015-08-15T13:00:00.000Z",
|
||||
"groups": [self.group.id], "visible": False}
|
||||
response = self.client.put(self.url, data=data)
|
||||
self.assertEqual(response.data["code"], 1)
|
||||
|
||||
def test_edit_group_at_least_one(self):
|
||||
self.client.login(username="test1", password="testaa")
|
||||
data = {"id": self.group_contest.id, "title": "titleyyy", "description": "descriptionyyyy", "mode": 1,
|
||||
@@ -169,7 +189,8 @@ class ContestAdminAPITest(APITestCase):
|
||||
|
||||
def test_edit_global_contest_password_exists(self):
|
||||
self.client.login(username="test1", password="testaa")
|
||||
data = {"id": self.global_contest.id, "title": "title0", "description": "description0", "mode": 1, "contest_type": 2,
|
||||
data = {"id": self.global_contest.id, "title": "title0", "description": "description0", "mode": 1,
|
||||
"contest_type": 2,
|
||||
"show_rank": True, "show_user_submission": True, "start_time": "2015-08-15T10:00:00.000Z",
|
||||
"end_time": "2015-08-15T12:00:00.000Z", "visible": True}
|
||||
response = self.client.put(self.url, data=data)
|
||||
@@ -189,6 +210,10 @@ class ContestAdminAPITest(APITestCase):
|
||||
self.client.login(username="test1", password="testaa")
|
||||
self.assertEqual(self.client.get(self.url).data["code"], 0)
|
||||
|
||||
def test_get_data_successfully_by_normal_admin(self):
|
||||
self.client.login(username="test2", password="testbb")
|
||||
self.assertEqual(self.client.get(self.url).data["code"], 0)
|
||||
|
||||
def test_keyword_contest(self):
|
||||
self.client.login(username="test1", password="testaa")
|
||||
response = self.client.get(self.url + "?visible=true")
|
||||
@@ -209,24 +234,30 @@ class ContestProblemAdminAPItEST(APITestCase):
|
||||
self.user = User.objects.create(username="test1", admin_type=SUPER_ADMIN)
|
||||
self.user.set_password("testaa")
|
||||
self.user.save()
|
||||
self.user2 = User.objects.create(username="test2", admin_type=ADMIN)
|
||||
self.user2.set_password("testaa")
|
||||
self.user2.save()
|
||||
self.user3 = User.objects.create(username="test3", admin_type=ADMIN)
|
||||
self.user3.set_password("testaa")
|
||||
self.user3.save()
|
||||
self.client.login(username="test1", password="testaa")
|
||||
self.global_contest = Contest.objects.create(title="titlex", description="descriptionx", mode=1,
|
||||
contest_type=2, show_rank=True, show_user_submission=True,
|
||||
start_time="2015-08-15T10:00:00.000Z",
|
||||
end_time="2015-08-15T12:00:00.000Z",
|
||||
password="aacc", created_by=User.objects.get(username="test1"))
|
||||
self. contest_problem = ContestProblem.objects.create(title="titlex",
|
||||
description="descriptionx",
|
||||
input_description="input1_description",
|
||||
output_description="output1_description",
|
||||
test_case_id="1",
|
||||
samples=json.dumps([{"input": "1 1", "output": "2"}]),
|
||||
time_limit=100,
|
||||
memory_limit=1000,
|
||||
hint="hint1",
|
||||
created_by=User.objects.get(username="test1"),
|
||||
contest=Contest.objects.get(title="titlex"),
|
||||
sort_index="a")
|
||||
self.contest_problem = ContestProblem.objects.create(title="titlex",
|
||||
description="descriptionx",
|
||||
input_description="input1_description",
|
||||
output_description="output1_description",
|
||||
test_case_id="1",
|
||||
samples=json.dumps([{"input": "1 1", "output": "2"}]),
|
||||
time_limit=100,
|
||||
memory_limit=1000,
|
||||
hint="hint1",
|
||||
created_by=User.objects.get(username="test1"),
|
||||
contest=Contest.objects.get(title="titlex"),
|
||||
sort_index="a")
|
||||
|
||||
# 以下是发布比赛题目的测试
|
||||
def test_invalid_format(self):
|
||||
@@ -311,6 +342,10 @@ class ContestProblemAdminAPItEST(APITestCase):
|
||||
self.client.login(username="test1", password="testaa")
|
||||
self.assertEqual(self.client.get(self.url).data["code"], 0)
|
||||
|
||||
def test_get_data_unsuccessfully(self):
|
||||
self.client.login(username="test1", password="testaa")
|
||||
self.assertEqual(self.client.get(self.url+"?contest_id=12").data["code"], 1)
|
||||
|
||||
def test_keyword_contest(self):
|
||||
self.client.login(username="test1", password="testaa")
|
||||
response = self.client.get(self.url + "?visible=true")
|
||||
@@ -333,4 +368,33 @@ class ContestProblemAdminAPItEST(APITestCase):
|
||||
response = self.client.get(self.url, data=data)
|
||||
self.assertEqual(response.data["code"], 0)
|
||||
|
||||
def test_query_contest_problem_exists_by_contest_id(self):
|
||||
self.client.login(username="test3", password="testaa")
|
||||
response = self.client.get(self.url + "?contest_id=1")
|
||||
self.assertEqual(response.data["code"], 0)
|
||||
self.assertEqual(len(response.data["data"]), 0)
|
||||
|
||||
def test_query_contest_problem_exists_by_normal_admin(self):
|
||||
self.client.login(username="test2", password="testaa")
|
||||
data = {"contest_problem_id": self.contest_problem.id}
|
||||
response = self.client.get(self.url, data=data)
|
||||
self.assertEqual(response.data["code"], 0)
|
||||
|
||||
def test_edit_problem_unsuccessfully_can_not_access(self):
|
||||
self.client.login(username="test2", password="testaa")
|
||||
data = {"id": self.contest_problem.id,
|
||||
"title": "title2222222",
|
||||
"description": "description22222222",
|
||||
"input_description": "input_description2",
|
||||
"output_description": "output_description2",
|
||||
"test_case_id": "1",
|
||||
"source": "source1",
|
||||
"samples": [{"input": "1 1", "output": "2"}],
|
||||
"time_limit": "100",
|
||||
"memory_limit": "1000",
|
||||
"hint": "hint1",
|
||||
"sort_index": "b",
|
||||
"visible": True}
|
||||
response = self.client.put(self.url, data=data)
|
||||
self.assertEqual(response.data["code"], 1)
|
||||
|
||||
|
||||
@@ -107,6 +107,8 @@ class ContestAdminAPIView(APIView):
|
||||
return error_response(u"请至少选择一个小组")
|
||||
if data["start_time"] >= data["end_time"]:
|
||||
return error_response(u"比赛的开始时间不能晚于或等于比赛结束的时间")
|
||||
if request.user.admin_type != SUPER_ADMIN and request.user != contest.created_by:
|
||||
return error_response(u"你无权修改该比赛!")
|
||||
contest.title = data["title"]
|
||||
contest.description = data["description"]
|
||||
contest.mode = data["mode"]
|
||||
@@ -187,10 +189,14 @@ class ContestProblemAdminAPIView(APIView):
|
||||
serializer = EditContestProblemSerializer(data=request.data)
|
||||
if serializer.is_valid():
|
||||
data = serializer.data
|
||||
|
||||
try:
|
||||
contest_problem = ContestProblem.objects.get(id=data["id"])
|
||||
except ContestProblem.DoesNotExist:
|
||||
return error_response(u"该比赛题目不存在!")
|
||||
contest = Contest.objects.get(id=contest_problem.contest_id)
|
||||
if request.user.admin_type != SUPER_ADMIN and contest.created_by != request.user:
|
||||
return error_response(u"你无权修改该题目!")
|
||||
contest_problem.title = data["title"]
|
||||
contest_problem.description = data["description"]
|
||||
contest_problem.input_description = data["input_description"]
|
||||
|
||||
Reference in New Issue
Block a user