From 851683a4566950700ed765efb366a60bf2920cd5 Mon Sep 17 00:00:00 2001 From: Oliver Date: Wed, 27 Jul 2022 17:44:14 +1000 Subject: [PATCH] Fixes bug introduced by moving to pathlib (#3419) * Fix typo * Fix bug which prevented rendering of settings page if neither user-agent or user-device was available * Add unit testing for settings page --- InvenTree/InvenTree/test_views.py | 78 +++++++++++++++++++ InvenTree/InvenTree/views.py | 3 +- .../templates/InvenTree/settings/user.html | 4 + 3 files changed, 84 insertions(+), 1 deletion(-) diff --git a/InvenTree/InvenTree/test_views.py b/InvenTree/InvenTree/test_views.py index 43e9e7782d..79c029941d 100644 --- a/InvenTree/InvenTree/test_views.py +++ b/InvenTree/InvenTree/test_views.py @@ -2,6 +2,7 @@ import os +from django.contrib.auth import get_user_model from django.urls import reverse from InvenTree.helpers import InvenTreeTestCase @@ -41,3 +42,80 @@ class ViewTests(InvenTreeTestCase): self.assertIn("
", content) # TODO: In future, run the javascript and ensure that the panels get created! + + def test_settings_page(self): + """Test that the 'settings' page loads correctly""" + + # Settings page loads + url = reverse('settings') + + # Attempt without login + self.client.logout() + response = self.client.get(url) + self.assertEqual(response.status_code, 302) + + # Login with default client + self.client.login(username=self.username, password=self.password) + + response = self.client.get(url) + self.assertEqual(response.status_code, 200) + content = response.content.decode() + + user_panels = [ + 'account', + 'user-display', + 'user-home', + 'user-reports', + ] + + staff_panels = [ + 'server', + 'login', + 'barcodes', + 'currencies', + 'parts', + 'stock', + ] + + plugin_panels = [ + 'plugin', + ] + + # Default user has staff access, so all panels will be present + for panel in user_panels + staff_panels + plugin_panels: + self.assertIn(f"select-{panel}", content) + self.assertIn(f"panel-{panel}", content) + + # Now create a user who does not have staff access + pleb_user = get_user_model().objects.create_user( + username='pleb', + password='notstaff', + ) + + pleb_user.groups.add(self.group) + pleb_user.is_superuser = False + pleb_user.is_staff = False + pleb_user.save() + + self.client.logout() + + result = self.client.login( + username='pleb', + password='notstaff', + ) + + self.assertTrue(result) + + response = self.client.get(url) + self.assertEqual(response.status_code, 200) + content = response.content.decode() + + # Normal user still has access to user-specific panels + for panel in user_panels: + self.assertIn(f"select-{panel}", content) + self.assertIn(f"panel-{panel}", content) + + # Normal user does NOT have access to global or plugin settings + for panel in staff_panels + plugin_panels: + self.assertNotIn(f"select-{panel}", content) + self.assertNotIn(f"panel-{panel}", content) diff --git a/InvenTree/InvenTree/views.py b/InvenTree/InvenTree/views.py index b7832c902c..6c2b0e8779 100644 --- a/InvenTree/InvenTree/views.py +++ b/InvenTree/InvenTree/views.py @@ -637,7 +637,8 @@ class SettingsView(TemplateView): ctx["rates_updated"] = None # load locale stats - STAT_FILE = settings.BASE_DIR.joinpath('InvenTree/locale_stats.json').abolute() + STAT_FILE = settings.BASE_DIR.joinpath('InvenTree/locale_stats.json').absolute() + try: ctx["locale_stats"] = json.load(open(STAT_FILE, 'r')) except Exception: diff --git a/InvenTree/templates/InvenTree/settings/user.html b/InvenTree/templates/InvenTree/settings/user.html index 948c84bcac..07d0dc77f1 100644 --- a/InvenTree/templates/InvenTree/settings/user.html +++ b/InvenTree/templates/InvenTree/settings/user.html @@ -248,7 +248,11 @@ {% for object in session_list %} {{ object.ip }} + {% if object.user_agent or object.device %} {{ object.user_agent|device|default_if_none:unknown_on_unknown|safe }} + {% else %} + {{ unknown_on_unknown }} + {% endif %} {% if object.session_key == session_key %} {% blocktrans with time=object.last_activity|timesince %}{{ time }} ago (this session){% endblocktrans %}