diff --git a/InvenTree/web/tests.py b/InvenTree/web/tests.py
new file mode 100644
index 0000000000..7822781f80
--- /dev/null
+++ b/InvenTree/web/tests.py
@@ -0,0 +1,68 @@
+"""Tests for PUI backend stuff."""
+import json
+import os
+from pathlib import Path
+from unittest import mock
+
+from InvenTree.config import get_frontend_settings
+from InvenTree.unit_test import InvenTreeTestCase
+
+from .templatetags import spa_helper
+
+
+class TemplateTagTest(InvenTreeTestCase):
+ """Tests for the template tag code."""
+
+ def assertSettings(self, settings_data):
+ """Helper to test if needed args are in the settings."""
+ self.assertTrue('debug' in settings_data)
+ self.assertTrue('server_list' in settings_data)
+ self.assertTrue('show_server_selector' in settings_data)
+ self.assertTrue('environment' in settings_data)
+
+ def test_spa_bundle(self):
+ """Test the 'spa_bundle' template tag"""
+ resp = spa_helper.spa_bundle()
+ self.assertTrue(resp.startswith('window.INVENTREE_SETTINGS='))
+ settings_data_string = resp.replace('', '')
+ settings_data = json.loads(settings_data_string)
+ self.assertSettings(settings_data)
+
+ def test_get_frontend_settings(self):
+ """Test frontend settings retrieval."""
+ # Normal run for priming
+ rsp = get_frontend_settings()
+ self.assertSettings(rsp)
+
+ # No base_url
+ envs = {'INVENTREE_PUI_URL_BASE': ''}
+ with mock.patch.dict(os.environ, envs):
+ rsp = get_frontend_settings()
+ self.assertSettings(rsp)
+
+ # No debug, no serverlist -> selector
+ rsp = get_frontend_settings(False)
+ self.assertSettings(rsp)
+ self.assertTrue(rsp['show_server_selector'])
+
+ # No debug, serverlist -> no selector
+ envs = {'INVENTREE_PUI_SETTINGS': json.dumps({'server_list': ['aa', 'bb',]})}
+ with mock.patch.dict(os.environ, envs):
+ rsp = get_frontend_settings(False)
+ self.assertFalse('show_server_selector' in rsp)
+ self.assertEqual(rsp['server_list'], ['aa', 'bb',])