mirror of
https://github.com/inventree/InvenTree.git
synced 2025-04-28 11:36:44 +00:00
refactor(backend): reduce tags (#8932)
* reduce tags more * remove splashscreen usage * fix test * reintroduce inventree_logo * re-add splashscreen fnct * re-add needed tag * re-add date renderer * simplify away user specific stuff - there are no users in reports * and simplify a bit more * increase coverage * fix format * and more coverage * fix render_date * more coverage
This commit is contained in:
parent
cfa248aad9
commit
fff0b99b08
@ -22,11 +22,11 @@ import InvenTree.version
|
|||||||
import users.models
|
import users.models
|
||||||
from InvenTree import helpers
|
from InvenTree import helpers
|
||||||
from InvenTree.mixins import ListCreateAPI
|
from InvenTree.mixins import ListCreateAPI
|
||||||
from InvenTree.templatetags.inventree_extras import plugins_info
|
|
||||||
from part.models import Part
|
from part.models import Part
|
||||||
from plugin.serializers import MetadataSerializer
|
from plugin.serializers import MetadataSerializer
|
||||||
from users.models import ApiToken
|
from users.models import ApiToken
|
||||||
|
|
||||||
|
from .helpers import plugins_info
|
||||||
from .helpers_email import is_email_configured
|
from .helpers_email import is_email_configured
|
||||||
from .mixins import ListAPI, RetrieveUpdateAPI
|
from .mixins import ListAPI, RetrieveUpdateAPI
|
||||||
from .status import check_system_health, is_worker_running
|
from .status import check_system_health, is_worker_running
|
||||||
|
@ -1070,3 +1070,20 @@ def pui_url(subpath: str) -> str:
|
|||||||
if not subpath.startswith('/'):
|
if not subpath.startswith('/'):
|
||||||
subpath = '/' + subpath
|
subpath = '/' + subpath
|
||||||
return f'/{settings.FRONTEND_URL_BASE}{subpath}'
|
return f'/{settings.FRONTEND_URL_BASE}{subpath}'
|
||||||
|
|
||||||
|
|
||||||
|
def plugins_info(*args, **kwargs):
|
||||||
|
"""Return information about activated plugins."""
|
||||||
|
from plugin.registry import registry
|
||||||
|
|
||||||
|
# Check if plugins are even enabled
|
||||||
|
if not settings.PLUGINS_ENABLED:
|
||||||
|
return False
|
||||||
|
|
||||||
|
# Fetch plugins
|
||||||
|
plug_list = [plg for plg in registry.plugins.values() if plg.plugin_config().active]
|
||||||
|
# Format list
|
||||||
|
return [
|
||||||
|
{'name': plg.name, 'slug': plg.slug, 'version': plg.version}
|
||||||
|
for plg in plug_list
|
||||||
|
]
|
||||||
|
@ -4,25 +4,20 @@ from datetime import date, datetime
|
|||||||
|
|
||||||
from django import template
|
from django import template
|
||||||
from django.conf import settings as djangosettings
|
from django.conf import settings as djangosettings
|
||||||
from django.urls import NoReverseMatch, reverse
|
|
||||||
from django.utils.safestring import mark_safe
|
import structlog
|
||||||
from django.utils.translation import gettext_lazy as _
|
|
||||||
|
|
||||||
import common.models
|
import common.models
|
||||||
import InvenTree.helpers
|
import InvenTree.helpers
|
||||||
import InvenTree.helpers_model
|
import InvenTree.helpers_model
|
||||||
import plugin.models
|
import plugin.models
|
||||||
from common.currency import currency_code_default
|
|
||||||
from common.settings import get_global_setting
|
from common.settings import get_global_setting
|
||||||
from InvenTree import settings, version
|
from InvenTree import version
|
||||||
from plugin import registry
|
|
||||||
from plugin.plugin import InvenTreePlugin
|
from plugin.plugin import InvenTreePlugin
|
||||||
|
|
||||||
register = template.Library()
|
register = template.Library()
|
||||||
|
|
||||||
|
|
||||||
import structlog
|
|
||||||
|
|
||||||
logger = structlog.get_logger('inventree')
|
logger = structlog.get_logger('inventree')
|
||||||
|
|
||||||
|
|
||||||
@ -44,12 +39,8 @@ def decimal(x, *args, **kwargs):
|
|||||||
|
|
||||||
|
|
||||||
@register.simple_tag(takes_context=True)
|
@register.simple_tag(takes_context=True)
|
||||||
def render_date(context, date_object):
|
def render_date(date_object):
|
||||||
"""Renders a date according to the preference of the provided user.
|
"""Renders a date object as a string."""
|
||||||
|
|
||||||
Note that the user preference is stored using the formatting adopted by moment.js,
|
|
||||||
which differs from the python formatting!
|
|
||||||
"""
|
|
||||||
if date_object is None:
|
if date_object is None:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
@ -67,29 +58,7 @@ def render_date(context, date_object):
|
|||||||
logger.warning('Tried to convert invalid date string: %s', date_object)
|
logger.warning('Tried to convert invalid date string: %s', date_object)
|
||||||
return None
|
return None
|
||||||
|
|
||||||
# We may have already pre-cached the date format by calling this already!
|
user_date_format = '%Y-%m-%d'
|
||||||
user_date_format = context.get('user_date_format', None)
|
|
||||||
|
|
||||||
if user_date_format is None:
|
|
||||||
user = context.get('user', None)
|
|
||||||
|
|
||||||
if user and user.is_authenticated:
|
|
||||||
# User is specified - look for their date display preference
|
|
||||||
user_date_format = common.models.InvenTreeUserSetting.get_setting(
|
|
||||||
'DATE_DISPLAY_FORMAT', user=user
|
|
||||||
)
|
|
||||||
else:
|
|
||||||
user_date_format = 'YYYY-MM-DD'
|
|
||||||
|
|
||||||
# Convert the format string to Pythonic equivalent
|
|
||||||
replacements = [('YYYY', '%Y'), ('MMM', '%b'), ('MM', '%m'), ('DD', '%d')]
|
|
||||||
|
|
||||||
for o, n in replacements:
|
|
||||||
user_date_format = user_date_format.replace(o, n)
|
|
||||||
|
|
||||||
# Update the context cache
|
|
||||||
context['user_date_format'] = user_date_format
|
|
||||||
|
|
||||||
if isinstance(date_object, (datetime, date)):
|
if isinstance(date_object, (datetime, date)):
|
||||||
return date_object.strftime(user_date_format)
|
return date_object.strftime(user_date_format)
|
||||||
return date_object
|
return date_object
|
||||||
@ -119,40 +88,6 @@ def to_list(*args):
|
|||||||
return args
|
return args
|
||||||
|
|
||||||
|
|
||||||
@register.simple_tag()
|
|
||||||
def plugins_enabled(*args, **kwargs):
|
|
||||||
"""Return True if plugins are enabled for the server instance."""
|
|
||||||
return djangosettings.PLUGINS_ENABLED
|
|
||||||
|
|
||||||
|
|
||||||
@register.simple_tag()
|
|
||||||
def plugins_install_disabled(*args, **kwargs):
|
|
||||||
"""Return True if plugin install is disabled for the server instance."""
|
|
||||||
return djangosettings.PLUGINS_INSTALL_DISABLED
|
|
||||||
|
|
||||||
|
|
||||||
@register.simple_tag()
|
|
||||||
def plugins_info(*args, **kwargs):
|
|
||||||
"""Return information about activated plugins."""
|
|
||||||
# Check if plugins are even enabled
|
|
||||||
if not djangosettings.PLUGINS_ENABLED:
|
|
||||||
return False
|
|
||||||
|
|
||||||
# Fetch plugins
|
|
||||||
plug_list = [plg for plg in registry.plugins.values() if plg.plugin_config().active]
|
|
||||||
# Format list
|
|
||||||
return [
|
|
||||||
{'name': plg.name, 'slug': plg.slug, 'version': plg.version}
|
|
||||||
for plg in plug_list
|
|
||||||
]
|
|
||||||
|
|
||||||
|
|
||||||
@register.simple_tag()
|
|
||||||
def inventree_db_engine(*args, **kwargs):
|
|
||||||
"""Return the InvenTree database backend e.g. 'postgresql'."""
|
|
||||||
return version.inventreeDatabase() or _('Unknown database')
|
|
||||||
|
|
||||||
|
|
||||||
@register.simple_tag()
|
@register.simple_tag()
|
||||||
def inventree_instance_name(*args, **kwargs):
|
def inventree_instance_name(*args, **kwargs):
|
||||||
"""Return the InstanceName associated with the current database."""
|
"""Return the InstanceName associated with the current database."""
|
||||||
@ -169,29 +104,11 @@ def inventree_title(*args, **kwargs):
|
|||||||
def inventree_logo(**kwargs):
|
def inventree_logo(**kwargs):
|
||||||
"""Return the InvenTree logo, *or* a custom logo if the user has provided one.
|
"""Return the InvenTree logo, *or* a custom logo if the user has provided one.
|
||||||
|
|
||||||
Returns a path to an image file, which can be rendered in the web interface
|
Returns a path to an image file, which can be rendered in the web interface.
|
||||||
"""
|
"""
|
||||||
return InvenTree.helpers.getLogoImage(**kwargs)
|
return InvenTree.helpers.getLogoImage(**kwargs)
|
||||||
|
|
||||||
|
|
||||||
@register.simple_tag()
|
|
||||||
def inventree_splash(**kwargs):
|
|
||||||
"""Return the URL for the InvenTree splash screen, *or* a custom screen if the user has provided one."""
|
|
||||||
return InvenTree.helpers.getSplashScreen(**kwargs)
|
|
||||||
|
|
||||||
|
|
||||||
@register.simple_tag()
|
|
||||||
def inventree_base_url(*args, **kwargs):
|
|
||||||
"""Return the base URL of the InvenTree server."""
|
|
||||||
return InvenTree.helpers_model.get_base_url()
|
|
||||||
|
|
||||||
|
|
||||||
@register.simple_tag()
|
|
||||||
def python_version(*args, **kwargs):
|
|
||||||
"""Return the current python version."""
|
|
||||||
return version.inventreePythonVersion()
|
|
||||||
|
|
||||||
|
|
||||||
@register.simple_tag()
|
@register.simple_tag()
|
||||||
def inventree_version(shortstring=False, *args, **kwargs):
|
def inventree_version(shortstring=False, *args, **kwargs):
|
||||||
"""Return InvenTree version string."""
|
"""Return InvenTree version string."""
|
||||||
@ -200,36 +117,6 @@ def inventree_version(shortstring=False, *args, **kwargs):
|
|||||||
return version.inventreeVersion()
|
return version.inventreeVersion()
|
||||||
|
|
||||||
|
|
||||||
@register.simple_tag()
|
|
||||||
def inventree_is_development(*args, **kwargs):
|
|
||||||
"""Returns True if this is a development version of InvenTree."""
|
|
||||||
return version.isInvenTreeDevelopmentVersion()
|
|
||||||
|
|
||||||
|
|
||||||
@register.simple_tag()
|
|
||||||
def inventree_is_release(*args, **kwargs):
|
|
||||||
"""Returns True if this is a release version of InvenTree."""
|
|
||||||
return not version.isInvenTreeDevelopmentVersion()
|
|
||||||
|
|
||||||
|
|
||||||
@register.simple_tag()
|
|
||||||
def inventree_docs_version(*args, **kwargs):
|
|
||||||
"""Returns the InvenTree documentation version."""
|
|
||||||
return version.inventreeDocsVersion()
|
|
||||||
|
|
||||||
|
|
||||||
@register.simple_tag()
|
|
||||||
def inventree_api_version(*args, **kwargs):
|
|
||||||
"""Return InvenTree API version."""
|
|
||||||
return version.inventreeApiVersion()
|
|
||||||
|
|
||||||
|
|
||||||
@register.simple_tag()
|
|
||||||
def django_version(*args, **kwargs):
|
|
||||||
"""Return Django version string."""
|
|
||||||
return version.inventreeDjangoVersion()
|
|
||||||
|
|
||||||
|
|
||||||
@register.simple_tag()
|
@register.simple_tag()
|
||||||
def inventree_commit_hash(*args, **kwargs):
|
def inventree_commit_hash(*args, **kwargs):
|
||||||
"""Return InvenTree git commit hash string."""
|
"""Return InvenTree git commit hash string."""
|
||||||
@ -242,60 +129,6 @@ def inventree_commit_date(*args, **kwargs):
|
|||||||
return version.inventreeCommitDate()
|
return version.inventreeCommitDate()
|
||||||
|
|
||||||
|
|
||||||
@register.simple_tag()
|
|
||||||
def inventree_installer(*args, **kwargs):
|
|
||||||
"""Return InvenTree package installer string."""
|
|
||||||
return version.inventreeInstaller()
|
|
||||||
|
|
||||||
|
|
||||||
@register.simple_tag()
|
|
||||||
def inventree_branch(*args, **kwargs):
|
|
||||||
"""Return InvenTree git branch string."""
|
|
||||||
return version.inventreeBranch()
|
|
||||||
|
|
||||||
|
|
||||||
@register.simple_tag()
|
|
||||||
def inventree_target(*args, **kwargs):
|
|
||||||
"""Return InvenTree target string."""
|
|
||||||
return version.inventreeTarget()
|
|
||||||
|
|
||||||
|
|
||||||
@register.simple_tag()
|
|
||||||
def inventree_platform(*args, **kwargs):
|
|
||||||
"""Return InvenTree platform string."""
|
|
||||||
return version.inventreePlatform()
|
|
||||||
|
|
||||||
|
|
||||||
@register.simple_tag()
|
|
||||||
def inventree_github_url(*args, **kwargs):
|
|
||||||
"""Return URL for InvenTree github site."""
|
|
||||||
return version.inventreeGithubUrl()
|
|
||||||
|
|
||||||
|
|
||||||
@register.simple_tag()
|
|
||||||
def inventree_docs_url(*args, **kwargs):
|
|
||||||
"""Return URL for InvenTree documentation site."""
|
|
||||||
return version.inventreeDocUrl()
|
|
||||||
|
|
||||||
|
|
||||||
@register.simple_tag()
|
|
||||||
def inventree_app_url(*args, **kwargs):
|
|
||||||
"""Return URL for InvenTree app site."""
|
|
||||||
return version.inventreeAppUrl()
|
|
||||||
|
|
||||||
|
|
||||||
@register.simple_tag()
|
|
||||||
def inventree_credits_url(*args, **kwargs):
|
|
||||||
"""Return URL for InvenTree credits site."""
|
|
||||||
return version.inventreeCreditsUrl()
|
|
||||||
|
|
||||||
|
|
||||||
@register.simple_tag()
|
|
||||||
def default_currency(*args, **kwargs):
|
|
||||||
"""Returns the default currency code."""
|
|
||||||
return currency_code_default()
|
|
||||||
|
|
||||||
|
|
||||||
@register.simple_tag()
|
@register.simple_tag()
|
||||||
def setting_object(key, *args, **kwargs):
|
def setting_object(key, *args, **kwargs):
|
||||||
"""Return a setting object specified by the given key.
|
"""Return a setting object specified by the given key.
|
||||||
@ -346,24 +179,6 @@ def settings_value(key, *args, **kwargs):
|
|||||||
return get_global_setting(key)
|
return get_global_setting(key)
|
||||||
|
|
||||||
|
|
||||||
@register.simple_tag()
|
|
||||||
def user_settings(user, *args, **kwargs):
|
|
||||||
"""Return all USER settings as a key:value dict."""
|
|
||||||
return common.models.InvenTreeUserSetting.allValues(user=user)
|
|
||||||
|
|
||||||
|
|
||||||
@register.simple_tag()
|
|
||||||
def global_settings(*args, **kwargs):
|
|
||||||
"""Return all GLOBAL InvenTree settings as a key:value dict."""
|
|
||||||
return common.models.InvenTreeSetting.allValues()
|
|
||||||
|
|
||||||
|
|
||||||
@register.simple_tag()
|
|
||||||
def visible_global_settings(*args, **kwargs):
|
|
||||||
"""Return any global settings which are not marked as 'hidden'."""
|
|
||||||
return common.models.InvenTreeSetting.allValues(exclude_hidden=True)
|
|
||||||
|
|
||||||
|
|
||||||
@register.filter
|
@register.filter
|
||||||
def keyvalue(dict, key):
|
def keyvalue(dict, key):
|
||||||
"""Access to key of supplied dict.
|
"""Access to key of supplied dict.
|
||||||
@ -374,88 +189,7 @@ def keyvalue(dict, key):
|
|||||||
return dict.get(key)
|
return dict.get(key)
|
||||||
|
|
||||||
|
|
||||||
@register.simple_tag()
|
|
||||||
def authorized_owners(group):
|
|
||||||
"""Return authorized owners."""
|
|
||||||
owners = []
|
|
||||||
|
|
||||||
try:
|
|
||||||
for owner in group.get_related_owners(include_group=True):
|
|
||||||
owners.append(owner.owner)
|
|
||||||
except AttributeError:
|
|
||||||
# group is None
|
|
||||||
pass
|
|
||||||
except TypeError:
|
|
||||||
# group.get_users returns None
|
|
||||||
pass
|
|
||||||
|
|
||||||
return owners
|
|
||||||
|
|
||||||
|
|
||||||
@register.simple_tag()
|
|
||||||
def object_link(url_name, pk, ref):
|
|
||||||
"""Return highlighted link to object."""
|
|
||||||
try:
|
|
||||||
ref_url = reverse(url_name, kwargs={'pk': pk})
|
|
||||||
return mark_safe(f'<b><a href="{ref_url}">{ref}</a></b>')
|
|
||||||
except NoReverseMatch:
|
|
||||||
return None
|
|
||||||
|
|
||||||
|
|
||||||
@register.simple_tag()
|
|
||||||
def mail_configured():
|
|
||||||
"""Return if mail is configured."""
|
|
||||||
return bool(settings.EMAIL_HOST)
|
|
||||||
|
|
||||||
|
|
||||||
@register.simple_tag()
|
@register.simple_tag()
|
||||||
def inventree_customize(reference, *args, **kwargs):
|
def inventree_customize(reference, *args, **kwargs):
|
||||||
"""Return customization values for the user interface."""
|
"""Return customization values for the user interface."""
|
||||||
return djangosettings.CUSTOMIZE.get(reference, '')
|
return djangosettings.CUSTOMIZE.get(reference, '')
|
||||||
|
|
||||||
|
|
||||||
@register.simple_tag()
|
|
||||||
def admin_index(user):
|
|
||||||
"""Return a URL for the admin interface."""
|
|
||||||
if not djangosettings.INVENTREE_ADMIN_ENABLED:
|
|
||||||
return ''
|
|
||||||
|
|
||||||
if not user.is_staff:
|
|
||||||
return ''
|
|
||||||
|
|
||||||
return reverse('admin:index')
|
|
||||||
|
|
||||||
|
|
||||||
@register.simple_tag()
|
|
||||||
def admin_url(user, table, pk):
|
|
||||||
"""Generate a link to the admin site for the given model instance.
|
|
||||||
|
|
||||||
- If the admin site is disabled, an empty URL is returned
|
|
||||||
- If the user is not a staff user, an empty URL is returned
|
|
||||||
- If the user does not have the correct permission, an empty URL is returned
|
|
||||||
"""
|
|
||||||
app, model = table.strip().split('.')
|
|
||||||
|
|
||||||
from django.urls import reverse
|
|
||||||
|
|
||||||
if not djangosettings.INVENTREE_ADMIN_ENABLED:
|
|
||||||
return ''
|
|
||||||
|
|
||||||
if not user.is_staff:
|
|
||||||
return ''
|
|
||||||
|
|
||||||
# Check the user has the correct permission
|
|
||||||
perm_string = f'{app}.change_{model}'
|
|
||||||
if not user.has_perm(perm_string):
|
|
||||||
return ''
|
|
||||||
|
|
||||||
# Fallback URL
|
|
||||||
url = reverse(f'admin:{app}_{model}_changelist')
|
|
||||||
|
|
||||||
if pk:
|
|
||||||
try:
|
|
||||||
url = reverse(f'admin:{app}_{model}_change', args=(pk,))
|
|
||||||
except NoReverseMatch:
|
|
||||||
pass
|
|
||||||
|
|
||||||
return url
|
|
||||||
|
@ -6,17 +6,11 @@ from django.conf import settings
|
|||||||
from django.core.cache import cache
|
from django.core.cache import cache
|
||||||
from django.core.exceptions import ValidationError
|
from django.core.exceptions import ValidationError
|
||||||
from django.test import TestCase
|
from django.test import TestCase
|
||||||
from django.test.utils import override_settings
|
|
||||||
|
|
||||||
from allauth.account.models import EmailAddress
|
from allauth.account.models import EmailAddress
|
||||||
|
|
||||||
import part.settings
|
import part.settings
|
||||||
from common.models import (
|
from common.models import NotificationEntry, NotificationMessage
|
||||||
InvenTreeSetting,
|
|
||||||
InvenTreeUserSetting,
|
|
||||||
NotificationEntry,
|
|
||||||
NotificationMessage,
|
|
||||||
)
|
|
||||||
from common.notifications import UIMessageNotification, storage
|
from common.notifications import UIMessageNotification, storage
|
||||||
from common.settings import get_global_setting, set_global_setting
|
from common.settings import get_global_setting, set_global_setting
|
||||||
from InvenTree import version
|
from InvenTree import version
|
||||||
@ -53,34 +47,26 @@ class TemplateTagTest(InvenTreeTestCase):
|
|||||||
"""Test that the 'add."""
|
"""Test that the 'add."""
|
||||||
self.assertEqual(int(inventree_extras.add(3, 5)), 8)
|
self.assertEqual(int(inventree_extras.add(3, 5)), 8)
|
||||||
|
|
||||||
def test_plugins_enabled(self):
|
|
||||||
"""Test the plugins_enabled tag."""
|
|
||||||
self.assertEqual(inventree_extras.plugins_enabled(), True)
|
|
||||||
|
|
||||||
def test_plugins_install_disabled(self):
|
|
||||||
"""Test the plugins_install_disabled tag."""
|
|
||||||
self.assertEqual(inventree_extras.plugins_install_disabled(), False)
|
|
||||||
|
|
||||||
def test_inventree_instance_name(self):
|
def test_inventree_instance_name(self):
|
||||||
"""Test the 'instance name' setting."""
|
"""Test the 'instance name' setting."""
|
||||||
self.assertEqual(inventree_extras.inventree_instance_name(), 'InvenTree')
|
self.assertEqual(inventree_extras.inventree_instance_name(), 'InvenTree')
|
||||||
|
|
||||||
@override_settings(SITE_URL=None)
|
def test_inventree_title(self):
|
||||||
def test_inventree_base_url(self):
|
"""Test the 'inventree_title' setting."""
|
||||||
"""Test that the base URL tag returns correctly."""
|
self.assertEqual(inventree_extras.inventree_title(), 'InvenTree')
|
||||||
self.assertEqual(inventree_extras.inventree_base_url(), '')
|
|
||||||
|
|
||||||
def test_inventree_is_release(self):
|
def test_inventree_customize(self):
|
||||||
"""Test that the release version check functions as expected."""
|
"""Test the 'inventree_customize' template tag."""
|
||||||
|
self.assertEqual(inventree_extras.inventree_customize('abc'), '')
|
||||||
|
|
||||||
|
def test_inventree_version(self):
|
||||||
|
"""Test the 'version' setting."""
|
||||||
self.assertEqual(
|
self.assertEqual(
|
||||||
inventree_extras.inventree_is_release(),
|
inventree_extras.inventree_version(), version.inventreeVersion()
|
||||||
not version.isInvenTreeDevelopmentVersion(),
|
|
||||||
)
|
)
|
||||||
|
self.assertNotEqual(
|
||||||
def test_inventree_docs_version(self):
|
inventree_extras.inventree_version(shortstring=True),
|
||||||
"""Test that the documentation version template tag returns correctly."""
|
version.inventreeVersion(),
|
||||||
self.assertEqual(
|
|
||||||
inventree_extras.inventree_docs_version(), version.inventreeDocsVersion()
|
|
||||||
)
|
)
|
||||||
|
|
||||||
def test_hash(self):
|
def test_hash(self):
|
||||||
@ -103,48 +89,63 @@ class TemplateTagTest(InvenTreeTestCase):
|
|||||||
else:
|
else:
|
||||||
self.assertEqual(len(d.split('-')), 3)
|
self.assertEqual(len(d.split('-')), 3)
|
||||||
|
|
||||||
def test_github(self):
|
|
||||||
"""Test that the github URL template tag returns correctly."""
|
|
||||||
self.assertIn('github.com', inventree_extras.inventree_github_url())
|
|
||||||
|
|
||||||
def test_docs(self):
|
|
||||||
"""Test that the documentation URL template tag returns correctly."""
|
|
||||||
self.assertIn('docs.inventree.org', inventree_extras.inventree_docs_url())
|
|
||||||
|
|
||||||
def test_keyvalue(self):
|
def test_keyvalue(self):
|
||||||
"""Test keyvalue template tag."""
|
"""Test keyvalue template tag."""
|
||||||
self.assertEqual(inventree_extras.keyvalue({'a': 'a'}, 'a'), 'a')
|
self.assertEqual(inventree_extras.keyvalue({'a': 'a'}, 'a'), 'a')
|
||||||
|
|
||||||
def test_mail_configured(self):
|
def test_to_list(self):
|
||||||
"""Test that mail configuration returns False."""
|
"""Test the 'to_list' template tag."""
|
||||||
self.assertEqual(inventree_extras.mail_configured(), False)
|
self.assertEqual(inventree_extras.to_list(1, 2, 3), (1, 2, 3))
|
||||||
|
|
||||||
def test_user_settings(self):
|
def test_render_date(self):
|
||||||
"""Test user settings."""
|
"""Test the 'render_date' template tag."""
|
||||||
result = inventree_extras.user_settings(self.user)
|
self.assertEqual(inventree_extras.render_date('2021-01-01'), '2021-01-01')
|
||||||
self.assertEqual(len(result), len(InvenTreeUserSetting.SETTINGS))
|
|
||||||
|
|
||||||
def test_global_settings(self):
|
self.assertEqual(inventree_extras.render_date(None), None)
|
||||||
"""Test global settings."""
|
self.assertEqual(inventree_extras.render_date(' '), None)
|
||||||
result = inventree_extras.global_settings()
|
self.assertEqual(inventree_extras.render_date('aaaa'), None)
|
||||||
self.assertEqual(len(result), len(InvenTreeSetting.SETTINGS))
|
self.assertEqual(inventree_extras.render_date(1234), 1234)
|
||||||
|
|
||||||
def test_visible_global_settings(self):
|
def test_setting_object(self):
|
||||||
"""Test that hidden global settings are actually hidden."""
|
"""Test the 'setting_object' template tag."""
|
||||||
result = inventree_extras.visible_global_settings()
|
# Normal
|
||||||
|
self.assertEqual(
|
||||||
|
inventree_extras.setting_object('PART_ALLOW_DUPLICATE_IPN').value, True
|
||||||
|
)
|
||||||
|
|
||||||
n = len(result)
|
# User
|
||||||
|
self.assertEqual(
|
||||||
|
inventree_extras.setting_object(
|
||||||
|
'PART_ALLOW_DUPLICATE_IPN', user=self.user
|
||||||
|
).value,
|
||||||
|
'',
|
||||||
|
)
|
||||||
|
|
||||||
n_hidden = 0
|
# Method
|
||||||
n_visible = 0
|
self.assertEqual(
|
||||||
|
inventree_extras.setting_object(
|
||||||
|
'PART_ALLOW_DUPLICATE_IPN', method='abc', user=self.user
|
||||||
|
).value,
|
||||||
|
'',
|
||||||
|
)
|
||||||
|
|
||||||
for val in InvenTreeSetting.SETTINGS.values():
|
def test_settings_value(self):
|
||||||
if val.get('hidden', False):
|
"""Test the 'settings_value' template tag."""
|
||||||
n_hidden += 1
|
# Normal
|
||||||
else:
|
self.assertEqual(
|
||||||
n_visible += 1
|
inventree_extras.settings_value('PART_ALLOW_DUPLICATE_IPN'), True
|
||||||
|
)
|
||||||
|
|
||||||
self.assertEqual(n, n_visible)
|
# User
|
||||||
|
self.assertEqual(
|
||||||
|
inventree_extras.settings_value('PART_ALLOW_DUPLICATE_IPN', user=self.user),
|
||||||
|
'',
|
||||||
|
)
|
||||||
|
self.logout()
|
||||||
|
self.assertEqual(
|
||||||
|
inventree_extras.settings_value('PART_ALLOW_DUPLICATE_IPN', user=self.user),
|
||||||
|
'',
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
class PartTest(TestCase):
|
class PartTest(TestCase):
|
||||||
|
@ -11,7 +11,7 @@
|
|||||||
{% trans 'Site is in Maintenance' %}
|
{% trans 'Site is in Maintenance' %}
|
||||||
{% endblock page_title %}
|
{% endblock page_title %}
|
||||||
|
|
||||||
{% block body_class %}login-screen' style='background: url({% inventree_splash %}); background-size: cover;{% endblock body_class %}
|
{% block body_class %}login-screen{% endblock body_class %}
|
||||||
|
|
||||||
{% block body %}
|
{% block body %}
|
||||||
|
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
{% load inventree_extras %}
|
{% load inventree_extras %}
|
||||||
|
|
||||||
{% block body %}
|
{% block body %}
|
||||||
<body class='login-screen' style='background: url({% inventree_splash %}); background-size: cover;'>
|
<body class='login-screen'>
|
||||||
<div class='container-fluid'>
|
<div class='container-fluid'>
|
||||||
<div class='notification-area' id='alerts'>
|
<div class='notification-area' id='alerts'>
|
||||||
<!-- Div for displayed alerts -->
|
<!-- Div for displayed alerts -->
|
||||||
|
Loading…
x
Reference in New Issue
Block a user