diff --git a/babybuddy/forms.py b/babybuddy/forms.py
index 14d4495b..ceec15ae 100644
--- a/babybuddy/forms.py
+++ b/babybuddy/forms.py
@@ -9,7 +9,7 @@ from .models import Settings
class BabyBuddyUserForm(forms.ModelForm):
- is_readonly = forms.BooleanField(
+ is_read_only = forms.BooleanField(
required=False,
label=_("Read only"),
help_text=_("Restricts user to viewing data only."),
@@ -23,7 +23,7 @@ class BabyBuddyUserForm(forms.ModelForm):
"last_name",
"email",
"is_staff",
- "is_readonly",
+ "is_read_only",
"is_active",
]
@@ -31,21 +31,21 @@ class BabyBuddyUserForm(forms.ModelForm):
user = kwargs["instance"]
if user:
kwargs["initial"].update(
- {"is_readonly": user.groups.filter(name="read_only").exists()}
+ {"is_read_only": user.groups.filter(name="read_only").exists()}
)
super(BabyBuddyUserForm, self).__init__(*args, **kwargs)
def save(self, commit=True):
user = super(BabyBuddyUserForm, self).save(commit=False)
- is_readonly = self.cleaned_data["is_readonly"]
- if is_readonly:
+ is_read_only = self.cleaned_data["is_read_only"]
+ if is_read_only:
user.is_superuser = False
else:
user.is_superuser = True
if commit:
user.save()
readonly_group = Group.objects.get(name="read_only")
- if is_readonly:
+ if is_read_only:
user.groups.add(readonly_group.id)
else:
user.groups.remove(readonly_group.id)
diff --git a/babybuddy/templates/babybuddy/user_list.html b/babybuddy/templates/babybuddy/user_list.html
index 076fed0f..39e56abc 100644
--- a/babybuddy/templates/babybuddy/user_list.html
+++ b/babybuddy/templates/babybuddy/user_list.html
@@ -31,8 +31,8 @@
{{ object.first_name }} |
{{ object.last_name }} |
{{ object.email }} |
- {% user_is_read_only object as is_readonly %}
- {{ is_readonly|bool_icon }} |
+ {% user_is_read_only object as is_read_only %}
+ {{ is_read_only|bool_icon }} |
{{ object.is_staff|bool_icon }} |
{{ object.is_active|bool_icon }} |
diff --git a/babybuddy/tests/tests_commands.py b/babybuddy/tests/tests_commands.py
index fac66af6..fec1ec5e 100644
--- a/babybuddy/tests/tests_commands.py
+++ b/babybuddy/tests/tests_commands.py
@@ -30,32 +30,40 @@ class CommandsTestCase(TransactionTestCase):
def test_createuser(self):
call_command(
"createuser",
- username="test",
- email="test@test.test",
+ username="regularuser",
+ email="regularuser@test.test",
password="test",
verbosity=0,
)
- self.assertIsInstance(
- get_user_model().objects.get(username="test"), get_user_model()
- )
- self.assertFalse(
- get_user_model().objects.filter(
- username="test", is_staff=True, is_superuser=True
- )
- )
+ user = get_user_model().objects.get(username="regularuser")
+ self.assertIsInstance(user, get_user_model())
+ self.assertTrue(user.is_superuser)
+ self.assertFalse(user.is_staff)
+ self.assertEqual(user.email, "regularuser@test.test")
+
call_command(
"createuser",
"--is-staff",
- username="testadmin",
- email="testadmin@testadmin.testadmin",
+ username="staffuser",
+ email="staffuser@test.test",
password="test",
verbosity=0,
)
- self.assertIsInstance(
- get_user_model().objects.get(username="testadmin"), get_user_model()
- )
- self.assertTrue(
- get_user_model().objects.filter(
- username="testadmin", is_staff=True, is_superuser=True
- )
+ user = get_user_model().objects.get(username="staffuser")
+ self.assertIsInstance(user, get_user_model())
+ self.assertTrue(user.is_superuser)
+ self.assertTrue(user.is_staff)
+
+ call_command(
+ "createuser",
+ "--read-only",
+ username="readonlyuser",
+ email="readonlyuser@test.test",
+ password="test",
+ verbosity=0,
)
+ user = get_user_model().objects.get(username="readonlyuser")
+ self.assertIsInstance(user, get_user_model())
+ self.assertFalse(user.is_superuser)
+ self.assertFalse(user.is_staff)
+ self.assertTrue(user.groups.filter(name="read_only").exists())
diff --git a/babybuddy/tests/tests_forms.py b/babybuddy/tests/tests_forms.py
index e87e8c65..91aeeb19 100644
--- a/babybuddy/tests/tests_forms.py
+++ b/babybuddy/tests/tests_forms.py
@@ -28,6 +28,17 @@ class FormsTestCase(TestCase):
is_superuser=True, **cls.credentials
)
+ cls.user_template = {
+ "username": "username",
+ "first_name": "User",
+ "last_name": "Name",
+ "email": "user@user.user",
+ "is_staff": False,
+ "is_read_only": False,
+ "password1": "d47o8dDhu3ulu3",
+ "password2": "d47o8dDhu3ulu3",
+ }
+
cls.settings_template = {
"first_name": "User",
"last_name": "Name",
@@ -74,15 +85,7 @@ class FormsTestCase(TestCase):
self.user.is_staff = True
self.user.save()
self.c.login(**self.credentials)
-
- params = {
- "username": "username",
- "first_name": "User",
- "last_name": "Name",
- "email": "user@user.user",
- "password1": "d47o8dDhu3ulu3",
- "password2": "d47o8dDhu3ulu3",
- }
+ params = self.user_template.copy()
page = self.c.post("/users/add/", params)
self.assertEqual(page.status_code, 302)
@@ -101,6 +104,53 @@ class FormsTestCase(TestCase):
get_user_model().objects.filter(username="username"), []
)
+ def test_add_regular_user(self):
+ self.user.is_staff = True
+ self.user.save()
+ self.c.login(**self.credentials)
+
+ params = self.user_template.copy()
+
+ page = self.c.post("/users/add/", params)
+ self.assertEqual(page.status_code, 302)
+ user = get_user_model().objects.get(username="username")
+ self.assertIsInstance(user, get_user_model())
+ self.assertTrue(user.is_superuser)
+ self.assertFalse(user.is_staff)
+ self.assertFalse(user.groups.filter(name="read_only").exists())
+
+ def test_add_staff_user(self):
+ self.user.is_staff = True
+ self.user.save()
+ self.c.login(**self.credentials)
+
+ params = self.user_template.copy()
+ params["is_staff"] = True
+
+ page = self.c.post("/users/add/", params)
+ self.assertEqual(page.status_code, 302)
+ user = get_user_model().objects.get(username="username")
+ self.assertIsInstance(user, get_user_model())
+ self.assertTrue(user.is_superuser)
+ self.assertTrue(user.is_staff)
+ self.assertFalse(user.groups.filter(name="read_only").exists())
+
+ def test_add_read_only_user(self):
+ self.user.is_staff = True
+ self.user.save()
+ self.c.login(**self.credentials)
+
+ params = self.user_template.copy()
+ params["is_read_only"] = True
+
+ page = self.c.post("/users/add/", params)
+ self.assertEqual(page.status_code, 302)
+ user = get_user_model().objects.get(username="username")
+ self.assertIsInstance(user, get_user_model())
+ self.assertFalse(user.is_superuser)
+ self.assertFalse(user.is_staff)
+ self.assertTrue(user.groups.filter(name="read_only").exists())
+
def test_user_settings(self):
self.c.login(**self.credentials)
diff --git a/babybuddy/tests/tests_templatetags.py b/babybuddy/tests/tests_templatetags.py
index 46a84fe4..cfb6eb4e 100644
--- a/babybuddy/tests/tests_templatetags.py
+++ b/babybuddy/tests/tests_templatetags.py
@@ -1,4 +1,6 @@
# -*- coding: utf-8 -*-
+from django.contrib.auth import get_user_model
+from django.contrib.auth.models import Group
from django.test import TestCase
from django.utils import timezone
@@ -17,3 +19,13 @@ class TemplateTagsTestCase(TestCase):
first_name="Test", last_name="Child 2", birth_date=timezone.localdate()
)
self.assertEqual(babybuddy_tags.get_child_count(), 2)
+
+ def user_is_read_only(self):
+ user = get_user_model().objects.create_user(
+ username="readonly", password="readonly", is_superuser=False, is_staf=False
+ )
+ self.assertFalse(babybuddy_tags.user_is_read_only(user))
+
+ group = Group.objects.get(name="read_only")
+ user.groups.add(group)
+ self.assertTrue(babybuddy_tags.user_is_read_only(user))
|