Skip to content

Commit 851683a

Browse files
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
1 parent ab654c3 commit 851683a

File tree

3 files changed

+84
-1
lines changed

3 files changed

+84
-1
lines changed

InvenTree/InvenTree/test_views.py

Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import os
44

5+
from django.contrib.auth import get_user_model
56
from django.urls import reverse
67

78
from InvenTree.helpers import InvenTreeTestCase
@@ -41,3 +42,80 @@ def test_panels(self):
4142
self.assertIn("<div id='detail-panels'>", content)
4243

4344
# TODO: In future, run the javascript and ensure that the panels get created!
45+
46+
def test_settings_page(self):
47+
"""Test that the 'settings' page loads correctly"""
48+
49+
# Settings page loads
50+
url = reverse('settings')
51+
52+
# Attempt without login
53+
self.client.logout()
54+
response = self.client.get(url)
55+
self.assertEqual(response.status_code, 302)
56+
57+
# Login with default client
58+
self.client.login(username=self.username, password=self.password)
59+
60+
response = self.client.get(url)
61+
self.assertEqual(response.status_code, 200)
62+
content = response.content.decode()
63+
64+
user_panels = [
65+
'account',
66+
'user-display',
67+
'user-home',
68+
'user-reports',
69+
]
70+
71+
staff_panels = [
72+
'server',
73+
'login',
74+
'barcodes',
75+
'currencies',
76+
'parts',
77+
'stock',
78+
]
79+
80+
plugin_panels = [
81+
'plugin',
82+
]
83+
84+
# Default user has staff access, so all panels will be present
85+
for panel in user_panels + staff_panels + plugin_panels:
86+
self.assertIn(f"select-{panel}", content)
87+
self.assertIn(f"panel-{panel}", content)
88+
89+
# Now create a user who does not have staff access
90+
pleb_user = get_user_model().objects.create_user(
91+
username='pleb',
92+
password='notstaff',
93+
)
94+
95+
pleb_user.groups.add(self.group)
96+
pleb_user.is_superuser = False
97+
pleb_user.is_staff = False
98+
pleb_user.save()
99+
100+
self.client.logout()
101+
102+
result = self.client.login(
103+
username='pleb',
104+
password='notstaff',
105+
)
106+
107+
self.assertTrue(result)
108+
109+
response = self.client.get(url)
110+
self.assertEqual(response.status_code, 200)
111+
content = response.content.decode()
112+
113+
# Normal user still has access to user-specific panels
114+
for panel in user_panels:
115+
self.assertIn(f"select-{panel}", content)
116+
self.assertIn(f"panel-{panel}", content)
117+
118+
# Normal user does NOT have access to global or plugin settings
119+
for panel in staff_panels + plugin_panels:
120+
self.assertNotIn(f"select-{panel}", content)
121+
self.assertNotIn(f"panel-{panel}", content)

InvenTree/InvenTree/views.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -637,7 +637,8 @@ def get_context_data(self, **kwargs):
637637
ctx["rates_updated"] = None
638638

639639
# load locale stats
640-
STAT_FILE = settings.BASE_DIR.joinpath('InvenTree/locale_stats.json').abolute()
640+
STAT_FILE = settings.BASE_DIR.joinpath('InvenTree/locale_stats.json').absolute()
641+
641642
try:
642643
ctx["locale_stats"] = json.load(open(STAT_FILE, 'r'))
643644
except Exception:

InvenTree/templates/InvenTree/settings/user.html

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -248,7 +248,11 @@ <h4>{% trans "Active Sessions" %}</h4>
248248
{% for object in session_list %}
249249
<tr {% if object.session_key == session_key %}class="active"{% endif %}>
250250
<td>{{ object.ip }}</td>
251+
{% if object.user_agent or object.device %}
251252
<td>{{ object.user_agent|device|default_if_none:unknown_on_unknown|safe }}</td>
253+
{% else %}
254+
<td>{{ unknown_on_unknown }}</td>
255+
{% endif %}
252256
<td>
253257
{% if object.session_key == session_key %}
254258
{% blocktrans with time=object.last_activity|timesince %}{{ time }} ago (this session){% endblocktrans %}

0 commit comments

Comments
 (0)