mirror of
https://github.com/inventree/InvenTree.git
synced 2025-05-08 16:28:49 +00:00
Remove coupling of tests to cui (#8389)
* remove coupling of tests to cui * all testing for PUI absolute urls * remove overlapping test * refactor middleware check * move static things into global * factor out test target * re-add api exception * keep using settings.js for now
This commit is contained in:
parent
8f24119f29
commit
cd9f491dc6
@ -36,6 +36,24 @@ def get_token_from_request(request):
|
|||||||
return None
|
return None
|
||||||
|
|
||||||
|
|
||||||
|
# List of target URL endpoints where *do not* want to redirect to
|
||||||
|
urls = [
|
||||||
|
reverse_lazy('account_login'),
|
||||||
|
reverse_lazy('account_logout'),
|
||||||
|
reverse_lazy('admin:login'),
|
||||||
|
reverse_lazy('admin:logout'),
|
||||||
|
]
|
||||||
|
|
||||||
|
# Do not redirect requests to any of these paths
|
||||||
|
paths_ignore = [
|
||||||
|
'/api/',
|
||||||
|
'/auth/',
|
||||||
|
'/js/', # TODO - remove when CUI is removed
|
||||||
|
settings.MEDIA_URL,
|
||||||
|
settings.STATIC_URL,
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
class AuthRequiredMiddleware:
|
class AuthRequiredMiddleware:
|
||||||
"""Check for user to be authenticated."""
|
"""Check for user to be authenticated."""
|
||||||
|
|
||||||
@ -108,23 +126,6 @@ class AuthRequiredMiddleware:
|
|||||||
if not authorized:
|
if not authorized:
|
||||||
path = request.path_info
|
path = request.path_info
|
||||||
|
|
||||||
# List of URL endpoints we *do not* want to redirect to
|
|
||||||
urls = [
|
|
||||||
reverse_lazy('account_login'),
|
|
||||||
reverse_lazy('account_logout'),
|
|
||||||
reverse_lazy('admin:login'),
|
|
||||||
reverse_lazy('admin:logout'),
|
|
||||||
]
|
|
||||||
|
|
||||||
# Do not redirect requests to any of these paths
|
|
||||||
paths_ignore = [
|
|
||||||
'/api/',
|
|
||||||
'/auth/',
|
|
||||||
'/js/',
|
|
||||||
settings.MEDIA_URL,
|
|
||||||
settings.STATIC_URL,
|
|
||||||
]
|
|
||||||
|
|
||||||
if path not in urls and not any(
|
if path not in urls and not any(
|
||||||
path.startswith(p) for p in paths_ignore
|
path.startswith(p) for p in paths_ignore
|
||||||
):
|
):
|
||||||
|
@ -2,7 +2,6 @@
|
|||||||
|
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.http import Http404
|
from django.http import Http404
|
||||||
from django.test import tag
|
|
||||||
from django.urls import reverse
|
from django.urls import reverse
|
||||||
|
|
||||||
from error_report.models import Error
|
from error_report.models import Error
|
||||||
@ -11,8 +10,6 @@ from InvenTree.exceptions import log_error
|
|||||||
from InvenTree.unit_test import InvenTreeTestCase
|
from InvenTree.unit_test import InvenTreeTestCase
|
||||||
|
|
||||||
|
|
||||||
# TODO change test to not rely on CUI
|
|
||||||
@tag('cui')
|
|
||||||
class MiddlewareTests(InvenTreeTestCase):
|
class MiddlewareTests(InvenTreeTestCase):
|
||||||
"""Test for middleware functions."""
|
"""Test for middleware functions."""
|
||||||
|
|
||||||
@ -32,25 +29,17 @@ class MiddlewareTests(InvenTreeTestCase):
|
|||||||
# logout
|
# logout
|
||||||
self.client.logout()
|
self.client.logout()
|
||||||
|
|
||||||
# check that static files go through
|
|
||||||
# TODO @matmair re-enable this check
|
|
||||||
# self.check_path('/static/css/inventree.css', 302)
|
|
||||||
|
|
||||||
# check that account things go through
|
# check that account things go through
|
||||||
self.check_path(reverse('account_login'))
|
self.check_path(reverse('account_login'))
|
||||||
|
|
||||||
# logout goes directly to login
|
|
||||||
self.check_path(reverse('account_logout'))
|
|
||||||
|
|
||||||
# check that frontend code is redirected to login
|
# check that frontend code is redirected to login
|
||||||
response = self.check_path(reverse('stats'), 302)
|
response = self.check_path(reverse('index'), 302)
|
||||||
self.assertEqual(response.url, '/accounts/login/?next=/stats/')
|
self.assertEqual(response.url, '/accounts/login/?next=/')
|
||||||
|
|
||||||
# check that a 401 is raised
|
|
||||||
self.check_path(reverse('settings.js'), 401)
|
|
||||||
|
|
||||||
def test_token_auth(self):
|
def test_token_auth(self):
|
||||||
"""Test auth with token auth."""
|
"""Test auth with token auth."""
|
||||||
|
target = reverse('settings.js') # for PUI only use 'api-license'
|
||||||
|
|
||||||
# get token
|
# get token
|
||||||
response = self.client.get(reverse('api-token'), format='json', data={})
|
response = self.client.get(reverse('api-token'), format='json', data={})
|
||||||
token = response.data['token']
|
token = response.data['token']
|
||||||
@ -58,16 +47,17 @@ class MiddlewareTests(InvenTreeTestCase):
|
|||||||
# logout
|
# logout
|
||||||
self.client.logout()
|
self.client.logout()
|
||||||
# this should raise a 401
|
# this should raise a 401
|
||||||
self.check_path(reverse('settings.js'), 401)
|
|
||||||
|
|
||||||
# request with token
|
self.check_path(target, 401)
|
||||||
self.check_path(reverse('settings.js'), HTTP_Authorization=f'Token {token}')
|
|
||||||
|
|
||||||
# Request with broken token
|
# Request with broken token
|
||||||
self.check_path(reverse('settings.js'), 401, HTTP_Authorization='Token abcd123')
|
self.check_path(target, 401, HTTP_Authorization='Token abcd123')
|
||||||
|
|
||||||
# should still fail without token
|
# should still fail without token
|
||||||
self.check_path(reverse('settings.js'), 401)
|
self.check_path(target, 401)
|
||||||
|
|
||||||
|
# request with token
|
||||||
|
self.check_path(target, HTTP_Authorization=f'Token {token}')
|
||||||
|
|
||||||
def test_error_exceptions(self):
|
def test_error_exceptions(self):
|
||||||
"""Test that ignored errors are not logged."""
|
"""Test that ignored errors are not logged."""
|
||||||
@ -80,7 +70,7 @@ class MiddlewareTests(InvenTreeTestCase):
|
|||||||
|
|
||||||
# Test normal setup
|
# Test normal setup
|
||||||
check()
|
check()
|
||||||
response = self.client.get(reverse('part-detail', kwargs={'pk': 9999}))
|
response = self.client.get(reverse('api-part-detail', kwargs={'pk': 9999}))
|
||||||
self.assertEqual(response.status_code, 404)
|
self.assertEqual(response.status_code, 404)
|
||||||
check()
|
check()
|
||||||
|
|
||||||
@ -92,13 +82,8 @@ class MiddlewareTests(InvenTreeTestCase):
|
|||||||
|
|
||||||
# Test setup without ignored errors
|
# Test setup without ignored errors
|
||||||
settings.IGNORED_ERRORS = []
|
settings.IGNORED_ERRORS = []
|
||||||
response = self.client.get(reverse('part-detail', kwargs={'pk': 9999}))
|
|
||||||
self.assertEqual(response.status_code, 404)
|
|
||||||
check(1)
|
|
||||||
|
|
||||||
# Test manual logging
|
|
||||||
try:
|
try:
|
||||||
raise Http404
|
raise Http404
|
||||||
except Http404:
|
except Http404:
|
||||||
log_error('testpath')
|
log_error('testpath')
|
||||||
check(2)
|
check(1)
|
||||||
|
@ -11,7 +11,7 @@ from django.conf import settings
|
|||||||
from django.contrib.auth import get_user_model
|
from django.contrib.auth import get_user_model
|
||||||
from django.core import mail
|
from django.core import mail
|
||||||
from django.core.exceptions import ValidationError
|
from django.core.exceptions import ValidationError
|
||||||
from django.test import TestCase, override_settings, tag
|
from django.test import TestCase, override_settings
|
||||||
from django.urls import reverse
|
from django.urls import reverse
|
||||||
from django.utils import timezone
|
from django.utils import timezone
|
||||||
|
|
||||||
@ -1493,8 +1493,6 @@ class MagicLoginTest(InvenTreeTestCase):
|
|||||||
self.assertEqual(resp.wsgi_request.user, self.user)
|
self.assertEqual(resp.wsgi_request.user, self.user)
|
||||||
|
|
||||||
|
|
||||||
# TODO - refactor to not use CUI
|
|
||||||
@tag('cui')
|
|
||||||
class MaintenanceModeTest(InvenTreeTestCase):
|
class MaintenanceModeTest(InvenTreeTestCase):
|
||||||
"""Unit tests for maintenance mode."""
|
"""Unit tests for maintenance mode."""
|
||||||
|
|
||||||
|
@ -477,7 +477,9 @@ if settings.ENABLE_PLATFORM_FRONTEND:
|
|||||||
frontendpatterns += [
|
frontendpatterns += [
|
||||||
path(
|
path(
|
||||||
'accounts/login/',
|
'accounts/login/',
|
||||||
RedirectView.as_view(url=settings.FRONTEND_URL_BASE, permanent=False),
|
RedirectView.as_view(
|
||||||
|
url=f'/{settings.FRONTEND_URL_BASE}', permanent=False
|
||||||
|
),
|
||||||
name='account_login',
|
name='account_login',
|
||||||
)
|
)
|
||||||
]
|
]
|
||||||
|
@ -47,6 +47,8 @@ class BuildTestSimple(InvenTreeTestCase):
|
|||||||
b1 = Build.objects.get(pk=1)
|
b1 = Build.objects.get(pk=1)
|
||||||
if settings.ENABLE_CLASSIC_FRONTEND:
|
if settings.ENABLE_CLASSIC_FRONTEND:
|
||||||
self.assertEqual(b1.get_absolute_url(), '/build/1/')
|
self.assertEqual(b1.get_absolute_url(), '/build/1/')
|
||||||
|
else:
|
||||||
|
self.assertEqual(b1.get_absolute_url(), '/platform/manufacturing/build-order/1')
|
||||||
|
|
||||||
def test_is_complete(self):
|
def test_is_complete(self):
|
||||||
"""Test build completion status"""
|
"""Test build completion status"""
|
||||||
|
@ -62,6 +62,10 @@ class CompanySimpleTest(TestCase):
|
|||||||
c = Company.objects.get(pk=1)
|
c = Company.objects.get(pk=1)
|
||||||
if settings.ENABLE_CLASSIC_FRONTEND:
|
if settings.ENABLE_CLASSIC_FRONTEND:
|
||||||
self.assertEqual(c.get_absolute_url(), '/company/1/')
|
self.assertEqual(c.get_absolute_url(), '/company/1/')
|
||||||
|
else:
|
||||||
|
self.assertEqual(
|
||||||
|
c.get_absolute_url(), '/platform/purchasing/manufacturer/1'
|
||||||
|
)
|
||||||
|
|
||||||
def test_image_renamer(self):
|
def test_image_renamer(self):
|
||||||
"""Test the company image upload functionality."""
|
"""Test the company image upload functionality."""
|
||||||
|
@ -46,6 +46,11 @@ class OrderTest(TestCase):
|
|||||||
self.assertEqual(
|
self.assertEqual(
|
||||||
order.get_absolute_url(), f'/order/purchase-order/{pk}/'
|
order.get_absolute_url(), f'/order/purchase-order/{pk}/'
|
||||||
)
|
)
|
||||||
|
else:
|
||||||
|
self.assertEqual(
|
||||||
|
order.get_absolute_url(),
|
||||||
|
f'/platform/purchasing/purchase-order/{pk}',
|
||||||
|
)
|
||||||
|
|
||||||
self.assertEqual(order.reference, f'PO-{pk:04d}')
|
self.assertEqual(order.reference, f'PO-{pk:04d}')
|
||||||
|
|
||||||
|
@ -130,6 +130,10 @@ class CategoryTest(TestCase):
|
|||||||
"""Test that the PartCategory URL works."""
|
"""Test that the PartCategory URL works."""
|
||||||
if settings.ENABLE_CLASSIC_FRONTEND:
|
if settings.ENABLE_CLASSIC_FRONTEND:
|
||||||
self.assertEqual(self.capacitors.get_absolute_url(), '/part/category/3/')
|
self.assertEqual(self.capacitors.get_absolute_url(), '/part/category/3/')
|
||||||
|
else:
|
||||||
|
self.assertEqual(
|
||||||
|
self.capacitors.get_absolute_url(), '/platform/part/category/3'
|
||||||
|
)
|
||||||
|
|
||||||
def test_part_count(self):
|
def test_part_count(self):
|
||||||
"""Test that the Category part count works."""
|
"""Test that the Category part count works."""
|
||||||
|
@ -246,6 +246,8 @@ class PartTest(TestCase):
|
|||||||
self.assertEqual(self.r1.name, 'R_2K2_0805')
|
self.assertEqual(self.r1.name, 'R_2K2_0805')
|
||||||
if settings.ENABLE_CLASSIC_FRONTEND:
|
if settings.ENABLE_CLASSIC_FRONTEND:
|
||||||
self.assertEqual(self.r1.get_absolute_url(), '/part/3/')
|
self.assertEqual(self.r1.get_absolute_url(), '/part/3/')
|
||||||
|
else:
|
||||||
|
self.assertEqual(self.r1.get_absolute_url(), '/platform/part/3')
|
||||||
|
|
||||||
def test_category(self):
|
def test_category(self):
|
||||||
"""Test PartCategory path."""
|
"""Test PartCategory path."""
|
||||||
|
@ -289,6 +289,10 @@ class TestInvenTreeBarcode(InvenTreeAPITestCase):
|
|||||||
self.assertEqual(
|
self.assertEqual(
|
||||||
response.data['stocklocation']['web_url'], '/stock/location/5/'
|
response.data['stocklocation']['web_url'], '/stock/location/5/'
|
||||||
)
|
)
|
||||||
|
else:
|
||||||
|
self.assertEqual(
|
||||||
|
response.data['stocklocation']['web_url'], '/platform/stock/location/5'
|
||||||
|
)
|
||||||
self.assertEqual(response.data['plugin'], 'InvenTreeBarcode')
|
self.assertEqual(response.data['plugin'], 'InvenTreeBarcode')
|
||||||
|
|
||||||
# Scan a Part object
|
# Scan a Part object
|
||||||
@ -332,6 +336,10 @@ class TestInvenTreeBarcode(InvenTreeAPITestCase):
|
|||||||
self.assertEqual(
|
self.assertEqual(
|
||||||
response.data['stocklocation']['web_url'], '/stock/location/5/'
|
response.data['stocklocation']['web_url'], '/stock/location/5/'
|
||||||
)
|
)
|
||||||
|
else:
|
||||||
|
self.assertEqual(
|
||||||
|
response.data['stocklocation']['web_url'], '/platform/stock/location/5'
|
||||||
|
)
|
||||||
self.assertEqual(response.data['plugin'], 'InvenTreeBarcode')
|
self.assertEqual(response.data['plugin'], 'InvenTreeBarcode')
|
||||||
|
|
||||||
# Scan a Part object
|
# Scan a Part object
|
||||||
|
@ -266,6 +266,9 @@ class StockTest(StockTestBase):
|
|||||||
if settings.ENABLE_CLASSIC_FRONTEND:
|
if settings.ENABLE_CLASSIC_FRONTEND:
|
||||||
self.assertEqual(it.get_absolute_url(), '/stock/item/2/')
|
self.assertEqual(it.get_absolute_url(), '/stock/item/2/')
|
||||||
self.assertEqual(self.home.get_absolute_url(), '/stock/location/1/')
|
self.assertEqual(self.home.get_absolute_url(), '/stock/location/1/')
|
||||||
|
else:
|
||||||
|
self.assertEqual(it.get_absolute_url(), '/platform/stock/item/2')
|
||||||
|
self.assertEqual(self.home.get_absolute_url(), '/platform/stock/location/1')
|
||||||
|
|
||||||
def test_strings(self):
|
def test_strings(self):
|
||||||
"""Test str function."""
|
"""Test str function."""
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
from django.apps import apps
|
from django.apps import apps
|
||||||
from django.contrib.auth.models import Group
|
from django.contrib.auth.models import Group
|
||||||
from django.test import TestCase, tag
|
from django.test import TestCase
|
||||||
from django.urls import reverse
|
from django.urls import reverse
|
||||||
|
|
||||||
from common.settings import set_global_setting
|
from common.settings import set_global_setting
|
||||||
@ -166,8 +166,6 @@ class OwnerModelTest(InvenTreeTestCase):
|
|||||||
self.assertEqual(response.status_code, status_code)
|
self.assertEqual(response.status_code, status_code)
|
||||||
return response.data
|
return response.data
|
||||||
|
|
||||||
# TODO: Find out why this depends on CUI
|
|
||||||
@tag('cui')
|
|
||||||
def test_owner(self):
|
def test_owner(self):
|
||||||
"""Tests for the 'owner' model."""
|
"""Tests for the 'owner' model."""
|
||||||
# Check that owner was created for user
|
# Check that owner was created for user
|
||||||
|
Loading…
x
Reference in New Issue
Block a user