aboutsummaryrefslogtreecommitdiffstats
path: root/pydis_site
diff options
context:
space:
mode:
authorGravatar SebastiaanZ <[email protected]>2019-04-25 23:19:21 +0200
committerGravatar SebastiaanZ <[email protected]>2019-04-25 23:19:21 +0200
commit3013eaa9db61472ddf52b8f75219e8a908f30f7e (patch)
tree7361e78cf2aec8a2af8882e8c4fedf2e797867ca /pydis_site
parentResolving merge conflict with master (diff)
Adding CreationTests to test_nomination and making related changes in the ViewSet
Diffstat (limited to 'pydis_site')
-rw-r--r--pydis_site/apps/api/tests/test_nominations.py131
-rw-r--r--pydis_site/apps/api/viewsets/bot/nomination.py8
2 files changed, 135 insertions, 4 deletions
diff --git a/pydis_site/apps/api/tests/test_nominations.py b/pydis_site/apps/api/tests/test_nominations.py
index 99a3fe69..258c2cd7 100644
--- a/pydis_site/apps/api/tests/test_nominations.py
+++ b/pydis_site/apps/api/tests/test_nominations.py
@@ -70,3 +70,134 @@ class CreationTests(APISubdomainTestCase):
dt.now(timezone.utc),
delta=timedelta(seconds=2)
)
+ self.assertEqual(nomination.user.id, data['user'])
+ self.assertEqual(nomination.actor.id, data['actor'])
+ self.assertEqual(nomination.reason, data['reason'])
+ self.assertEqual(nomination.active, True)
+
+ def test_returns_400_for_missing_user(self):
+ url = reverse('bot:nomination-list', host='api')
+ data = {
+ 'actor': self.user.id,
+ 'reason': 'Joe Dart on Fender Bass',
+ }
+
+ response = self.client.post(url, data=data)
+ self.assertEqual(response.status_code, 400)
+ self.assertEqual(response.json(), {
+ 'user': ['This field is required.']
+ })
+
+ def test_returns_400_for_missing_actor(self):
+ url = reverse('bot:nomination-list', host='api')
+ data = {
+ 'user': self.user.id,
+ 'reason': 'Joe Dart on Fender Bass',
+ }
+
+ response = self.client.post(url, data=data)
+ self.assertEqual(response.status_code, 400)
+ self.assertEqual(response.json(), {
+ 'actor': ['This field is required.']
+ })
+
+ def test_returns_400_for_missing_reason(self):
+ url = reverse('bot:nomination-list', host='api')
+ data = {
+ 'user': self.user.id,
+ 'actor': self.user.id,
+ }
+
+ response = self.client.post(url, data=data)
+ self.assertEqual(response.status_code, 400)
+ self.assertEqual(response.json(), {
+ 'reason': ['This field is required.']
+ })
+
+ def test_returns_400_for_bad_user(self):
+ url = reverse('bot:nomination-list', host='api')
+ data = {
+ 'user': 1024,
+ 'reason': 'Joe Dart on Fender Bass',
+ 'actor': self.user.id,
+ }
+
+ response = self.client.post(url, data=data)
+ self.assertEqual(response.status_code, 400)
+ self.assertEqual(response.json(), {
+ 'user': ['Invalid pk "1024" - object does not exist.']
+ })
+
+ def test_returns_400_for_bad_actor(self):
+ url = reverse('bot:nomination-list', host='api')
+ data = {
+ 'user': self.user.id,
+ 'reason': 'Joe Dart on Fender Bass',
+ 'actor': 1024,
+ }
+
+ response = self.client.post(url, data=data)
+ self.assertEqual(response.status_code, 400)
+ self.assertEqual(response.json(), {
+ 'actor': ['Invalid pk "1024" - object does not exist.']
+ })
+
+ def test_returns_400_for_unnominate_reason_at_creation(self):
+ url = reverse('bot:nomination-list', host='api')
+ data = {
+ 'user': self.user.id,
+ 'reason': 'Joe Dart on Fender Bass',
+ 'actor': self.user.id,
+ 'unnominate_reason': "Joe Dart on the Joe Dart Bass"
+ }
+
+ response = self.client.post(url, data=data)
+ self.assertEqual(response.status_code, 400)
+ self.assertEqual(response.json(), {
+ 'unnominate_reason': ['This field cannot be set at creation.']
+ })
+
+ def test_returns_400_for_unwatched_at_at_creation(self):
+ url = reverse('bot:nomination-list', host='api')
+ data = {
+ 'user': self.user.id,
+ 'reason': 'Joe Dart on Fender Bass',
+ 'actor': self.user.id,
+ 'unwatched_at': "Joe Dart on the Joe Dart Bass"
+ }
+
+ response = self.client.post(url, data=data)
+ self.assertEqual(response.status_code, 400)
+ self.assertEqual(response.json(), {
+ 'unwatched_at': ['This field cannot be set at creation.']
+ })
+
+ def test_returns_400_for_inserted_at_at_creation(self):
+ url = reverse('bot:nomination-list', host='api')
+ data = {
+ 'user': self.user.id,
+ 'reason': 'Joe Dart on Fender Bass',
+ 'actor': self.user.id,
+ 'inserted_at': "Joe Dart on the Joe Dart Bass"
+ }
+
+ response = self.client.post(url, data=data)
+ self.assertEqual(response.status_code, 400)
+ self.assertEqual(response.json(), {
+ 'inserted_at': ['This field cannot be set at creation.']
+ })
+
+ def test_returns_400_for_active_at_creation(self):
+ url = reverse('bot:nomination-list', host='api')
+ data = {
+ 'user': self.user.id,
+ 'reason': 'Joe Dart on Fender Bass',
+ 'actor': self.user.id,
+ 'active': False
+ }
+
+ response = self.client.post(url, data=data)
+ self.assertEqual(response.status_code, 400)
+ self.assertEqual(response.json(), {
+ 'active': ['This field cannot be set at creation.']
+ })
diff --git a/pydis_site/apps/api/viewsets/bot/nomination.py b/pydis_site/apps/api/viewsets/bot/nomination.py
index c3615dd9..1059ffcd 100644
--- a/pydis_site/apps/api/viewsets/bot/nomination.py
+++ b/pydis_site/apps/api/viewsets/bot/nomination.py
@@ -19,12 +19,12 @@ class NominationViewSet(ModelViewSet):
filter_backends = (DjangoFilterBackend, SearchFilter, OrderingFilter)
filter_fields = ('user__id', 'actor__id', 'active')
frozen_fields = ('id', 'actor', 'inserted_at', 'user', 'unwatched_at', 'active')
- frozen_on_create = ('unwatched_at', 'unnominate_reason')
+ frozen_on_create = ('unwatched_at', 'unnominate_reason', 'active', 'inserted_at')
def create(self, request, *args, **kwargs):
for field in request.data:
if field in self.frozen_on_create:
- raise ValidationError({field: ['This field cannot be updated.']})
+ raise ValidationError({field: ['This field cannot be set at creation.']})
serializer = self.get_serializer(data=request.data)
serializer.is_valid(raise_exception=True)
@@ -53,8 +53,8 @@ class NominationViewSet(ModelViewSet):
@action(detail=True, methods=['patch'])
def end_nomination(self, request, pk=None):
for field in request.data:
- if field in self.frozen_fields:
- raise ValidationError({field: ['This field cannot be updated.']})
+ if field != "unnominate_reason":
+ raise ValidationError({field: ['This field cannot be set at end_nomination']})
if "unnominate_reason" not in request.data:
raise ValidationError(