diff --git a/account/views.py b/account/views.py index ea136631..7214c8a9 100644 --- a/account/views.py +++ b/account/views.py @@ -97,6 +97,7 @@ class UsernameCheckAPIView(APIView): else: return serializer_invalid_response(serializer) + class EmailCheckAPIView(APIView): def post(self, request): """ diff --git a/announcement/serializers.py b/announcement/serializers.py index a195b2ea..d6380b06 100644 --- a/announcement/serializers.py +++ b/announcement/serializers.py @@ -22,3 +22,9 @@ class AnnouncementSerializer(serializers.ModelSerializer): class Meta: model = Announcement + +class EditAnnouncementSerializer(serializers.Serializer): + id = serializers.IntegerField() + title = serializers.CharField(max_length=50) + content = serializers.CharField(max_length=10000) + visible = serializers.BooleanField() diff --git a/announcement/tests.py b/announcement/tests.py index f337a9c7..a7fd1208 100644 --- a/announcement/tests.py +++ b/announcement/tests.py @@ -4,9 +4,10 @@ from django.core.urlresolvers import reverse from rest_framework.test import APITestCase, APIClient from account.models import User +from announcement.models import Announcement -class AnnouncementAPITest(APITestCase): +class AnnouncementAdminAPITest(APITestCase): def setUp(self): self.client = APIClient() self.url = reverse("announcement_admin_api") @@ -14,6 +15,7 @@ class AnnouncementAPITest(APITestCase): user.set_password("test") user.save() + # 以下是发布公告的测试 def test_invalid_format(self): self.client.login(username="test", password="test") data = {"title": "test1"} @@ -24,4 +26,42 @@ class AnnouncementAPITest(APITestCase): self.client.login(username="test", password="test") data = {"title": "title0", "content": "content0"} response = self.client.post(self.url, data=data) - self.assertEqual(response.data, {"code": 0, "data": u"公告发布成功!"}) \ No newline at end of file + self.assertEqual(response.data, {"code": 0, "data": u"公告发布成功!"}) + + def test_post_invalid_data(self): + self.client.login(username="test", password="test") + data = {"title": "test"} + response = self.client.post(self.url, data=data) + self.assertEqual(response.data["code"], 1) + + # 以下是编辑公告的测试 + def test_put_invalid_data(self): + self.client.login(username="test", password="test") + data = {"title": "test0", "content": "test0", "visible": "True"} + response = self.client.put(self.url, data=data) + self.assertEqual(response.data["code"], 1) + + def test_announcement_does_not_exist(self): + announcement = Announcement.objects.create(title="aa", + content="AA", + created_by=User.objects.get(username="test")) + data = {"id": announcement.id + 1, "title": "11", "content": "22", "visible": True} + response = self.client.put(self.url, data=data) + self.assertEqual(response.data, {"code": 1, "data": u"该公告不存在!"}) + + def test_success_edit_announcement(self): + announcement = Announcement.objects.create(title="bb", + content="BB", + created_by=User.objects.get(username="test")) + data = {"id": announcement.id, "title": "11", "content": "22", "visible": True} + response = self.client.put(self.url, data=data) + self.assertEqual(response.data["code"], 0) + + +class AnnouncementAPITest(APITestCase): + def setUp(self): + self.client = APIClient() + self.url = reverse("announcement_list_api") + + def test_success_get_data(self): + self.assertEqual(self.client.get(self.url).data["code"], 0) diff --git a/announcement/views.py b/announcement/views.py index 9649875b..bc148893 100644 --- a/announcement/views.py +++ b/announcement/views.py @@ -6,7 +6,8 @@ from utils.shortcuts import serializer_invalid_response, error_response, success from account.models import User from utils.shortcuts import paginate from .models import Announcement -from .serializers import CreateAnnouncementSerializer, AnnouncementSerializer +from .serializers import (CreateAnnouncementSerializer, AnnouncementSerializer, + EditAnnouncementSerializer) class AnnouncementAdminAPIView(APIView): @@ -26,6 +27,28 @@ class AnnouncementAdminAPIView(APIView): else: return serializer_invalid_response(serializer) + def put(self, request): + """ + 公告编辑json api接口 + --- + request_serializer: EditAnnouncementSerializer + response_serializer: AnnouncementSerializer + """ + serializer = EditAnnouncementSerializer(data=request.DATA) + if serializer.is_valid(): + data = serializer.data + try: + announcement = Announcement.objects.get(id=data["id"]) + except Announcement.DoesNotExist: + return error_response(u"该公告不存在!") + announcement.title = data["title"] + announcement.content = data["content"] + announcement.visible = data["visible"] + announcement.save() + return success_response(AnnouncementSerializer(announcement).data) + else: + return serializer_invalid_response(serializer) + class AnnouncementAPIView(APIView): def get(self, request):