mirror of
				https://github.com/inventree/InvenTree.git
				synced 2025-10-31 13:15:43 +00:00 
			
		
		
		
	| @@ -6,16 +6,14 @@ import csv | |||||||
| import io | import io | ||||||
| import re | import re | ||||||
|  |  | ||||||
| from django.http.response import StreamingHttpResponse |  | ||||||
| from django.contrib.auth import get_user_model | from django.contrib.auth import get_user_model | ||||||
| from django.contrib.auth.models import Group | from django.contrib.auth.models import Group | ||||||
|  | from django.http.response import StreamingHttpResponse | ||||||
|  |  | ||||||
| from rest_framework.test import APITestCase | from rest_framework.test import APITestCase | ||||||
|  |  | ||||||
|  |  | ||||||
| class InvenTreeAPITestCase(APITestCase): | class UserMixin: | ||||||
|     """ |  | ||||||
|     Base class for running InvenTree API tests |  | ||||||
|     """ |  | ||||||
|  |  | ||||||
|     # User information |     # User information | ||||||
|     username = 'testuser' |     username = 'testuser' | ||||||
| @@ -52,37 +50,49 @@ class InvenTreeAPITestCase(APITestCase): | |||||||
|  |  | ||||||
|         self.user.save() |         self.user.save() | ||||||
|  |  | ||||||
|         for role in self.roles: |         # Assign all roles if set | ||||||
|             self.assignRole(role) |         if self.roles == 'all': | ||||||
|  |             self.assignRole(assign_all=True) | ||||||
|  |         # else filter the roles | ||||||
|  |         else: | ||||||
|  |             for role in self.roles: | ||||||
|  |                 self.assignRole(role) | ||||||
|  |  | ||||||
|         if self.auto_login: |         if self.auto_login: | ||||||
|             self.client.login(username=self.username, password=self.password) |             self.client.login(username=self.username, password=self.password) | ||||||
|  |  | ||||||
|     def assignRole(self, role): |     def assignRole(self, role=None, assign_all: bool = False): | ||||||
|         """ |         """ | ||||||
|         Set the user roles for the registered user |         Set the user roles for the registered user | ||||||
|         """ |         """ | ||||||
|  |  | ||||||
|         # role is of the format 'rule.permission' e.g. 'part.add' |         # role is of the format 'rule.permission' e.g. 'part.add' | ||||||
|  |  | ||||||
|         rule, perm = role.split('.') |         if not assign_all and role: | ||||||
|  |             rule, perm = role.split('.') | ||||||
|  |  | ||||||
|         for ruleset in self.group.rule_sets.all(): |         for ruleset in self.group.rule_sets.all(): | ||||||
|  |  | ||||||
|             if ruleset.name == rule: |             if assign_all or ruleset.name == rule: | ||||||
|  |  | ||||||
|                 if perm == 'view': |                 if assign_all or perm == 'view': | ||||||
|                     ruleset.can_view = True |                     ruleset.can_view = True | ||||||
|                 elif perm == 'change': |                 elif assign_all or perm == 'change': | ||||||
|                     ruleset.can_change = True |                     ruleset.can_change = True | ||||||
|                 elif perm == 'delete': |                 elif assign_all or perm == 'delete': | ||||||
|                     ruleset.can_delete = True |                     ruleset.can_delete = True | ||||||
|                 elif perm == 'add': |                 elif assign_all or perm == 'add': | ||||||
|                     ruleset.can_add = True |                     ruleset.can_add = True | ||||||
|  |  | ||||||
|                 ruleset.save() |                 ruleset.save() | ||||||
|                 break |                 break | ||||||
|  |  | ||||||
|  |  | ||||||
|  | class InvenTreeAPITestCase(UserMixin, APITestCase): | ||||||
|  |     """ | ||||||
|  |     Base class for running InvenTree API tests | ||||||
|  |     """ | ||||||
|  |  | ||||||
|     def getActions(self, url): |     def getActions(self, url): | ||||||
|         """ |         """ | ||||||
|         Return a dict of the 'actions' available at a given endpoint. |         Return a dict of the 'actions' available at a given endpoint. | ||||||
|   | |||||||
| @@ -3,14 +3,13 @@ Pull rendered copies of the templated | |||||||
| only used for testing the js files! - This file is omited from coverage | only used for testing the js files! - This file is omited from coverage | ||||||
| """ | """ | ||||||
|  |  | ||||||
| from django.test import TestCase  # pragma: no cover |  | ||||||
| from django.contrib.auth import get_user_model  # pragma: no cover |  | ||||||
|  |  | ||||||
| import os  # pragma: no cover | import os  # pragma: no cover | ||||||
| import pathlib  # pragma: no cover | import pathlib | ||||||
|  |  | ||||||
|  | from InvenTree.helpers import InvenTreeTestCase  # pragma: no cover | ||||||
|  |  | ||||||
|  |  | ||||||
| class RenderJavascriptFiles(TestCase):  # pragma: no cover | class RenderJavascriptFiles(InvenTreeTestCase):  # pragma: no cover | ||||||
|     """ |     """ | ||||||
|     A unit test to "render" javascript files. |     A unit test to "render" javascript files. | ||||||
|  |  | ||||||
| @@ -18,18 +17,6 @@ class RenderJavascriptFiles(TestCase):  # pragma: no cover | |||||||
|     we need the fully-rendered files for linting and static tests. |     we need the fully-rendered files for linting and static tests. | ||||||
|     """ |     """ | ||||||
|  |  | ||||||
|     def setUp(self): |  | ||||||
|  |  | ||||||
|         user = get_user_model() |  | ||||||
|  |  | ||||||
|         self.user = user.objects.create_user( |  | ||||||
|             username='testuser', |  | ||||||
|             password='testpassword', |  | ||||||
|             email='user@gmail.com', |  | ||||||
|         ) |  | ||||||
|  |  | ||||||
|         self.client.login(username='testuser', password='testpassword') |  | ||||||
|  |  | ||||||
|     def download_file(self, filename, prefix): |     def download_file(self, filename, prefix): | ||||||
|  |  | ||||||
|         url = os.path.join(prefix, filename) |         url = os.path.join(prefix, filename) | ||||||
|   | |||||||
| @@ -14,8 +14,10 @@ from wsgiref.util import FileWrapper | |||||||
| from django.http import StreamingHttpResponse | from django.http import StreamingHttpResponse | ||||||
| from django.core.exceptions import ValidationError, FieldError | from django.core.exceptions import ValidationError, FieldError | ||||||
| from django.utils.translation import gettext_lazy as _ | from django.utils.translation import gettext_lazy as _ | ||||||
|  | from django.test import TestCase | ||||||
|  |  | ||||||
| from django.contrib.auth.models import Permission | from django.contrib.auth.models import Permission | ||||||
|  | from .api_tester import UserMixin | ||||||
|  |  | ||||||
| import InvenTree.version | import InvenTree.version | ||||||
|  |  | ||||||
| @@ -781,3 +783,7 @@ def inheritors(cls): | |||||||
|                 subcls.add(child) |                 subcls.add(child) | ||||||
|                 work.append(child) |                 work.append(child) | ||||||
|     return subcls |     return subcls | ||||||
|  |  | ||||||
|  |  | ||||||
|  | class InvenTreeTestCase(UserMixin, TestCase): | ||||||
|  |     pass | ||||||
|   | |||||||
| @@ -1,22 +1,17 @@ | |||||||
| """ Low level tests for the InvenTree API """ | """ Low level tests for the InvenTree API """ | ||||||
|  |  | ||||||
| from rest_framework import status |  | ||||||
|  |  | ||||||
| from django.test import TestCase |  | ||||||
|  |  | ||||||
| from django.contrib.auth import get_user_model |  | ||||||
| from django.contrib.auth.models import Group |  | ||||||
|  |  | ||||||
| from django.urls import reverse |  | ||||||
|  |  | ||||||
| from InvenTree.api_tester import InvenTreeAPITestCase |  | ||||||
|  |  | ||||||
| from users.models import RuleSet |  | ||||||
|  |  | ||||||
| from base64 import b64encode | from base64 import b64encode | ||||||
|  |  | ||||||
|  | from django.urls import reverse | ||||||
|  |  | ||||||
| class HTMLAPITests(TestCase): | from rest_framework import status | ||||||
|  |  | ||||||
|  | from InvenTree.api_tester import InvenTreeAPITestCase | ||||||
|  | from InvenTree.helpers import InvenTreeTestCase | ||||||
|  | from users.models import RuleSet | ||||||
|  |  | ||||||
|  |  | ||||||
|  | class HTMLAPITests(InvenTreeTestCase): | ||||||
|     """ |     """ | ||||||
|     Test that we can access the REST API endpoints via the HTML interface. |     Test that we can access the REST API endpoints via the HTML interface. | ||||||
|  |  | ||||||
| @@ -24,33 +19,7 @@ class HTMLAPITests(TestCase): | |||||||
|     which raised an AssertionError when using the HTML API interface, |     which raised an AssertionError when using the HTML API interface, | ||||||
|     while the regular JSON interface continued to work as expected. |     while the regular JSON interface continued to work as expected. | ||||||
|     """ |     """ | ||||||
|  |     roles = 'all' | ||||||
|     def setUp(self): |  | ||||||
|         super().setUp() |  | ||||||
|  |  | ||||||
|         # Create a user |  | ||||||
|         user = get_user_model() |  | ||||||
|  |  | ||||||
|         self.user = user.objects.create_user( |  | ||||||
|             username='username', |  | ||||||
|             email='user@email.com', |  | ||||||
|             password='password' |  | ||||||
|         ) |  | ||||||
|  |  | ||||||
|         # Put the user into a group with the correct permissions |  | ||||||
|         group = Group.objects.create(name='mygroup') |  | ||||||
|         self.user.groups.add(group) |  | ||||||
|  |  | ||||||
|         # Give the group *all* the permissions! |  | ||||||
|         for rule in group.rule_sets.all(): |  | ||||||
|             rule.can_view = True |  | ||||||
|             rule.can_change = True |  | ||||||
|             rule.can_add = True |  | ||||||
|             rule.can_delete = True |  | ||||||
|  |  | ||||||
|             rule.save() |  | ||||||
|  |  | ||||||
|         self.client.login(username='username', password='password') |  | ||||||
|  |  | ||||||
|     def test_part_api(self): |     def test_part_api(self): | ||||||
|         url = reverse('api-part-list') |         url = reverse('api-part-list') | ||||||
|   | |||||||
| @@ -1,12 +1,11 @@ | |||||||
| """Tests for middleware functions""" | """Tests for middleware functions""" | ||||||
|  |  | ||||||
| from django.test import TestCase |  | ||||||
|  |  | ||||||
| from django.contrib.auth import get_user_model |  | ||||||
| from django.urls import reverse | from django.urls import reverse | ||||||
|  |  | ||||||
|  | from InvenTree.helpers import InvenTreeTestCase | ||||||
|  |  | ||||||
| class MiddlewareTests(TestCase): |  | ||||||
|  | class MiddlewareTests(InvenTreeTestCase): | ||||||
|     """Test for middleware functions""" |     """Test for middleware functions""" | ||||||
|  |  | ||||||
|     def check_path(self, url, code=200, **kwargs): |     def check_path(self, url, code=200, **kwargs): | ||||||
| @@ -14,15 +13,6 @@ class MiddlewareTests(TestCase): | |||||||
|         self.assertEqual(response.status_code, code) |         self.assertEqual(response.status_code, code) | ||||||
|         return response |         return response | ||||||
|  |  | ||||||
|     def setUp(self): |  | ||||||
|         super().setUp() |  | ||||||
|  |  | ||||||
|         # Create a user |  | ||||||
|         user = get_user_model() |  | ||||||
|  |  | ||||||
|         self.user = user.objects.create_user(username='username', email='user@email.com', password='password') |  | ||||||
|         self.client.login(username='username', password='password') |  | ||||||
|  |  | ||||||
|     def test_AuthRequiredMiddleware(self): |     def test_AuthRequiredMiddleware(self): | ||||||
|         """Test the auth middleware""" |         """Test the auth middleware""" | ||||||
|  |  | ||||||
|   | |||||||
| @@ -5,28 +5,17 @@ Unit tests for the main web views | |||||||
| import re | import re | ||||||
| import os | import os | ||||||
|  |  | ||||||
| from django.test import TestCase |  | ||||||
| from django.urls import reverse | from django.urls import reverse | ||||||
| from django.contrib.auth import get_user_model |  | ||||||
|  | from InvenTree.helpers import InvenTreeTestCase | ||||||
|  |  | ||||||
|  |  | ||||||
| class ViewTests(TestCase): | class ViewTests(InvenTreeTestCase): | ||||||
|     """ Tests for various top-level views """ |     """ Tests for various top-level views """ | ||||||
|  |  | ||||||
|     username = 'test_user' |     username = 'test_user' | ||||||
|     password = 'test_pass' |     password = 'test_pass' | ||||||
|  |  | ||||||
|     def setUp(self): |  | ||||||
|  |  | ||||||
|         # Create a user |  | ||||||
|         self.user = get_user_model().objects.create_user(self.username, 'user@email.com', self.password) |  | ||||||
|         self.user.set_password(self.password) |  | ||||||
|         self.user.save() |  | ||||||
|  |  | ||||||
|         result = self.client.login(username=self.username, password=self.password) |  | ||||||
|  |  | ||||||
|         self.assertEqual(result, True) |  | ||||||
|  |  | ||||||
|     def test_api_doc(self): |     def test_api_doc(self): | ||||||
|         """ Test that the api-doc view works """ |         """ Test that the api-doc view works """ | ||||||
|  |  | ||||||
|   | |||||||
| @@ -7,8 +7,8 @@ from unittest import mock | |||||||
| from django.test import TestCase, override_settings | from django.test import TestCase, override_settings | ||||||
| import django.core.exceptions as django_exceptions | import django.core.exceptions as django_exceptions | ||||||
| from django.core.exceptions import ValidationError | from django.core.exceptions import ValidationError | ||||||
| from django.contrib.auth import get_user_model |  | ||||||
| from django.conf import settings | from django.conf import settings | ||||||
|  | from django.contrib.auth import get_user_model | ||||||
|  |  | ||||||
| from djmoney.money import Money | from djmoney.money import Money | ||||||
| from djmoney.contrib.exchange.models import Rate, convert_money | from djmoney.contrib.exchange.models import Rate, convert_money | ||||||
| @@ -457,18 +457,12 @@ class TestStatus(TestCase): | |||||||
|         self.assertEqual(ready.isImportingData(), False) |         self.assertEqual(ready.isImportingData(), False) | ||||||
|  |  | ||||||
|  |  | ||||||
| class TestSettings(TestCase): | class TestSettings(helpers.InvenTreeTestCase): | ||||||
|     """ |     """ | ||||||
|     Unit tests for settings |     Unit tests for settings | ||||||
|     """ |     """ | ||||||
|  |  | ||||||
|     def setUp(self) -> None: |     superuser = True | ||||||
|         self.user_mdl = get_user_model() |  | ||||||
|  |  | ||||||
|         # Create a user for auth |  | ||||||
|         user = get_user_model() |  | ||||||
|         self.user = user.objects.create_superuser('testuser1', 'test1@testing.com', 'password1') |  | ||||||
|         self.client.login(username='testuser1', password='password1') |  | ||||||
|  |  | ||||||
|     def in_env_context(self, envs={}): |     def in_env_context(self, envs={}): | ||||||
|         """Patch the env to include the given dict""" |         """Patch the env to include the given dict""" | ||||||
| @@ -483,8 +477,9 @@ class TestSettings(TestCase): | |||||||
|  |  | ||||||
|     @override_settings(TESTING_ENV=True) |     @override_settings(TESTING_ENV=True) | ||||||
|     def test_set_user_to_few(self): |     def test_set_user_to_few(self): | ||||||
|  |         user_model = get_user_model() | ||||||
|         # add shortcut |         # add shortcut | ||||||
|         user_count = self.user_mdl.objects.count |         user_count = user_model.objects.count | ||||||
|         # enable testing mode |         # enable testing mode | ||||||
|         settings.TESTING_ENV = True |         settings.TESTING_ENV = True | ||||||
|  |  | ||||||
| @@ -506,14 +501,18 @@ class TestSettings(TestCase): | |||||||
|         }) |         }) | ||||||
|         self.assertEqual(user_count(), 2) |         self.assertEqual(user_count(), 2) | ||||||
|  |  | ||||||
|  |         username2 = 'testuser1' | ||||||
|  |         email2 = 'test1@testing.com' | ||||||
|  |         password2 = 'password1' | ||||||
|  |  | ||||||
|         # create user manually |         # create user manually | ||||||
|         self.user_mdl.objects.create_user('testuser', 'test@testing.com', 'password') |         user_model.objects.create_user(username2, email2, password2) | ||||||
|         self.assertEqual(user_count(), 3) |         self.assertEqual(user_count(), 3) | ||||||
|         # check it will not be created again |         # check it will not be created again | ||||||
|         self.run_reload({ |         self.run_reload({ | ||||||
|             'INVENTREE_ADMIN_USER': 'testuser', |             'INVENTREE_ADMIN_USER': username2, | ||||||
|             'INVENTREE_ADMIN_EMAIL': 'test@testing.com', |             'INVENTREE_ADMIN_EMAIL': email2, | ||||||
|             'INVENTREE_ADMIN_PASSWORD': 'password', |             'INVENTREE_ADMIN_PASSWORD': password2, | ||||||
|         }) |         }) | ||||||
|         self.assertEqual(user_count(), 3) |         self.assertEqual(user_count(), 3) | ||||||
|  |  | ||||||
| @@ -574,18 +573,11 @@ class TestSettings(TestCase): | |||||||
|             self.assertEqual(config.get_setting(TEST_ENV_NAME, None), '321') |             self.assertEqual(config.get_setting(TEST_ENV_NAME, None), '321') | ||||||
|  |  | ||||||
|  |  | ||||||
| class TestInstanceName(TestCase): | class TestInstanceName(helpers.InvenTreeTestCase): | ||||||
|     """ |     """ | ||||||
|     Unit tests for instance name |     Unit tests for instance name | ||||||
|     """ |     """ | ||||||
|  |  | ||||||
|     def setUp(self): |  | ||||||
|         # Create a user for auth |  | ||||||
|         user = get_user_model() |  | ||||||
|         self.user = user.objects.create_superuser('testuser', 'test@testing.com', 'password') |  | ||||||
|  |  | ||||||
|         self.client.login(username='testuser', password='password') |  | ||||||
|  |  | ||||||
|     def test_instance_name(self): |     def test_instance_name(self): | ||||||
|  |  | ||||||
|         # default setting |         # default setting | ||||||
|   | |||||||
| @@ -2,10 +2,6 @@ from datetime import datetime, timedelta | |||||||
|  |  | ||||||
| from django.urls import reverse | from django.urls import reverse | ||||||
|  |  | ||||||
| from django.contrib.auth import get_user_model |  | ||||||
| from django.contrib.auth.models import Group |  | ||||||
|  |  | ||||||
| from rest_framework.test import APITestCase |  | ||||||
| from rest_framework import status | from rest_framework import status | ||||||
|  |  | ||||||
| from part.models import Part | from part.models import Part | ||||||
| @@ -16,7 +12,7 @@ from InvenTree.status_codes import BuildStatus | |||||||
| from InvenTree.api_tester import InvenTreeAPITestCase | from InvenTree.api_tester import InvenTreeAPITestCase | ||||||
|  |  | ||||||
|  |  | ||||||
| class TestBuildAPI(APITestCase): | class TestBuildAPI(InvenTreeAPITestCase): | ||||||
|     """ |     """ | ||||||
|     Series of tests for the Build DRF API |     Series of tests for the Build DRF API | ||||||
|     - Tests for Build API |     - Tests for Build API | ||||||
| @@ -30,25 +26,11 @@ class TestBuildAPI(APITestCase): | |||||||
|         'build', |         'build', | ||||||
|     ] |     ] | ||||||
|  |  | ||||||
|     def setUp(self): |     roles = [ | ||||||
|         # Create a user for auth |         'build.change', | ||||||
|         user = get_user_model() |         'build.add', | ||||||
|         self.user = user.objects.create_user('testuser', 'test@testing.com', 'password') |         'build.delete', | ||||||
|  |     ] | ||||||
|         g = Group.objects.create(name='builders') |  | ||||||
|         self.user.groups.add(g) |  | ||||||
|  |  | ||||||
|         for rule in g.rule_sets.all(): |  | ||||||
|             if rule.name == 'build': |  | ||||||
|                 rule.can_change = True |  | ||||||
|                 rule.can_add = True |  | ||||||
|                 rule.can_delete = True |  | ||||||
|  |  | ||||||
|                 rule.save() |  | ||||||
|  |  | ||||||
|         g.save() |  | ||||||
|  |  | ||||||
|         self.client.login(username='testuser', password='password') |  | ||||||
|  |  | ||||||
|     def test_get_build_list(self): |     def test_get_build_list(self): | ||||||
|         """ |         """ | ||||||
|   | |||||||
| @@ -1,18 +1,16 @@ | |||||||
| from django.test import TestCase |  | ||||||
| from django.urls import reverse | from django.urls import reverse | ||||||
|  |  | ||||||
| from django.contrib.auth import get_user_model |  | ||||||
| from django.contrib.auth.models import Group |  | ||||||
|  |  | ||||||
| from datetime import datetime, timedelta | from datetime import datetime, timedelta | ||||||
|  |  | ||||||
|  | from InvenTree.helpers import InvenTreeTestCase | ||||||
|  |  | ||||||
| from .models import Build | from .models import Build | ||||||
| from stock.models import StockItem | from stock.models import StockItem | ||||||
|  |  | ||||||
| from InvenTree.status_codes import BuildStatus | from InvenTree.status_codes import BuildStatus | ||||||
|  |  | ||||||
|  |  | ||||||
| class BuildTestSimple(TestCase): | class BuildTestSimple(InvenTreeTestCase): | ||||||
|  |  | ||||||
|     fixtures = [ |     fixtures = [ | ||||||
|         'category', |         'category', | ||||||
| @@ -21,27 +19,11 @@ class BuildTestSimple(TestCase): | |||||||
|         'build', |         'build', | ||||||
|     ] |     ] | ||||||
|  |  | ||||||
|     def setUp(self): |     roles = [ | ||||||
|         # Create a user for auth |         'build.change', | ||||||
|         user = get_user_model() |         'build.add', | ||||||
|         user.objects.create_user('testuser', 'test@testing.com', 'password') |         'build.delete', | ||||||
|  |     ] | ||||||
|         self.user = user.objects.get(username='testuser') |  | ||||||
|  |  | ||||||
|         g = Group.objects.create(name='builders') |  | ||||||
|         self.user.groups.add(g) |  | ||||||
|  |  | ||||||
|         for rule in g.rule_sets.all(): |  | ||||||
|             if rule.name == 'build': |  | ||||||
|                 rule.can_change = True |  | ||||||
|                 rule.can_add = True |  | ||||||
|                 rule.can_delete = True |  | ||||||
|  |  | ||||||
|                 rule.save() |  | ||||||
|  |  | ||||||
|         g.save() |  | ||||||
|  |  | ||||||
|         self.client.login(username='testuser', password='password') |  | ||||||
|  |  | ||||||
|     def test_build_objects(self): |     def test_build_objects(self): | ||||||
|         # Ensure the Build objects were correctly created |         # Ensure the Build objects were correctly created | ||||||
| @@ -106,7 +88,7 @@ class BuildTestSimple(TestCase): | |||||||
|         self.assertEqual(build.status, BuildStatus.CANCELLED) |         self.assertEqual(build.status, BuildStatus.CANCELLED) | ||||||
|  |  | ||||||
|  |  | ||||||
| class TestBuildViews(TestCase): | class TestBuildViews(InvenTreeTestCase): | ||||||
|     """ Tests for Build app views """ |     """ Tests for Build app views """ | ||||||
|  |  | ||||||
|     fixtures = [ |     fixtures = [ | ||||||
| @@ -116,28 +98,15 @@ class TestBuildViews(TestCase): | |||||||
|         'build', |         'build', | ||||||
|     ] |     ] | ||||||
|  |  | ||||||
|  |     roles = [ | ||||||
|  |         'build.change', | ||||||
|  |         'build.add', | ||||||
|  |         'build.delete', | ||||||
|  |     ] | ||||||
|  |  | ||||||
|     def setUp(self): |     def setUp(self): | ||||||
|         super().setUp() |         super().setUp() | ||||||
|  |  | ||||||
|         # Create a user |  | ||||||
|         user = get_user_model() |  | ||||||
|         self.user = user.objects.create_user('username', 'user@email.com', 'password') |  | ||||||
|  |  | ||||||
|         g = Group.objects.create(name='builders') |  | ||||||
|         self.user.groups.add(g) |  | ||||||
|  |  | ||||||
|         for rule in g.rule_sets.all(): |  | ||||||
|             if rule.name == 'build': |  | ||||||
|                 rule.can_change = True |  | ||||||
|                 rule.can_add = True |  | ||||||
|                 rule.can_delete = True |  | ||||||
|  |  | ||||||
|                 rule.save() |  | ||||||
|  |  | ||||||
|         g.save() |  | ||||||
|  |  | ||||||
|         self.client.login(username='username', password='password') |  | ||||||
|  |  | ||||||
|         # Create a build output for build # 1 |         # Create a build output for build # 1 | ||||||
|         self.build = Build.objects.get(pk=1) |         self.build = Build.objects.get(pk=1) | ||||||
|  |  | ||||||
|   | |||||||
| @@ -4,11 +4,10 @@ import json | |||||||
| from datetime import timedelta | from datetime import timedelta | ||||||
|  |  | ||||||
| from django.test import TestCase, Client | from django.test import TestCase, Client | ||||||
| from django.contrib.auth import get_user_model |  | ||||||
| from django.urls import reverse | from django.urls import reverse | ||||||
|  |  | ||||||
| from InvenTree.api_tester import InvenTreeAPITestCase | from InvenTree.api_tester import InvenTreeAPITestCase | ||||||
| from InvenTree.helpers import str2bool | from InvenTree.helpers import InvenTreeTestCase, str2bool | ||||||
| from plugin.models import NotificationUserSetting, PluginConfig | from plugin.models import NotificationUserSetting, PluginConfig | ||||||
| from plugin import registry | from plugin import registry | ||||||
|  |  | ||||||
| @@ -18,7 +17,7 @@ from .api import WebhookView | |||||||
| CONTENT_TYPE_JSON = 'application/json' | CONTENT_TYPE_JSON = 'application/json' | ||||||
|  |  | ||||||
|  |  | ||||||
| class SettingsTest(TestCase): | class SettingsTest(InvenTreeTestCase): | ||||||
|     """ |     """ | ||||||
|     Tests for the 'settings' model |     Tests for the 'settings' model | ||||||
|     """ |     """ | ||||||
| @@ -27,16 +26,6 @@ class SettingsTest(TestCase): | |||||||
|         'settings', |         'settings', | ||||||
|     ] |     ] | ||||||
|  |  | ||||||
|     def setUp(self): |  | ||||||
|  |  | ||||||
|         user = get_user_model() |  | ||||||
|  |  | ||||||
|         self.user = user.objects.create_user('username', 'user@email.com', 'password') |  | ||||||
|         self.user.is_staff = True |  | ||||||
|         self.user.save() |  | ||||||
|  |  | ||||||
|         self.client.login(username='username', password='password') |  | ||||||
|  |  | ||||||
|     def test_settings_objects(self): |     def test_settings_objects(self): | ||||||
|  |  | ||||||
|         # There should be two settings objects in the database |         # There should be two settings objects in the database | ||||||
|   | |||||||
| @@ -1,12 +1,11 @@ | |||||||
| """ Unit tests for Company views (see views.py) """ | """ Unit tests for Company views (see views.py) """ | ||||||
|  |  | ||||||
| from django.test import TestCase |  | ||||||
| from django.urls import reverse | from django.urls import reverse | ||||||
| from django.contrib.auth import get_user_model |  | ||||||
| from django.contrib.auth.models import Group | from InvenTree.helpers import InvenTreeTestCase | ||||||
|  |  | ||||||
|  |  | ||||||
| class CompanyViewTestBase(TestCase): | class CompanyViewTestBase(InvenTreeTestCase): | ||||||
|  |  | ||||||
|     fixtures = [ |     fixtures = [ | ||||||
|         'category', |         'category', | ||||||
| @@ -17,32 +16,7 @@ class CompanyViewTestBase(TestCase): | |||||||
|         'supplier_part', |         'supplier_part', | ||||||
|     ] |     ] | ||||||
|  |  | ||||||
|     def setUp(self): |     roles = 'all' | ||||||
|         super().setUp() |  | ||||||
|  |  | ||||||
|         # Create a user |  | ||||||
|         user = get_user_model() |  | ||||||
|  |  | ||||||
|         self.user = user.objects.create_user( |  | ||||||
|             username='username', |  | ||||||
|             email='user@email.com', |  | ||||||
|             password='password' |  | ||||||
|         ) |  | ||||||
|  |  | ||||||
|         # Put the user into a group with the correct permissions |  | ||||||
|         group = Group.objects.create(name='mygroup') |  | ||||||
|         self.user.groups.add(group) |  | ||||||
|  |  | ||||||
|         # Give the group *all* the permissions! |  | ||||||
|         for rule in group.rule_sets.all(): |  | ||||||
|             rule.can_view = True |  | ||||||
|             rule.can_change = True |  | ||||||
|             rule.can_add = True |  | ||||||
|             rule.can_delete = True |  | ||||||
|  |  | ||||||
|             rule.save() |  | ||||||
|  |  | ||||||
|         self.client.login(username='username', password='password') |  | ||||||
|  |  | ||||||
|  |  | ||||||
| class CompanyViewTest(CompanyViewTestBase): | class CompanyViewTest(CompanyViewTestBase): | ||||||
|   | |||||||
| @@ -1,12 +1,11 @@ | |||||||
| """ Unit tests for Order views (see views.py) """ | """ Unit tests for Order views (see views.py) """ | ||||||
|  |  | ||||||
| from django.test import TestCase |  | ||||||
| from django.urls import reverse | from django.urls import reverse | ||||||
| from django.contrib.auth import get_user_model |  | ||||||
| from django.contrib.auth.models import Group | from InvenTree.helpers import InvenTreeTestCase | ||||||
|  |  | ||||||
|  |  | ||||||
| class OrderViewTestCase(TestCase): | class OrderViewTestCase(InvenTreeTestCase): | ||||||
|  |  | ||||||
|     fixtures = [ |     fixtures = [ | ||||||
|         'category', |         'category', | ||||||
| @@ -19,27 +18,14 @@ class OrderViewTestCase(TestCase): | |||||||
|         'order', |         'order', | ||||||
|     ] |     ] | ||||||
|  |  | ||||||
|     def setUp(self): |     roles = [ | ||||||
|         super().setUp() |         'purchase_order.change', | ||||||
|  |         'purchase_order.add', | ||||||
|         # Create a user |         'purchase_order.delete', | ||||||
|         user = get_user_model().objects.create_user('username', 'user@email.com', 'password') |         'sales_order.change', | ||||||
|  |         'sales_order.add', | ||||||
|         # Ensure that the user has the correct permissions! |         'sales_order.delete', | ||||||
|         g = Group.objects.create(name='orders') |     ] | ||||||
|         user.groups.add(g) |  | ||||||
|  |  | ||||||
|         for rule in g.rule_sets.all(): |  | ||||||
|             if rule.name in ['purchase_order', 'sales_order']: |  | ||||||
|                 rule.can_change = True |  | ||||||
|                 rule.can_add = True |  | ||||||
|                 rule.can_delete = True |  | ||||||
|  |  | ||||||
|                 rule.save() |  | ||||||
|  |  | ||||||
|         g.save() |  | ||||||
|  |  | ||||||
|         self.client.login(username='username', password='password') |  | ||||||
|  |  | ||||||
|  |  | ||||||
| class OrderListTest(OrderViewTestCase): | class OrderListTest(OrderViewTestCase): | ||||||
|   | |||||||
| @@ -4,14 +4,12 @@ Unit testing for BOM export functionality | |||||||
|  |  | ||||||
| import csv | import csv | ||||||
|  |  | ||||||
| from django.test import TestCase |  | ||||||
|  |  | ||||||
| from django.urls import reverse | from django.urls import reverse | ||||||
| from django.contrib.auth import get_user_model |  | ||||||
| from django.contrib.auth.models import Group | from InvenTree.helpers import InvenTreeTestCase | ||||||
|  |  | ||||||
|  |  | ||||||
| class BomExportTest(TestCase): | class BomExportTest(InvenTreeTestCase): | ||||||
|  |  | ||||||
|     fixtures = [ |     fixtures = [ | ||||||
|         'category', |         'category', | ||||||
| @@ -20,33 +18,11 @@ class BomExportTest(TestCase): | |||||||
|         'bom', |         'bom', | ||||||
|     ] |     ] | ||||||
|  |  | ||||||
|  |     roles = 'all' | ||||||
|  |  | ||||||
|     def setUp(self): |     def setUp(self): | ||||||
|         super().setUp() |         super().setUp() | ||||||
|  |  | ||||||
|         # Create a user |  | ||||||
|         user = get_user_model() |  | ||||||
|  |  | ||||||
|         self.user = user.objects.create_user( |  | ||||||
|             username='username', |  | ||||||
|             email='user@email.com', |  | ||||||
|             password='password' |  | ||||||
|         ) |  | ||||||
|  |  | ||||||
|         # Put the user into a group with the correct permissions |  | ||||||
|         group = Group.objects.create(name='mygroup') |  | ||||||
|         self.user.groups.add(group) |  | ||||||
|  |  | ||||||
|         # Give the group *all* the permissions! |  | ||||||
|         for rule in group.rule_sets.all(): |  | ||||||
|             rule.can_view = True |  | ||||||
|             rule.can_change = True |  | ||||||
|             rule.can_add = True |  | ||||||
|             rule.can_delete = True |  | ||||||
|  |  | ||||||
|             rule.save() |  | ||||||
|  |  | ||||||
|         self.client.login(username='username', password='password') |  | ||||||
|  |  | ||||||
|         self.url = reverse('bom-download', kwargs={'pk': 100}) |         self.url = reverse('bom-download', kwargs={'pk': 100}) | ||||||
|  |  | ||||||
|     def test_bom_template(self): |     def test_bom_template(self): | ||||||
|   | |||||||
| @@ -3,13 +3,14 @@ | |||||||
| from allauth.account.models import EmailAddress | from allauth.account.models import EmailAddress | ||||||
|  |  | ||||||
| from django.conf import settings | from django.conf import settings | ||||||
| from django.contrib.auth import get_user_model |  | ||||||
|  |  | ||||||
| from django.test import TestCase | from django.test import TestCase | ||||||
| from django.core.exceptions import ValidationError | from django.core.exceptions import ValidationError | ||||||
|  |  | ||||||
| import os | import os | ||||||
|  |  | ||||||
|  | from InvenTree.helpers import InvenTreeTestCase | ||||||
|  |  | ||||||
| from .models import Part, PartCategory, PartCategoryStar, PartStar, PartTestTemplate | from .models import Part, PartCategory, PartCategoryStar, PartStar, PartTestTemplate | ||||||
| from .models import rename_part_image | from .models import rename_part_image | ||||||
| from .templatetags import inventree_extras | from .templatetags import inventree_extras | ||||||
| @@ -21,15 +22,9 @@ from common.models import InvenTreeSetting, InvenTreeUserSetting, NotificationEn | |||||||
| from common.notifications import storage, UIMessageNotification | from common.notifications import storage, UIMessageNotification | ||||||
|  |  | ||||||
|  |  | ||||||
| class TemplateTagTest(TestCase): | class TemplateTagTest(InvenTreeTestCase): | ||||||
|     """ Tests for the custom template tag code """ |     """ Tests for the custom template tag code """ | ||||||
|  |  | ||||||
|     def setUp(self): |  | ||||||
|         # Create a user for auth |  | ||||||
|         user = get_user_model() |  | ||||||
|         self.user = user.objects.create_user('testuser', 'test@testing.com', 'password') |  | ||||||
|         self.client.login(username='testuser', password='password') |  | ||||||
|  |  | ||||||
|     def test_define(self): |     def test_define(self): | ||||||
|         self.assertEqual(int(inventree_extras.define(3)), 3) |         self.assertEqual(int(inventree_extras.define(3)), 3) | ||||||
|  |  | ||||||
| @@ -330,24 +325,13 @@ class TestTemplateTest(TestCase): | |||||||
|         self.assertEqual(variant.getTestTemplates().count(), n + 1) |         self.assertEqual(variant.getTestTemplates().count(), n + 1) | ||||||
|  |  | ||||||
|  |  | ||||||
| class PartSettingsTest(TestCase): | class PartSettingsTest(InvenTreeTestCase): | ||||||
|     """ |     """ | ||||||
|     Tests to ensure that the user-configurable default values work as expected. |     Tests to ensure that the user-configurable default values work as expected. | ||||||
|  |  | ||||||
|     Some fields for the Part model can have default values specified by the user. |     Some fields for the Part model can have default values specified by the user. | ||||||
|     """ |     """ | ||||||
|  |  | ||||||
|     def setUp(self): |  | ||||||
|         # Create a user for auth |  | ||||||
|         user = get_user_model() |  | ||||||
|  |  | ||||||
|         self.user = user.objects.create_user( |  | ||||||
|             username='testuser', |  | ||||||
|             email='test@testing.com', |  | ||||||
|             password='password', |  | ||||||
|             is_staff=True |  | ||||||
|         ) |  | ||||||
|  |  | ||||||
|     def make_part(self): |     def make_part(self): | ||||||
|         """ |         """ | ||||||
|         Helper function to create a simple part |         Helper function to create a simple part | ||||||
| @@ -461,7 +445,7 @@ class PartSettingsTest(TestCase): | |||||||
|         Part.objects.create(name='abc', revision='6', description='A part', IPN=' ') |         Part.objects.create(name='abc', revision='6', description='A part', IPN=' ') | ||||||
|  |  | ||||||
|  |  | ||||||
| class PartSubscriptionTests(TestCase): | class PartSubscriptionTests(InvenTreeTestCase): | ||||||
|  |  | ||||||
|     fixtures = [ |     fixtures = [ | ||||||
|         'location', |         'location', | ||||||
| @@ -470,15 +454,7 @@ class PartSubscriptionTests(TestCase): | |||||||
|     ] |     ] | ||||||
|  |  | ||||||
|     def setUp(self): |     def setUp(self): | ||||||
|         # Create a user for auth |         super().setUp() | ||||||
|         user = get_user_model() |  | ||||||
|  |  | ||||||
|         self.user = user.objects.create_user( |  | ||||||
|             username='testuser', |  | ||||||
|             email='test@testing.com', |  | ||||||
|             password='password', |  | ||||||
|             is_staff=True |  | ||||||
|         ) |  | ||||||
|  |  | ||||||
|         # electronics / IC / MCU |         # electronics / IC / MCU | ||||||
|         self.category = PartCategory.objects.get(pk=4) |         self.category = PartCategory.objects.get(pk=4) | ||||||
| @@ -578,7 +554,7 @@ class PartSubscriptionTests(TestCase): | |||||||
|         self.assertTrue(self.part.is_starred_by(self.user)) |         self.assertTrue(self.part.is_starred_by(self.user)) | ||||||
|  |  | ||||||
|  |  | ||||||
| class BaseNotificationIntegrationTest(TestCase): | class BaseNotificationIntegrationTest(InvenTreeTestCase): | ||||||
|     """ Integration test for notifications """ |     """ Integration test for notifications """ | ||||||
|  |  | ||||||
|     fixtures = [ |     fixtures = [ | ||||||
| @@ -589,15 +565,7 @@ class BaseNotificationIntegrationTest(TestCase): | |||||||
|     ] |     ] | ||||||
|  |  | ||||||
|     def setUp(self): |     def setUp(self): | ||||||
|         # Create a user for auth |         super().setUp() | ||||||
|         user = get_user_model() |  | ||||||
|  |  | ||||||
|         self.user = user.objects.create_user( |  | ||||||
|             username='testuser', |  | ||||||
|             email='test@testing.com', |  | ||||||
|             password='password', |  | ||||||
|             is_staff=True |  | ||||||
|         ) |  | ||||||
|         # Add Mailadress |         # Add Mailadress | ||||||
|         EmailAddress.objects.create(user=self.user, email='test@testing.com') |         EmailAddress.objects.create(user=self.user, email='test@testing.com') | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,14 +1,13 @@ | |||||||
| """ Unit tests for Part Views (see views.py) """ | """ Unit tests for Part Views (see views.py) """ | ||||||
|  |  | ||||||
| from django.test import TestCase |  | ||||||
| from django.urls import reverse | from django.urls import reverse | ||||||
| from django.contrib.auth import get_user_model |  | ||||||
| from django.contrib.auth.models import Group | from InvenTree.helpers import InvenTreeTestCase | ||||||
|  |  | ||||||
| from .models import Part | from .models import Part | ||||||
|  |  | ||||||
|  |  | ||||||
| class PartViewTestCase(TestCase): | class PartViewTestCase(InvenTreeTestCase): | ||||||
|  |  | ||||||
|     fixtures = [ |     fixtures = [ | ||||||
|         'category', |         'category', | ||||||
| @@ -19,33 +18,12 @@ class PartViewTestCase(TestCase): | |||||||
|         'supplier_part', |         'supplier_part', | ||||||
|     ] |     ] | ||||||
|  |  | ||||||
|  |     roles = 'all' | ||||||
|  |     superuser = True | ||||||
|  |  | ||||||
|     def setUp(self): |     def setUp(self): | ||||||
|         super().setUp() |         super().setUp() | ||||||
|  |  | ||||||
|         # Create a user |  | ||||||
|         user = get_user_model() |  | ||||||
|  |  | ||||||
|         self.user = user.objects.create_user( |  | ||||||
|             username='username', |  | ||||||
|             email='user@email.com', |  | ||||||
|             password='password' |  | ||||||
|         ) |  | ||||||
|  |  | ||||||
|         # Put the user into a group with the correct permissions |  | ||||||
|         group = Group.objects.create(name='mygroup') |  | ||||||
|         self.user.groups.add(group) |  | ||||||
|  |  | ||||||
|         # Give the group *all* the permissions! |  | ||||||
|         for rule in group.rule_sets.all(): |  | ||||||
|             rule.can_view = True |  | ||||||
|             rule.can_change = True |  | ||||||
|             rule.can_add = True |  | ||||||
|             rule.can_delete = True |  | ||||||
|  |  | ||||||
|             rule.save() |  | ||||||
|  |  | ||||||
|         self.client.login(username='username', password='password') |  | ||||||
|  |  | ||||||
|  |  | ||||||
| class PartListTest(PartViewTestCase): | class PartListTest(PartViewTestCase): | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,8 +1,8 @@ | |||||||
| """ Unit tests for action plugins """ | """ Unit tests for action plugins """ | ||||||
|  |  | ||||||
| from django.test import TestCase | from django.test import TestCase | ||||||
| from django.contrib.auth import get_user_model |  | ||||||
|  |  | ||||||
|  | from InvenTree.helpers import InvenTreeTestCase | ||||||
| from plugin import InvenTreePlugin | from plugin import InvenTreePlugin | ||||||
| from plugin.mixins import ActionMixin | from plugin.mixins import ActionMixin | ||||||
|  |  | ||||||
| @@ -65,15 +65,9 @@ class ActionMixinTests(TestCase): | |||||||
|         }) |         }) | ||||||
|  |  | ||||||
|  |  | ||||||
| class APITests(TestCase): | class APITests(InvenTreeTestCase): | ||||||
|     """ Tests for action api """ |     """ Tests for action api """ | ||||||
|  |  | ||||||
|     def setUp(self): |  | ||||||
|         # Create a user for auth |  | ||||||
|         user = get_user_model() |  | ||||||
|         self.test_user = user.objects.create_user('testuser', 'test@testing.com', 'password') |  | ||||||
|         self.client.login(username='testuser', password='password') |  | ||||||
|  |  | ||||||
|     def test_post_errors(self): |     def test_post_errors(self): | ||||||
|         """Check the possible errors with post""" |         """Check the possible errors with post""" | ||||||
|  |  | ||||||
|   | |||||||
| @@ -4,16 +4,15 @@ | |||||||
| Unit tests for Barcode endpoints | Unit tests for Barcode endpoints | ||||||
| """ | """ | ||||||
|  |  | ||||||
| from django.contrib.auth import get_user_model |  | ||||||
| from django.urls import reverse | from django.urls import reverse | ||||||
|  |  | ||||||
| from rest_framework.test import APITestCase |  | ||||||
| from rest_framework import status | from rest_framework import status | ||||||
|  |  | ||||||
|  | from InvenTree.api_tester import InvenTreeAPITestCase | ||||||
| from stock.models import StockItem | from stock.models import StockItem | ||||||
|  |  | ||||||
|  |  | ||||||
| class BarcodeAPITest(APITestCase): | class BarcodeAPITest(InvenTreeAPITestCase): | ||||||
|  |  | ||||||
|     fixtures = [ |     fixtures = [ | ||||||
|         'category', |         'category', | ||||||
| @@ -23,11 +22,7 @@ class BarcodeAPITest(APITestCase): | |||||||
|     ] |     ] | ||||||
|  |  | ||||||
|     def setUp(self): |     def setUp(self): | ||||||
|         # Create a user for auth |         super().setUp() | ||||||
|         user = get_user_model() |  | ||||||
|         user.objects.create_user('testuser', 'test@testing.com', 'password') |  | ||||||
|  |  | ||||||
|         self.client.login(username='testuser', password='password') |  | ||||||
|  |  | ||||||
|         self.scan_url = reverse('api-barcode-scan') |         self.scan_url = reverse('api-barcode-scan') | ||||||
|         self.assign_url = reverse('api-barcode-link') |         self.assign_url = reverse('api-barcode-link') | ||||||
|   | |||||||
| @@ -1,19 +1,18 @@ | |||||||
| """ Unit tests for base mixins for plugins """ | """ Unit tests for base mixins for plugins """ | ||||||
|  |  | ||||||
| from django.test import TestCase |  | ||||||
| from django.conf import settings | from django.conf import settings | ||||||
|  | from django.test import TestCase | ||||||
| from django.urls import include, re_path, reverse | from django.urls import include, re_path, reverse | ||||||
| from django.contrib.auth import get_user_model |  | ||||||
| from django.contrib.auth.models import Group |  | ||||||
|  |  | ||||||
| from error_report.models import Error | from error_report.models import Error | ||||||
|  |  | ||||||
|  | from InvenTree.helpers import InvenTreeTestCase | ||||||
| from plugin import InvenTreePlugin | from plugin import InvenTreePlugin | ||||||
| from plugin.mixins import AppMixin, SettingsMixin, UrlsMixin, NavigationMixin, APICallMixin |  | ||||||
| from plugin.urls import PLUGIN_BASE |  | ||||||
| from plugin.helpers import MixinNotImplementedError | from plugin.helpers import MixinNotImplementedError | ||||||
|  | from plugin.mixins import (APICallMixin, AppMixin, NavigationMixin, | ||||||
|  |                            SettingsMixin, UrlsMixin) | ||||||
| from plugin.registry import registry | from plugin.registry import registry | ||||||
|  | from plugin.urls import PLUGIN_BASE | ||||||
|  |  | ||||||
|  |  | ||||||
| class BaseMixinDefinition: | class BaseMixinDefinition: | ||||||
| @@ -24,7 +23,7 @@ class BaseMixinDefinition: | |||||||
|         self.assertIn(self.MIXIN_HUMAN_NAME, [item['human_name'] for item in self.mixin.registered_mixins]) |         self.assertIn(self.MIXIN_HUMAN_NAME, [item['human_name'] for item in self.mixin.registered_mixins]) | ||||||
|  |  | ||||||
|  |  | ||||||
| class SettingsMixinTest(BaseMixinDefinition, TestCase): | class SettingsMixinTest(BaseMixinDefinition, InvenTreeTestCase): | ||||||
|     MIXIN_HUMAN_NAME = 'Settings' |     MIXIN_HUMAN_NAME = 'Settings' | ||||||
|     MIXIN_NAME = 'settings' |     MIXIN_NAME = 'settings' | ||||||
|     MIXIN_ENABLE_CHECK = 'has_settings' |     MIXIN_ENABLE_CHECK = 'has_settings' | ||||||
| @@ -40,9 +39,7 @@ class SettingsMixinTest(BaseMixinDefinition, TestCase): | |||||||
|             pass |             pass | ||||||
|         self.mixin_nothing = NoSettingsCls() |         self.mixin_nothing = NoSettingsCls() | ||||||
|  |  | ||||||
|         user = get_user_model() |         super().setUp() | ||||||
|         self.test_user = user.objects.create_user('testuser', 'test@testing.com', 'password') |  | ||||||
|         self.test_user.is_staff = True |  | ||||||
|  |  | ||||||
|     def test_function(self): |     def test_function(self): | ||||||
|         # settings variable |         # settings variable | ||||||
| @@ -54,7 +51,7 @@ class SettingsMixinTest(BaseMixinDefinition, TestCase): | |||||||
|         self.assertEqual(self.mixin_nothing.get_setting('ABCD'), '') |         self.assertEqual(self.mixin_nothing.get_setting('ABCD'), '') | ||||||
|  |  | ||||||
|         # right setting |         # right setting | ||||||
|         self.mixin.set_setting('SETTING1', '12345', self.test_user) |         self.mixin.set_setting('SETTING1', '12345', self.user) | ||||||
|         self.assertEqual(self.mixin.get_setting('SETTING1'), '12345') |         self.assertEqual(self.mixin.get_setting('SETTING1'), '12345') | ||||||
|  |  | ||||||
|         # no setting |         # no setting | ||||||
| @@ -251,7 +248,7 @@ class APICallMixinTest(BaseMixinDefinition, TestCase): | |||||||
|             self.mixin_wrong2.has_api_call() |             self.mixin_wrong2.has_api_call() | ||||||
|  |  | ||||||
|  |  | ||||||
| class PanelMixinTests(TestCase): | class PanelMixinTests(InvenTreeTestCase): | ||||||
|     """Test that the PanelMixin plugin operates correctly""" |     """Test that the PanelMixin plugin operates correctly""" | ||||||
|  |  | ||||||
|     fixtures = [ |     fixtures = [ | ||||||
| @@ -261,32 +258,7 @@ class PanelMixinTests(TestCase): | |||||||
|         'stock', |         'stock', | ||||||
|     ] |     ] | ||||||
|  |  | ||||||
|     def setUp(self): |     roles = 'all' | ||||||
|         super().setUp() |  | ||||||
|  |  | ||||||
|         # Create a user which has all the privelages |  | ||||||
|         user = get_user_model() |  | ||||||
|  |  | ||||||
|         self.user = user.objects.create_user( |  | ||||||
|             username='username', |  | ||||||
|             email='user@email.com', |  | ||||||
|             password='password' |  | ||||||
|         ) |  | ||||||
|  |  | ||||||
|         # Put the user into a group with the correct permissions |  | ||||||
|         group = Group.objects.create(name='mygroup') |  | ||||||
|         self.user.groups.add(group) |  | ||||||
|  |  | ||||||
|         # Give the group *all* the permissions! |  | ||||||
|         for rule in group.rule_sets.all(): |  | ||||||
|             rule.can_view = True |  | ||||||
|             rule.can_change = True |  | ||||||
|             rule.can_add = True |  | ||||||
|             rule.can_delete = True |  | ||||||
|  |  | ||||||
|             rule.save() |  | ||||||
|  |  | ||||||
|         self.client.login(username='username', password='password') |  | ||||||
|  |  | ||||||
|     def test_installed(self): |     def test_installed(self): | ||||||
|         """Test that the sample panel plugin is installed""" |         """Test that the sample panel plugin is installed""" | ||||||
|   | |||||||
| @@ -1,20 +1,15 @@ | |||||||
| """ Unit tests for action plugins """ | """ Unit tests for action plugins """ | ||||||
|  |  | ||||||
| from django.test import TestCase | from InvenTree.helpers import InvenTreeTestCase | ||||||
| from django.contrib.auth import get_user_model |  | ||||||
|  |  | ||||||
| from plugin.builtin.action.simpleactionplugin import SimpleActionPlugin | from plugin.builtin.action.simpleactionplugin import SimpleActionPlugin | ||||||
|  |  | ||||||
|  |  | ||||||
| class SimpleActionPluginTests(TestCase): | class SimpleActionPluginTests(InvenTreeTestCase): | ||||||
|     """ Tests for SampleIntegrationPlugin """ |     """ Tests for SampleIntegrationPlugin """ | ||||||
|  |  | ||||||
|     def setUp(self): |     def setUp(self): | ||||||
|         # Create a user for auth |         super().setUp() | ||||||
|         user = get_user_model() |  | ||||||
|         self.test_user = user.objects.create_user('testuser', 'test@testing.com', 'password') |  | ||||||
|  |  | ||||||
|         self.client.login(username='testuser', password='password') |  | ||||||
|         self.plugin = SimpleActionPlugin() |         self.plugin = SimpleActionPlugin() | ||||||
|  |  | ||||||
|     def test_name(self): |     def test_name(self): | ||||||
| @@ -33,7 +28,7 @@ class SimpleActionPluginTests(TestCase): | |||||||
|                 "action": 'simple', |                 "action": 'simple', | ||||||
|                 "result": True, |                 "result": True, | ||||||
|                 "info": { |                 "info": { | ||||||
|                     "user": "testuser", |                     "user": self.username, | ||||||
|                     "hello": "world", |                     "hello": "world", | ||||||
|                 }, |                 }, | ||||||
|             } |             } | ||||||
|   | |||||||
| @@ -1,14 +1,14 @@ | |||||||
| # -*- coding: utf-8 -*- | # -*- coding: utf-8 -*- | ||||||
| """Unit tests for InvenTreeBarcodePlugin""" | """Unit tests for InvenTreeBarcodePlugin""" | ||||||
|  |  | ||||||
| from django.contrib.auth import get_user_model |  | ||||||
| from django.urls import reverse | from django.urls import reverse | ||||||
|  |  | ||||||
| from rest_framework.test import APITestCase |  | ||||||
| from rest_framework import status | from rest_framework import status | ||||||
|  |  | ||||||
|  | from InvenTree.api_tester import InvenTreeAPITestCase | ||||||
|  |  | ||||||
| class TestInvenTreeBarcode(APITestCase): |  | ||||||
|  | class TestInvenTreeBarcode(InvenTreeAPITestCase): | ||||||
|  |  | ||||||
|     fixtures = [ |     fixtures = [ | ||||||
|         'category', |         'category', | ||||||
| @@ -17,13 +17,6 @@ class TestInvenTreeBarcode(APITestCase): | |||||||
|         'stock' |         'stock' | ||||||
|     ] |     ] | ||||||
|  |  | ||||||
|     def setUp(self): |  | ||||||
|         # Create a user for auth |  | ||||||
|         user = get_user_model() |  | ||||||
|         user.objects.create_user('testuser', 'test@testing.com', 'password') |  | ||||||
|  |  | ||||||
|         self.client.login(username='testuser', password='password') |  | ||||||
|  |  | ||||||
|     def test_errors(self): |     def test_errors(self): | ||||||
|         """ |         """ | ||||||
|         Test all possible error cases for assigment action |         Test all possible error cases for assigment action | ||||||
|   | |||||||
| @@ -1,19 +1,11 @@ | |||||||
| """ Unit tests for action plugins """ | """ Unit tests for action plugins """ | ||||||
|  |  | ||||||
| from django.test import TestCase | from InvenTree.helpers import InvenTreeTestCase | ||||||
| from django.contrib.auth import get_user_model |  | ||||||
|  |  | ||||||
|  |  | ||||||
| class SampleIntegrationPluginTests(TestCase): | class SampleIntegrationPluginTests(InvenTreeTestCase): | ||||||
|     """ Tests for SampleIntegrationPlugin """ |     """ Tests for SampleIntegrationPlugin """ | ||||||
|  |  | ||||||
|     def setUp(self): |  | ||||||
|         # Create a user for auth |  | ||||||
|         user = get_user_model() |  | ||||||
|         user.objects.create_user('testuser', 'test@testing.com', 'password') |  | ||||||
|  |  | ||||||
|         self.client.login(username='testuser', password='password') |  | ||||||
|  |  | ||||||
|     def test_view(self): |     def test_view(self): | ||||||
|         """check the function of the custom  sample plugin """ |         """check the function of the custom  sample plugin """ | ||||||
|         response = self.client.get('/plugin/sample/ho/he/') |         response = self.client.get('/plugin/sample/ho/he/') | ||||||
|   | |||||||
| @@ -1,14 +1,13 @@ | |||||||
| """ Unit tests for Stock views (see views.py) """ | """ Unit tests for Stock views (see views.py) """ | ||||||
|  |  | ||||||
| from django.test import TestCase |  | ||||||
| from django.urls import reverse | from django.urls import reverse | ||||||
| from django.contrib.auth import get_user_model |  | ||||||
| from django.contrib.auth.models import Group | from InvenTree.helpers import InvenTreeTestCase | ||||||
|  |  | ||||||
| # from common.models import InvenTreeSetting | # from common.models import InvenTreeSetting | ||||||
|  |  | ||||||
|  |  | ||||||
| class StockViewTestCase(TestCase): | class StockViewTestCase(InvenTreeTestCase): | ||||||
|  |  | ||||||
|     fixtures = [ |     fixtures = [ | ||||||
|         'category', |         'category', | ||||||
| @@ -19,35 +18,7 @@ class StockViewTestCase(TestCase): | |||||||
|         'stock', |         'stock', | ||||||
|     ] |     ] | ||||||
|  |  | ||||||
|     def setUp(self): |     roles = 'all' | ||||||
|         super().setUp() |  | ||||||
|  |  | ||||||
|         # Create a user |  | ||||||
|         user = get_user_model() |  | ||||||
|  |  | ||||||
|         self.user = user.objects.create_user( |  | ||||||
|             username='username', |  | ||||||
|             email='user@email.com', |  | ||||||
|             password='password' |  | ||||||
|         ) |  | ||||||
|  |  | ||||||
|         self.user.is_staff = True |  | ||||||
|         self.user.save() |  | ||||||
|  |  | ||||||
|         # Put the user into a group with the correct permissions |  | ||||||
|         group = Group.objects.create(name='mygroup') |  | ||||||
|         self.user.groups.add(group) |  | ||||||
|  |  | ||||||
|         # Give the group *all* the permissions! |  | ||||||
|         for rule in group.rule_sets.all(): |  | ||||||
|             rule.can_view = True |  | ||||||
|             rule.can_change = True |  | ||||||
|             rule.can_add = True |  | ||||||
|             rule.can_delete = True |  | ||||||
|  |  | ||||||
|             rule.save() |  | ||||||
|  |  | ||||||
|         self.client.login(username='username', password='password') |  | ||||||
|  |  | ||||||
|  |  | ||||||
| class StockListTest(StockViewTestCase): | class StockListTest(StockViewTestCase): | ||||||
|   | |||||||
| @@ -1,9 +1,8 @@ | |||||||
| from django.test import TestCase |  | ||||||
| from django.db.models import Sum | from django.db.models import Sum | ||||||
| from django.contrib.auth import get_user_model |  | ||||||
| from django.core.exceptions import ValidationError | from django.core.exceptions import ValidationError | ||||||
|  |  | ||||||
| import datetime | import datetime | ||||||
|  | from InvenTree.helpers import InvenTreeTestCase | ||||||
|  |  | ||||||
| from InvenTree.status_codes import StockHistoryCode | from InvenTree.status_codes import StockHistoryCode | ||||||
|  |  | ||||||
| @@ -14,7 +13,7 @@ from part.models import Part | |||||||
| from build.models import Build | from build.models import Build | ||||||
|  |  | ||||||
|  |  | ||||||
| class StockTest(TestCase): | class StockTest(InvenTreeTestCase): | ||||||
|     """ |     """ | ||||||
|     Tests to ensure that the stock location tree functions correcly |     Tests to ensure that the stock location tree functions correcly | ||||||
|     """ |     """ | ||||||
| @@ -29,6 +28,8 @@ class StockTest(TestCase): | |||||||
|     ] |     ] | ||||||
|  |  | ||||||
|     def setUp(self): |     def setUp(self): | ||||||
|  |         super().setUp() | ||||||
|  |  | ||||||
|         # Extract some shortcuts from the fixtures |         # Extract some shortcuts from the fixtures | ||||||
|         self.home = StockLocation.objects.get(name='Home') |         self.home = StockLocation.objects.get(name='Home') | ||||||
|         self.bathroom = StockLocation.objects.get(name='Bathroom') |         self.bathroom = StockLocation.objects.get(name='Bathroom') | ||||||
| @@ -39,14 +40,6 @@ class StockTest(TestCase): | |||||||
|         self.drawer2 = StockLocation.objects.get(name='Drawer_2') |         self.drawer2 = StockLocation.objects.get(name='Drawer_2') | ||||||
|         self.drawer3 = StockLocation.objects.get(name='Drawer_3') |         self.drawer3 = StockLocation.objects.get(name='Drawer_3') | ||||||
|  |  | ||||||
|         # Create a user |  | ||||||
|         user = get_user_model() |  | ||||||
|         user.objects.create_user('username', 'user@email.com', 'password') |  | ||||||
|  |  | ||||||
|         self.client.login(username='username', password='password') |  | ||||||
|  |  | ||||||
|         self.user = user.objects.get(username='username') |  | ||||||
|  |  | ||||||
|         # Ensure the MPTT objects are correctly rebuild |         # Ensure the MPTT objects are correctly rebuild | ||||||
|         Part.objects.rebuild() |         Part.objects.rebuild() | ||||||
|         StockItem.objects.rebuild() |         StockItem.objects.rebuild() | ||||||
|   | |||||||
| @@ -1,10 +1,10 @@ | |||||||
| from django.test import TestCase | from django.test import TestCase | ||||||
| from django.apps import apps | from django.apps import apps | ||||||
| from django.urls import reverse | from django.urls import reverse | ||||||
| from django.contrib.auth import get_user_model |  | ||||||
| from django.contrib.auth.models import Group | from django.contrib.auth.models import Group | ||||||
|  |  | ||||||
| from rest_framework.authtoken.models import Token | from rest_framework.authtoken.models import Token | ||||||
|  | from InvenTree.helpers import InvenTreeTestCase | ||||||
|  |  | ||||||
| from users.models import RuleSet, Owner | from users.models import RuleSet, Owner | ||||||
|  |  | ||||||
| @@ -160,20 +160,11 @@ class RuleSetModelTest(TestCase): | |||||||
|         self.assertEqual(group.permissions.count(), 0) |         self.assertEqual(group.permissions.count(), 0) | ||||||
|  |  | ||||||
|  |  | ||||||
| class OwnerModelTest(TestCase): | class OwnerModelTest(InvenTreeTestCase): | ||||||
|     """ |     """ | ||||||
|     Some simplistic tests to ensure the Owner model is setup correctly. |     Some simplistic tests to ensure the Owner model is setup correctly. | ||||||
|     """ |     """ | ||||||
|  |  | ||||||
|     def setUp(self): |  | ||||||
|         """ Add users and groups """ |  | ||||||
|  |  | ||||||
|         # Create a new user |  | ||||||
|         self.user = get_user_model().objects.create_user('username', 'user@email.com', 'password') |  | ||||||
|         # Put the user into a new group |  | ||||||
|         self.group = Group.objects.create(name='new_group') |  | ||||||
|         self.user.groups.add(self.group) |  | ||||||
|  |  | ||||||
|     def do_request(self, endpoint, filters, status_code=200): |     def do_request(self, endpoint, filters, status_code=200): | ||||||
|         response = self.client.get(endpoint, filters, format='json') |         response = self.client.get(endpoint, filters, format='json') | ||||||
|         self.assertEqual(response.status_code, status_code) |         self.assertEqual(response.status_code, status_code) | ||||||
| @@ -212,11 +203,13 @@ class OwnerModelTest(TestCase): | |||||||
|         """ |         """ | ||||||
|         Test user APIs |         Test user APIs | ||||||
|         """ |         """ | ||||||
|  |         self.client.logout() | ||||||
|  |  | ||||||
|         # not authed |         # not authed | ||||||
|         self.do_request(reverse('api-owner-list'), {}, 401) |         self.do_request(reverse('api-owner-list'), {}, 401) | ||||||
|         self.do_request(reverse('api-owner-detail', kwargs={'pk': self.user.id}), {}, 401) |         self.do_request(reverse('api-owner-detail', kwargs={'pk': self.user.id}), {}, 401) | ||||||
|  |  | ||||||
|         self.client.login(username='username', password='password') |         self.client.login(username=self.username, password=self.password) | ||||||
|         # user list |         # user list | ||||||
|         self.do_request(reverse('api-owner-list'), {}) |         self.do_request(reverse('api-owner-list'), {}) | ||||||
|         # user list with search |         # user list with search | ||||||
| @@ -229,12 +222,14 @@ class OwnerModelTest(TestCase): | |||||||
|         """ |         """ | ||||||
|         Test token mechanisms |         Test token mechanisms | ||||||
|         """ |         """ | ||||||
|  |         self.client.logout() | ||||||
|  |  | ||||||
|         token = Token.objects.filter(user=self.user) |         token = Token.objects.filter(user=self.user) | ||||||
|  |  | ||||||
|         # not authed |         # not authed | ||||||
|         self.do_request(reverse('api-token'), {}, 401) |         self.do_request(reverse('api-token'), {}, 401) | ||||||
|  |  | ||||||
|         self.client.login(username='username', password='password') |         self.client.login(username=self.username, password=self.password) | ||||||
|         # token get |         # token get | ||||||
|         response = self.do_request(reverse('api-token'), {}) |         response = self.do_request(reverse('api-token'), {}) | ||||||
|         self.assertEqual(response['token'], token.first().key) |         self.assertEqual(response['token'], token.first().key) | ||||||
|   | |||||||
| @@ -28,6 +28,4 @@ source = ./InvenTree | |||||||
| src_paths=InvenTree | src_paths=InvenTree | ||||||
| skip_glob =*/migrations/*.py | skip_glob =*/migrations/*.py | ||||||
| known_django=django | known_django=django | ||||||
| import_heading_firstparty=InvenTree imports |  | ||||||
| import_heading_thirdparty=Third-Party imports |  | ||||||
| sections=FUTURE, STDLIB, DJANGO, THIRDPARTY, FIRSTPARTY, LOCALFOLDER | sections=FUTURE, STDLIB, DJANGO, THIRDPARTY, FIRSTPARTY, LOCALFOLDER | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user