From 05c5151c38811012f4d4cd9d5179fef60c21e47e Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Mon, 23 Oct 2017 14:22:04 -0400 Subject: [PATCH] Improve BaseAPITestCase to support normal user login, access granting and permission granting. Signed-off-by: Roberto Rosario --- mayan/apps/rest_api/tests/base.py | 86 ++++++++++++++++++++++++++++++- 1 file changed, 85 insertions(+), 1 deletion(-) diff --git a/mayan/apps/rest_api/tests/base.py b/mayan/apps/rest_api/tests/base.py index 098d83f9b9..3e044ae2b1 100644 --- a/mayan/apps/rest_api/tests/base.py +++ b/mayan/apps/rest_api/tests/base.py @@ -1,12 +1,20 @@ from __future__ import absolute_import, unicode_literals +from django.contrib.auth import get_user_model +from django.urls import reverse + from rest_framework.test import APITestCase +from common.tests.mixins import UserMixin from permissions.classes import Permission from smart_settings.classes import Namespace +from user_management.tests import ( + TEST_ADMIN_PASSWORD, TEST_ADMIN_USERNAME, TEST_USER_USERNAME, + TEST_USER_PASSWORD +) -class BaseAPITestCase(APITestCase): +class BaseAPITestCase(UserMixin, APITestCase): """ API test case class that invalidates permissions and smart settings """ @@ -15,3 +23,79 @@ class BaseAPITestCase(APITestCase): super(BaseAPITestCase, self).setUp() Namespace.invalidate_cache_all() Permission.invalidate_cache() + + def tearDown(self): + self.client.logout() + super(BaseAPITestCase, self).tearDown() + + def delete(self, viewname=None, path=None, *args, **kwargs): + data = kwargs.pop('data', {}) + follow = kwargs.pop('follow', False) + + if viewname: + path = reverse(viewname=viewname, *args, **kwargs) + + return self.client.delete( + path=path, data=data, follow=follow + ) + + def get(self, viewname=None, path=None, *args, **kwargs): + data = kwargs.pop('data', {}) + follow = kwargs.pop('follow', False) + + if viewname: + path = reverse(viewname=viewname, *args, **kwargs) + + return self.client.get( + path=path, data=data, follow=follow + ) + + def login(self, username, password): + logged_in = self.client.login(username=username, password=password) + + user = get_user_model().objects.get(username=username) + + self.assertTrue(logged_in) + self.assertTrue(user.is_authenticated) + + def login_user(self): + self.login(username=TEST_USER_USERNAME, password=TEST_USER_PASSWORD) + + def login_admin_user(self): + self.login(username=TEST_ADMIN_USERNAME, password=TEST_ADMIN_PASSWORD) + + def logout(self): + self.client.logout() + + def patch(self, viewname=None, path=None, *args, **kwargs): + data = kwargs.pop('data', {}) + follow = kwargs.pop('follow', False) + + if viewname: + path = reverse(viewname=viewname, *args, **kwargs) + + return self.client.patch( + path=path, data=data, follow=follow + ) + + def post(self, viewname=None, path=None, *args, **kwargs): + data = kwargs.pop('data', {}) + follow = kwargs.pop('follow', False) + + if viewname: + path = reverse(viewname=viewname, *args, **kwargs) + + return self.client.post( + path=path, data=data, follow=follow + ) + + def put(self, viewname=None, path=None, *args, **kwargs): + data = kwargs.pop('data', {}) + follow = kwargs.pop('follow', False) + + if viewname: + path = reverse(viewname=viewname, *args, **kwargs) + + return self.client.put( + path=path, data=data, follow=follow + )