From 14a5d43dc862a3f50dbab338e34ff1ec883d6ef5 Mon Sep 17 00:00:00 2001 From: vabene1111 Date: Wed, 17 Jun 2020 14:33:55 +0200 Subject: [PATCH] added complete test for user preference api --- cookbook/helper/permission_helper.py | 3 + cookbook/tests/api/__init__.py | 0 cookbook/tests/api/test_api_userpreference.py | 59 +++++++++++++++++++ cookbook/urls.py | 1 - 4 files changed, 62 insertions(+), 1 deletion(-) create mode 100644 cookbook/tests/api/__init__.py create mode 100644 cookbook/tests/api/test_api_userpreference.py diff --git a/cookbook/helper/permission_helper.py b/cookbook/helper/permission_helper.py index 6556186d9..e60cec32d 100644 --- a/cookbook/helper/permission_helper.py +++ b/cookbook/helper/permission_helper.py @@ -137,6 +137,9 @@ class CustomIsOwner(permissions.BasePermission): """ message = _('You cannot interact with this object as its not owned by you!') + def has_permission(self, request, view): + return request.user.is_authenticated + def has_object_permission(self, request, view, obj): return is_object_owner(request.user, obj) diff --git a/cookbook/tests/api/__init__.py b/cookbook/tests/api/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/cookbook/tests/api/test_api_userpreference.py b/cookbook/tests/api/test_api_userpreference.py new file mode 100644 index 000000000..818db88e0 --- /dev/null +++ b/cookbook/tests/api/test_api_userpreference.py @@ -0,0 +1,59 @@ +import json + +from django.contrib import auth +from django.urls import reverse + +from cookbook.models import UserPreference +from cookbook.tests.views.test_views import TestViews + + +class TestApiUserPreference(TestViews): + + def setUp(self): + super(TestApiUserPreference, self).setUp() + + def test_create_preference(self): + # can create own preference with default values + r = self.user_client_1.post(reverse('api:userpreference-list'), {}) + self.assertEqual(r.status_code, 201) + response = json.loads(r.content) + self.assertEqual(response['user'], auth.get_user(self.user_client_1).id) + self.assertEqual(response['theme'], UserPreference._meta.get_field('theme').get_default()) + + # user can access own preference + r = self.user_client_1.get(reverse('api:userpreference-detail', args={auth.get_user(self.user_client_1).id}), {}) + self.assertEqual(r.status_code, 200) + + # cant access another users preference + r = self.anonymous_client.get(reverse('api:userpreference-detail', args={auth.get_user(self.user_client_1).id}), {}) + self.assertEqual(r.status_code, 403) + + r = self.guest_client_1.get(reverse('api:userpreference-detail', args={auth.get_user(self.user_client_1).id}), {}) + self.assertEqual(r.status_code, 404) + + r = self.user_client_2.get(reverse('api:userpreference-detail', args={auth.get_user(self.user_client_1).id}), {}) + self.assertEqual(r.status_code, 404) + + r = self.admin_client_1.get(reverse('api:userpreference-detail', args={auth.get_user(self.user_client_1).id}), {}) + self.assertEqual(r.status_code, 404) + + r = self.superuser_client.get(reverse('api:userpreference-detail', args={auth.get_user(self.user_client_1).id}), {}) + self.assertEqual(r.status_code, 200) + + # can update users preference + r = self.user_client_1.put(reverse('api:userpreference-detail', args={auth.get_user(self.user_client_1).id}), {'theme': UserPreference.DARKLY}, content_type='application/json') + response = json.loads(r.content) + self.assertEqual(r.status_code, 200) + self.assertEqual(response['theme'], UserPreference.DARKLY) + + # cant set another users non existent pref + r = self.user_client_1.put(reverse('api:userpreference-detail', args={auth.get_user(self.user_client_2).id}), {'theme': UserPreference.DARKLY}, content_type='application/json') + self.assertEqual(r.status_code, 404) + + # cant set another users existent pref + r = self.user_client_2.put(reverse('api:userpreference-detail', args={auth.get_user(self.user_client_1).id}), {'theme': UserPreference.FLATLY}, content_type='application/json') + self.assertEqual(r.status_code, 404) + + # can set pref as superuser + r = self.superuser_client.put(reverse('api:userpreference-detail', args={auth.get_user(self.user_client_1).id}), {'theme': UserPreference.FLATLY}, content_type='application/json') + self.assertEqual(r.status_code, 200) diff --git a/cookbook/urls.py b/cookbook/urls.py index 9aaa88996..330c12af1 100644 --- a/cookbook/urls.py +++ b/cookbook/urls.py @@ -10,7 +10,6 @@ from cookbook.helper import dal router = routers.DefaultRouter() router.register(r'user-preference', api.UserPreferenceViewSet) -router.register(r'recipe-book', api.RecipeBookViewSet) router.register(r'recipe', api.RecipeViewSet) router.register(r'meal-plan', api.MealPlanViewSet) router.register(r'meal-type', api.MealTypeViewSet)