Accept Merge Request #67 : (hohoTT-dev -> dev)
Merge Request: 修复测试中的 bug Created By: @virusdefender Accepted By: @virusdefender URL: https://coding.net/u/virusdefender/p/qduoj/git/merge/67
This commit is contained in:
@@ -1,5 +1,6 @@
|
|||||||
# coding=utf-8
|
# coding=utf-8
|
||||||
from django.core.urlresolvers import reverse
|
from django.core.urlresolvers import reverse
|
||||||
|
from django.test import TestCase
|
||||||
|
|
||||||
from rest_framework.test import APITestCase, APIClient
|
from rest_framework.test import APITestCase, APIClient
|
||||||
|
|
||||||
@@ -87,3 +88,27 @@ class AnnouncementAPITest(APITestCase):
|
|||||||
self.assertEqual(response.data["code"], 0)
|
self.assertEqual(response.data["code"], 0)
|
||||||
for item in response.data["data"]:
|
for item in response.data["data"]:
|
||||||
self.assertEqual(item["visible"], True)
|
self.assertEqual(item["visible"], True)
|
||||||
|
|
||||||
|
|
||||||
|
class AnnouncementPageTest(TestCase):
|
||||||
|
def setUp(self):
|
||||||
|
user = User.objects.create(username="test")
|
||||||
|
user.set_password("testaa")
|
||||||
|
user.save()
|
||||||
|
Announcement.objects.create(title="aa",
|
||||||
|
content="AA",
|
||||||
|
created_by=User.objects.get(username="test"),
|
||||||
|
visible=True)
|
||||||
|
|
||||||
|
Announcement.objects.create(title="bb",
|
||||||
|
content="BB",
|
||||||
|
created_by=User.objects.get(username="test"),
|
||||||
|
visible=False)
|
||||||
|
|
||||||
|
def test_success_announcement(self):
|
||||||
|
response = self.client.get('/announcement/1/')
|
||||||
|
self.assertEqual(response.status_code, 200)
|
||||||
|
|
||||||
|
def test_announcement_does_not_exist(self):
|
||||||
|
response = self.client.get('/announcement/3/')
|
||||||
|
self.assertTemplateUsed(response, "utils/error.html")
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ from account.models import User
|
|||||||
|
|
||||||
|
|
||||||
class Group(models.Model):
|
class Group(models.Model):
|
||||||
name = models.CharField(max_length=30)
|
name = models.CharField(max_length=30, unique=True)
|
||||||
description = models.TextField()
|
description = models.TextField()
|
||||||
create_time = models.DateTimeField(auto_now_add=True)
|
create_time = models.DateTimeField(auto_now_add=True)
|
||||||
admin = models.ForeignKey(User, related_name="my_groups")
|
admin = models.ForeignKey(User, related_name="my_groups")
|
||||||
@@ -26,10 +26,11 @@ class UserGroupRelation(models.Model):
|
|||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
db_table = "user_group_relation"
|
db_table = "user_group_relation"
|
||||||
|
unique_together = ("group", "user")
|
||||||
|
|
||||||
|
|
||||||
class JoinGroupRequest(models.Model):
|
class JoinGroupRequest(models.Model):
|
||||||
group = models.ForeignKey(User)
|
group = models.ForeignKey(Group)
|
||||||
user = models.ForeignKey(User, related_name="my_join_group_requests")
|
user = models.ForeignKey(User, related_name="my_join_group_requests")
|
||||||
message = models.TextField()
|
message = models.TextField()
|
||||||
create_time = models.DateTimeField(auto_now_add=True)
|
create_time = models.DateTimeField(auto_now_add=True)
|
||||||
|
|||||||
202
group/tests.py
202
group/tests.py
@@ -1,3 +1,201 @@
|
|||||||
from django.test import TestCase
|
# coding=utf-8
|
||||||
|
import json
|
||||||
|
|
||||||
# Create your tests here.
|
from django.core.urlresolvers import reverse
|
||||||
|
|
||||||
|
from rest_framework.test import APITestCase, APIClient
|
||||||
|
|
||||||
|
from account.models import User, REGULAR_USER, ADMIN, SUPER_ADMIN
|
||||||
|
from group.models import Group, UserGroupRelation, JoinGroupRequest
|
||||||
|
|
||||||
|
|
||||||
|
class GroupAPITest(APITestCase):
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
class GroupAdminAPITest(APITestCase):
|
||||||
|
def _create_group(self, name, join_group_setting):
|
||||||
|
group = Group.objects.create(name=name, description="des0",
|
||||||
|
join_group_setting=join_group_setting, visible=True,
|
||||||
|
admin=self.user)
|
||||||
|
return group
|
||||||
|
|
||||||
|
def setUp(self):
|
||||||
|
self.client = APIClient()
|
||||||
|
self.url = reverse('group_admin_api')
|
||||||
|
self.user = User.objects.create(username="test", admin_type=SUPER_ADMIN)
|
||||||
|
self.user.set_password("testaa")
|
||||||
|
self.user.save()
|
||||||
|
self.group = self._create_group("group1", 0)
|
||||||
|
self.client.login(username="test", password="testaa")
|
||||||
|
|
||||||
|
# 以下是创建小组的测试
|
||||||
|
def test_invalid_format(self):
|
||||||
|
data = {"name": "group1"}
|
||||||
|
response = self.client.post(self.url, data=data)
|
||||||
|
self.assertEqual(response.data["code"], 1)
|
||||||
|
|
||||||
|
def test_create_group_successfully(self):
|
||||||
|
data = {"name": "group0", "description": "des0", "join_group_setting": "1"}
|
||||||
|
response = self.client.post(self.url, data=data)
|
||||||
|
self.assertEqual(response.data["code"], 0)
|
||||||
|
|
||||||
|
def test_group_already_exists(self):
|
||||||
|
data = {"name": "group1", "description": "des0", "join_group_setting": "1"}
|
||||||
|
response = self.client.post(self.url, data=data)
|
||||||
|
self.assertEqual(response.data, {"code": 1, "data": u"小组名已经存在"})
|
||||||
|
|
||||||
|
# 以下是修改小组的测试
|
||||||
|
def test_put_invalid_data(self):
|
||||||
|
data = {"name": "group1"}
|
||||||
|
response = self.client.put(self.url, data=data)
|
||||||
|
self.assertEqual(response.data["code"], 1)
|
||||||
|
|
||||||
|
def test_edit_group_does_not_exist(self):
|
||||||
|
data = {"group_id": self.group.id + 1, "name": "group0", "description": "des0",
|
||||||
|
"join_group_setting": 2}
|
||||||
|
response = self.client.put(self.url, data=data)
|
||||||
|
self.assertEqual(response.data, {"code": 1, "data": u"小组不存在"})
|
||||||
|
|
||||||
|
def test_edit_group_successfully(self):
|
||||||
|
data = {"group_id": self.group.id, "name": "group0", "description": "des0",
|
||||||
|
"join_group_setting": 2}
|
||||||
|
response = self.client.put(self.url, data=data)
|
||||||
|
self.assertEqual(response.data["code"], 0)
|
||||||
|
self.assertEqual(response.data["data"]["name"], "group0")
|
||||||
|
self.assertEqual(response.data["data"]["join_group_setting"], 2)
|
||||||
|
|
||||||
|
def test_edit_group_exists(self):
|
||||||
|
group = self._create_group("group2", 1)
|
||||||
|
data = {"group_id": group.id, "name": "group1", "description": "des0",
|
||||||
|
"join_group_setting": 0}
|
||||||
|
response = self.client.put(self.url, data=data)
|
||||||
|
self.assertEqual(response.data, {"code": 1, "data": u"小组名已经存在"})
|
||||||
|
|
||||||
|
# 以下是查询小组列表或者是单个小组时的测试
|
||||||
|
def test_select_group_does_not_exist(self):
|
||||||
|
data = {"group_id": self.group.id + 1}
|
||||||
|
response = self.client.get(self.url, data=data)
|
||||||
|
self.assertEqual(response.data, {"code": 1, "data": u"小组不存在"})
|
||||||
|
|
||||||
|
def test_select_group_successfully(self):
|
||||||
|
data = {"group_id": self.group.id}
|
||||||
|
response = self.client.get(self.url, data=data)
|
||||||
|
self.assertEqual(response.data["code"], 0)
|
||||||
|
|
||||||
|
def test_success_get_all_groups(self):
|
||||||
|
self.assertEqual(self.client.get(self.url).data["code"], 0)
|
||||||
|
|
||||||
|
|
||||||
|
class GroupMemberAdminAPITest(APITestCase):
|
||||||
|
def setUp(self):
|
||||||
|
self.client = APIClient()
|
||||||
|
self.url = reverse('group_member_admin_api')
|
||||||
|
self.user = User.objects.create(username="test", admin_type=SUPER_ADMIN)
|
||||||
|
self.user.set_password("testaa")
|
||||||
|
self.user.save()
|
||||||
|
self.user1 = User.objects.create(username="member1", admin_type=REGULAR_USER)
|
||||||
|
self.user1.set_password("testxx")
|
||||||
|
self.user1.save()
|
||||||
|
self.client.login(username="test", password="testaa")
|
||||||
|
self.group = Group.objects.create(name="group1", description="des1",
|
||||||
|
join_group_setting="1", visible="True",
|
||||||
|
admin=self.user)
|
||||||
|
UserGroupRelation.objects.create(group=self.group, user=self.user1)
|
||||||
|
|
||||||
|
# 以下是查询小组成员的测试
|
||||||
|
def test_missing_parameter(self):
|
||||||
|
self.assertEqual(self.client.get(self.url).data, {"code": 1, "data": u"参数错误"})
|
||||||
|
|
||||||
|
def test_group_does_not_exist(self):
|
||||||
|
data = {"group_id": self.group.id + 1}
|
||||||
|
response = self.client.get(self.url, data=data)
|
||||||
|
self.assertEqual(response.data, {"code": 1, "data": u"小组不存在"})
|
||||||
|
|
||||||
|
def test_get_member_list_successfully(self):
|
||||||
|
data = {"group_id": self.group.id}
|
||||||
|
response = self.client.get(self.url, data=data)
|
||||||
|
self.assertEqual(response.data["code"], 0)
|
||||||
|
|
||||||
|
# 以下是删除小组成员的测试
|
||||||
|
def test_invalid_format(self):
|
||||||
|
data = {"members": [self.user1.id]}
|
||||||
|
response = self.client.put(self.url, data=json.dumps(data), content_type="application/json")
|
||||||
|
self.assertEqual(response.data["code"], 1)
|
||||||
|
|
||||||
|
def test_del_group_does_not_exist(self):
|
||||||
|
data = {"group_id": self.group.id + 1, "members": [self.user1.id]}
|
||||||
|
response = self.client.put(self.url, data=json.dumps(data), content_type="application/json")
|
||||||
|
self.assertEqual(response.data, {"code": 1, "data": u"小组不存在"})
|
||||||
|
|
||||||
|
def test_success_del_members(self):
|
||||||
|
data = {"group_id": self.group.id, "members": [self.user1.id]}
|
||||||
|
response = self.client.put(self.url, data=json.dumps(data), content_type="application/json")
|
||||||
|
self.assertEqual(response.data, {"code": 0, "data": u"删除成功"})
|
||||||
|
try:
|
||||||
|
UserGroupRelation.objects.get(group=self.group, user=self.user1)
|
||||||
|
raise AssertionError()
|
||||||
|
except UserGroupRelation.DoesNotExist:
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
class JoinGroupAPITest(APITestCase):
|
||||||
|
def _create_group(self, name, join_group_setting):
|
||||||
|
group = Group.objects.create(name=name, description="des0",
|
||||||
|
join_group_setting=join_group_setting, visible="True",
|
||||||
|
admin=self.user)
|
||||||
|
return group
|
||||||
|
|
||||||
|
def setUp(self):
|
||||||
|
self.client = APIClient()
|
||||||
|
self.url = reverse('group_join_admin_api')
|
||||||
|
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.group = self._create_group("group0", 0)
|
||||||
|
|
||||||
|
# 以下是用户要加入某个小组的测试
|
||||||
|
def test_invalid_format(self):
|
||||||
|
data = {"message": "message1"}
|
||||||
|
response = self.client.post(self.url, data=data)
|
||||||
|
self.assertEqual(response.data["code"], 1)
|
||||||
|
|
||||||
|
def test_group_does_not_exist(self):
|
||||||
|
data = {"group_id": self.group.id + 1, "message": "message1"}
|
||||||
|
response = self.client.post(self.url, data=data)
|
||||||
|
self.assertEqual(response.data, {"code": 1, "data": u"小组不存在"})
|
||||||
|
|
||||||
|
def test_join0(self):
|
||||||
|
data = {"group_id": self.group.id, "message": "message0"}
|
||||||
|
response = self.client.post(self.url, data=data)
|
||||||
|
self.assertEqual(response.data, {"code": 0, "data": u"你已经成功的加入该小组"})
|
||||||
|
|
||||||
|
# 再加入一遍 已经是小组成员了
|
||||||
|
data = {"group_id": self.group.id, "message": "message0"}
|
||||||
|
response = self.client.post(self.url, data=data)
|
||||||
|
self.assertEqual(response.data, {"code": 1, "data": u"你已经是小组成员了"})
|
||||||
|
|
||||||
|
def test_success_join1(self):
|
||||||
|
group = self._create_group("group1", 1)
|
||||||
|
data = {"group_id": group.id, "message": "message1"}
|
||||||
|
response = self.client.post(self.url, data=data)
|
||||||
|
self.assertEqual(response.data, {"code": 0, "data": u"申请提交成功,请等待审核"})
|
||||||
|
try:
|
||||||
|
JoinGroupRequest.objects.get(user=self.user, group=group, status=False)
|
||||||
|
except JoinGroupRequest.DoesNotExist:
|
||||||
|
raise AssertionError()
|
||||||
|
|
||||||
|
def test_success_join2(self):
|
||||||
|
group = self._create_group("group2", 2)
|
||||||
|
data = {"group_id": group.id, "message": "message2"}
|
||||||
|
response = self.client.post(self.url, data=data)
|
||||||
|
self.assertEqual(response.data, {"code": 1, "data": u"该小组不允许任何人加入"})
|
||||||
|
|
||||||
|
# 以下是搜索小组的测试
|
||||||
|
def test_error_get_data(self):
|
||||||
|
self.assertEqual(self.client.get(self.url).data["code"], 1)
|
||||||
|
|
||||||
|
def test_query_by_keyword(self):
|
||||||
|
response = self.client.get(self.url + "?keyword=group0")
|
||||||
|
self.assertEqual(response.data["code"], 0)
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
# coding=utf-8
|
# coding=utf-8
|
||||||
from django.shortcuts import render
|
from django.shortcuts import render
|
||||||
|
from django.db import IntegrityError
|
||||||
|
|
||||||
from rest_framework.views import APIView
|
from rest_framework.views import APIView
|
||||||
|
|
||||||
@@ -48,10 +49,13 @@ class GroupAdminAPIView(APIView, GroupAPIViewBase):
|
|||||||
serializer = CreateGroupSerializer(data=request.data)
|
serializer = CreateGroupSerializer(data=request.data)
|
||||||
if serializer.is_valid():
|
if serializer.is_valid():
|
||||||
data = serializer.data
|
data = serializer.data
|
||||||
group = Group.objects.create(name=data["name"],
|
try:
|
||||||
description=data["description"],
|
group = Group.objects.create(name=data["name"],
|
||||||
join_group_setting=data["join_group_setting"],
|
description=data["description"],
|
||||||
admin=request.user)
|
join_group_setting=data["join_group_setting"],
|
||||||
|
admin=request.user)
|
||||||
|
except IntegrityError:
|
||||||
|
return error_response(u"小组名已经存在")
|
||||||
return success_response(GroupSerializer(group).data)
|
return success_response(GroupSerializer(group).data)
|
||||||
else:
|
else:
|
||||||
return serializer_invalid_response(serializer)
|
return serializer_invalid_response(serializer)
|
||||||
@@ -70,10 +74,14 @@ class GroupAdminAPIView(APIView, GroupAPIViewBase):
|
|||||||
group = self.get_group(request, data["group_id"])
|
group = self.get_group(request, data["group_id"])
|
||||||
except Group.DoesNotExist:
|
except Group.DoesNotExist:
|
||||||
return error_response(u"小组不存在")
|
return error_response(u"小组不存在")
|
||||||
group.name = data["name"]
|
try:
|
||||||
group.description = data["description"]
|
group.name = data["name"]
|
||||||
group.join_group_setting = data["join_group_setting"]
|
group.description = data["description"]
|
||||||
group.save()
|
group.join_group_setting = data["join_group_setting"]
|
||||||
|
group.save()
|
||||||
|
except IntegrityError:
|
||||||
|
return error_response(u"小组名已经存在")
|
||||||
|
|
||||||
return success_response(GroupSerializer(group).data)
|
return success_response(GroupSerializer(group).data)
|
||||||
else:
|
else:
|
||||||
return serializer_invalid_response(serializer)
|
return serializer_invalid_response(serializer)
|
||||||
@@ -133,8 +141,12 @@ class GroupMemberAdminAPIView(APIView, GroupAPIViewBase):
|
|||||||
|
|
||||||
|
|
||||||
def join_group(user, group):
|
def join_group(user, group):
|
||||||
return UserGroupRelation.objects.create(user=user, group=group)
|
try:
|
||||||
|
UserGroupRelation.objects.create(user=user, group=group)
|
||||||
|
return True
|
||||||
|
except IntegrityError:
|
||||||
|
return False
|
||||||
|
|
||||||
|
|
||||||
class JoinGroupAPIView(APIView):
|
class JoinGroupAPIView(APIView):
|
||||||
@login_required
|
@login_required
|
||||||
@@ -149,12 +161,15 @@ class JoinGroupAPIView(APIView):
|
|||||||
data = serializer.data
|
data = serializer.data
|
||||||
try:
|
try:
|
||||||
group = Group.objects.get(id=data["group_id"])
|
group = Group.objects.get(id=data["group_id"])
|
||||||
except Group.DesoNotExist:
|
except Group.DoesNotExist:
|
||||||
return error_response(u"小组不存在")
|
return error_response(u"小组不存在")
|
||||||
if group.join_group_setting == 0:
|
if group.join_group_setting == 0:
|
||||||
join_group(request.user, group)
|
if join_group(request.user, group):
|
||||||
return success_response(u"你已经成功的加入该小组")
|
return success_response(u"你已经成功的加入该小组")
|
||||||
|
else:
|
||||||
|
return error_response(u"你已经是小组成员了")
|
||||||
elif group.join_group_setting == 1:
|
elif group.join_group_setting == 1:
|
||||||
|
JoinGroupRequest.objects.create(user=request.user, group=group, message=data["message"])
|
||||||
return success_response(u"申请提交成功,请等待审核")
|
return success_response(u"申请提交成功,请等待审核")
|
||||||
elif group.join_group_setting == 2:
|
elif group.join_group_setting == 2:
|
||||||
return error_response(u"该小组不允许任何人加入")
|
return error_response(u"该小组不允许任何人加入")
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ from account.views import (UserLoginAPIView, UsernameCheckAPIView, UserRegisterA
|
|||||||
UserChangePasswordAPIView, EmailCheckAPIView,
|
UserChangePasswordAPIView, EmailCheckAPIView,
|
||||||
UserAPIView, UserAdminAPIView)
|
UserAPIView, UserAdminAPIView)
|
||||||
from announcement.views import AnnouncementAPIView, AnnouncementAdminAPIView
|
from announcement.views import AnnouncementAPIView, AnnouncementAdminAPIView
|
||||||
from group.views import GroupAdminAPIView
|
from group.views import GroupAdminAPIView, GroupMemberAdminAPIView, JoinGroupAPIView
|
||||||
from admin.views import AdminTemplateView
|
from admin.views import AdminTemplateView
|
||||||
|
|
||||||
from problem.views import ProblemAdminAPIView
|
from problem.views import ProblemAdminAPIView
|
||||||
@@ -39,6 +39,8 @@ urlpatterns = [
|
|||||||
url(r'^problems/$', TemplateView.as_view(template_name="oj/problem/problem_list.html"), name="problem_list_page"),
|
url(r'^problems/$', TemplateView.as_view(template_name="oj/problem/problem_list.html"), name="problem_list_page"),
|
||||||
url(r'^admin/template/(?P<template_dir>\w+)/(?P<template_name>\w+).html', AdminTemplateView.as_view(), name="admin_template"),
|
url(r'^admin/template/(?P<template_dir>\w+)/(?P<template_name>\w+).html', AdminTemplateView.as_view(), name="admin_template"),
|
||||||
url(r'^api/admin/group/$', GroupAdminAPIView.as_view(), name="group_admin_api"),
|
url(r'^api/admin/group/$', GroupAdminAPIView.as_view(), name="group_admin_api"),
|
||||||
|
url(r'^api/admin/group_member/$', GroupMemberAdminAPIView.as_view(), name="group_member_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'^api/admin/tag/$', ProblemTagAdminAPIView.as_view(), name="problem_tag_admin_api"),
|
||||||
|
|||||||
Reference in New Issue
Block a user