diff --git a/group/migrations/0002_auto_20150811_1649.py b/group/migrations/0002_auto_20150811_1649.py new file mode 100644 index 0000000..2b6a65e --- /dev/null +++ b/group/migrations/0002_auto_20150811_1649.py @@ -0,0 +1,28 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import models, migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('group', '0001_initial'), + ] + + operations = [ + migrations.AlterField( + model_name='group', + name='name', + field=models.CharField(unique=True, max_length=30), + ), + migrations.AlterField( + model_name='joingrouprequest', + name='group', + field=models.ForeignKey(to='group.Group'), + ), + migrations.AlterUniqueTogether( + name='usergrouprelation', + unique_together=set([('group', 'user')]), + ), + ] diff --git a/group/migrations/0004_merge.py b/group/migrations/0004_merge.py new file mode 100644 index 0000000..febb5e2 --- /dev/null +++ b/group/migrations/0004_merge.py @@ -0,0 +1,15 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import models, migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('group', '0003_auto_20150811_1906'), + ('group', '0002_auto_20150811_1649'), + ] + + operations = [ + ] diff --git a/group/tests.py b/group/tests.py index 7ca1225..f62dfa5 100644 --- a/group/tests.py +++ b/group/tests.py @@ -83,7 +83,7 @@ class GroupAdminAPITest(APITestCase): response = self.client.get(self.url, data=data) self.assertEqual(response.data["code"], 0) - def test_success_get_all_groups(self): + def tests_get_all_groups_successfully(self): self.assertEqual(self.client.get(self.url).data["code"], 0) @@ -128,7 +128,7 @@ class GroupMemberAdminAPITest(APITestCase): 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): + def test_del_members_successfully(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"删除成功"}) @@ -166,7 +166,7 @@ class JoinGroupAPITest(APITestCase): response = self.client.post(self.url, data=data) self.assertEqual(response.data, {"code": 1, "data": u"小组不存在"}) - def test_join0(self): + def test_join0_successfully(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"你已经成功的加入该小组"}) @@ -176,17 +176,19 @@ class JoinGroupAPITest(APITestCase): response = self.client.post(self.url, data=data) self.assertEqual(response.data, {"code": 1, "data": u"你已经是小组成员了"}) - def test_success_join1(self): + def test_join1_successfully(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() + JoinGroupRequest.objects.get(user=self.user, group=group, status=False) - def test_success_join2(self): + # 再提交一遍 已经提交过申请,请等待审核 + data = {"group_id": group.id, "message": "message1"} + response = self.client.post(self.url, data=data) + self.assertEqual(response.data, {"code": 1, "data": u"你已经提交过申请了,请等待审核"}) + + def test_join2_successfully(self): group = self._create_group("group2", 2) data = {"group_id": group.id, "message": "message2"} response = self.client.post(self.url, data=data) @@ -199,3 +201,56 @@ class JoinGroupAPITest(APITestCase): def test_query_by_keyword(self): response = self.client.get(self.url + "?keyword=group0") self.assertEqual(response.data["code"], 0) + + +class JoinGroupRequestAdminAPITest(APITestCase): + def setUp(self): + self.client = APIClient() + self.url = reverse('join_group_request_admin_api') + self.user = User.objects.create(username="test1", admin_type=SUPER_ADMIN) + self.user.set_password("testaa") + self.user.save() + self.user1 = User.objects.create(username="test2") + self.user1.set_password("testbb") + self.user1.save() + self.client.login(username="test1", password="testaa") + self.group = Group.objects.create(name="group1", description="des0", + join_group_setting=1, visible="True", + admin=self.user) + self.request = JoinGroupRequest.objects.create(group=self.group, user=self.user1, + message="message1") + + # 以下是管理的群的加群请求测试 + def test_get_all_request_successfully(self): + self.assertEqual(self.client.get(self.url).data["code"], 0) + + # 以下是同意或者拒绝加入小组请求的测试 + def test_invalid_format(self): + data = {"requested_id": self.request.id} + response = self.client.put(self.url, data=data) + self.assertEqual(response.data["code"], 1) + + def test_request_does_not_exist(self): + data = {"request_id": self.request.id + 1, "status": False} + response = self.client.put(self.url, data=data) + self.assertEqual(response.data, {"code": 1, "data": u"请求不存在"}) + + def test_request_refuse_successfully(self): + data = {"request_id": self.request.id, "status": False} + response = self.client.put(self.url, data=data) + self.assertEqual(response.data, {"code": 0, "data": u"已拒绝"}) + self.assertEqual(JoinGroupRequest.objects.get(id=self.request.id).status, True) + + def test_join_group_successfully(self): + data = {"request_id": self.request.id, "status": True} + response = self.client.put(self.url, data=data) + self.assertEqual(response.data, {"code": 0, "data": u"加入成功"}) + UserGroupRelation.objects.get(group=self.group, user=self.user1) + + # 再加入一次,此时返回的消息应为 加入失败,已经在本小组内 + request = JoinGroupRequest.objects.create(group=self.group, user=self.user1, + message="message2") + data = {"request_id": request.id, "status": True} + response = self.client.put(self.url, data=data) + self.assertEqual(response.data, {"code": 1, "data": u"加入失败,已经在本小组内"}) + diff --git a/group/views.py b/group/views.py index 9edb9c6..79ccbd4 100644 --- a/group/views.py +++ b/group/views.py @@ -185,7 +185,7 @@ class JoinGroupAPIView(APIView): def get(self, request): """ - 搜素小组的api,需要传递keyword参数 + 搜索小组的api,需要传递keyword参数 --- response_serializer: GroupSerializer """ @@ -220,7 +220,7 @@ class JoinGroupRequestAdminAPIView(APIView, GroupAPIViewBase): try: join_request = JoinGroupRequest.objects.get(id=data["request_id"], group__admin=request.user, status=False) except JoinGroupRequest.DoesNotExist: - return error_response(u"小组不存在") + return error_response(u"请求不存在") join_request.status = True join_request.save() diff --git a/problem/tests.py b/problem/tests.py index 2ee84b2..708d7f2 100644 --- a/problem/tests.py +++ b/problem/tests.py @@ -1,4 +1,6 @@ # coding=utf-8 +import json + from django.test import TestCase from django.core.urlresolvers import reverse @@ -13,23 +15,48 @@ class ProblemPageTest(TestCase): class ProblemAdminTest(APITestCase): + def _create_data(self, problem_id, visible, tags): + data = {"id": problem_id, + "title": "title1", + "description": "des1", + "test_case_id": "1", + "source": "source1", + "samples": [{"input": "1 1", "output": "2"}], + "time_limit": "100", + "memory_limit": "1000", + "difficulty": "1", + "hint": "hint1", + "visible": visible, + "tags": tags} + return data + def setUp(self): self.client = APIClient() self.url = reverse("problem_admin_api") - user = User.objects.create(username="test", admin_type=SUPER_ADMIN) - user.set_password("testaa") - user.save() + 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") + ProblemTag.objects.create(name="tag1") + ProblemTag.objects.create(name="tag2") + self.problem = Problem.objects.create(title="title1", + description="des1", + test_case_id="1", + source="source1", + samples=[{"input": "1 1", "output": "2"}], + time_limit=100, + memory_limit=1000, + difficulty=1, + hint="hint1", + created_by=User.objects.get(username="test")) # 以下是发布题目的测试 def test_invalid_format(self): - self.client.login(username="test", password="testaa") data = {"title": "test1"} response = self.client.post(self.url, data=data) self.assertEqual(response.data["code"], 1) - def test_success_problem(self): - self.client.login(username="test", password="testaa") - ProblemTag.objects.create(name="tag1") + def test_release_problem_successfully(self): data = {"title": "title1", "description": "des1", "test_case_id": "1", @@ -40,76 +67,28 @@ class ProblemAdminTest(APITestCase): "difficulty": "1", "hint": "hint1", "tags": [1]} - response = self.client.post(self.url, data=data) + response = self.client.post(self.url, data=json.dumps(data), content_type="application/json") self.assertEqual(response.data["code"], 0) # 以下是编辑题目的测试 - def test_put_invalid_data(self): - self.client.login(username="test", password="testaa") + def test_invalid_data(self): data = {"title": "test0"} response = self.client.put(self.url, data=data) self.assertEqual(response.data["code"], 1) def test_problem_does_not_exist(self): - self.client.login(username="test", password="testaa") - ProblemTag.objects.create(name="tag1") tags = ProblemTag.objects.filter(id__in=[1]) - problem = Problem.objects.create(title="title1", - description="des1", - test_case_id="1", - source="source1", - samples=[{"input": "1 1", "output": "2"}], - time_limit=100, - memory_limit=1000, - difficulty=1, - hint="hint1", - created_by=User.objects.get(username="test")) - problem.tags.add(*tags) - data = {"id": 2, - "title": "title1", - "description": "des1", - "test_case_id": "1", - "source": "source1", - "samples": [{"input": "1 1", "output": "2"}], - "time_limit": "100", - "memory_limit": "1000", - "difficulty": "1", - "hint": "hint1", - "tags": [1]} - response = self.client.put(self.url, data=data) + self.problem.tags.add(*tags) + data = self._create_data(2, False, [1]) + 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_edit_problem(self): - self.client.login(username="test", password="testaa") - self.client.login(username="test", password="testaa") - ProblemTag.objects.create(name="tag1") - ProblemTag.objects.create(name="tag2") + def test_edit_problem_successfully(self): tags = ProblemTag.objects.filter(id__in=[1]) - problem0 = Problem.objects.create(title="title1", - description="des1", - test_case_id="1", - source="source1", - samples=[{"input": "1 1", "output": "2"}], - time_limit=100, - memory_limit=1000, - difficulty=1, - hint="hint1", - created_by=User.objects.get(username="test")) - problem0.tags.add(*tags) - data = {"id": 1, - "title": "title1", - "description": "des1", - "test_case_id": "1", - "source": "source1", - "samples": [{"input": "1 1", "output": "2"}], - "time_limit": "100", - "memory_limit": "1000", - "difficulty": "1", - "hint": "hint1", - "visible": True, - "tags": [1, 2]} + self.problem.tags.add(*tags) + data = self._create_data(1, True, [1, 2]) problem = Problem.objects.get(id=data["id"]) problem.tags.remove(*problem.tags.all()) problem.tags.add(*ProblemTag.objects.filter(id__in=data["tags"])) - response = self.client.put(self.url, data=data) + response = self.client.put(self.url, data=json.dumps(data), content_type="application/json") self.assertEqual(response.data["code"], 0) diff --git a/static/src/js/app/admin/group/group_detail.js b/static/src/js/app/admin/group/group_detail.js index 0c6561e..e946ba2 100644 --- a/static/src/js/app/admin/group/group_detail.js +++ b/static/src/js/app/admin/group/group_detail.js @@ -13,28 +13,8 @@ require(["jquery", "avalon", "csrf", "bs_alert", "validation"], function ($, ava page_count: 1, name: "", description: "", - join_group_setting: {0: false, 1: false, 2: false}, checked_setting: "0", - updateGroupInfo: function () { - $.ajax({ - beforeSend: csrfHeader, - url: "/api/admin/group/", - method: "put", - data: {group_id: avalon.vmodels.admin.group_id, name: vm.name, - description: vm.description, join_group_setting: vm.checked_setting}, - dataType: "json", - success: function (data) { - if (!data.code) { - bs_alert("修改成功"); - } - else { - bs_alert(data.data); - } - } - }) - }, - getNext: function () { if (!vm.next_page) return; @@ -110,6 +90,59 @@ require(["jquery", "avalon", "csrf", "bs_alert", "validation"], function ($, ava } } }) + + $("#edit_group_form") + .formValidation({ + framework: "bootstrap", + fields: { + name: { + validators: { + notEmpty: { + message: "请填写小组名" + }, + stringLength: { + max: 20, + message: '小组名长度必须在20位之内' + } + } + }, + description: { + validators: { + notEmpty: { + message: "请填写描述" + }, + stringLength: { + max: 300, + message: '描述长度必须在300位之内' + } + } + } + } + } + ).on('success.form.fv', function (e) { + e.preventDefault(); + var data = { + group_id: avalon.vmodels.admin.group_id, + name: vm.name, + description: vm.description, + join_group_setting: vm.checked_setting + }; + $.ajax({ + beforeSend: csrfHeader, + url: "/api/admin/group/", + method: "put", + data: data, + dataType: "json", + success: function (data) { + if (!data.code) { + bs_alert("修改成功"); + } + else { + bs_alert(data.data); + } + } + }) + }); }); }); \ No newline at end of file diff --git a/template/admin/group/group_detail.html b/template/admin/group/group_detail.html index dc695e0..7c4559f 100644 --- a/template/admin/group/group_detail.html +++ b/template/admin/group/group_detail.html @@ -25,11 +25,9 @@ -