Extend members app: add user signals for automatic Member profile creation, tests for Member behavior, and updated authentication backends
This commit is contained in:
@@ -130,6 +130,11 @@ STATICFILES_DIRS = [BASE_DIR / "static"]
|
|||||||
MEDIA_URL = "media/"
|
MEDIA_URL = "media/"
|
||||||
MEDIA_ROOT = BASE_DIR / "media"
|
MEDIA_ROOT = BASE_DIR / "media"
|
||||||
|
|
||||||
|
AUTHENTICATION_BACKENDS = [
|
||||||
|
"rules.permissions.ObjectPermissionBackend",
|
||||||
|
"django.contrib.auth.backends.ModelBackend",
|
||||||
|
]
|
||||||
|
|
||||||
CONSTANCE_BACKEND = "constance.backends.database.DatabaseBackend"
|
CONSTANCE_BACKEND = "constance.backends.database.DatabaseBackend"
|
||||||
CONSTANCE_CONFIG = {
|
CONSTANCE_CONFIG = {
|
||||||
"TF_CLUB_NAME": (config("TF_CLUB_NAME", default="TeamForge", cast=str), "Club Name", str),
|
"TF_CLUB_NAME": (config("TF_CLUB_NAME", default="TeamForge", cast=str), "Club Name", str),
|
||||||
|
|||||||
@@ -3,3 +3,7 @@ from django.apps import AppConfig
|
|||||||
|
|
||||||
class MembersConfig(AppConfig):
|
class MembersConfig(AppConfig):
|
||||||
name = "members"
|
name = "members"
|
||||||
|
|
||||||
|
def ready(self):
|
||||||
|
# noinspection PyUnusedImports
|
||||||
|
import members.signals
|
||||||
|
|||||||
19
members/signals.py
Normal file
19
members/signals.py
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
import secrets
|
||||||
|
|
||||||
|
from django.contrib.auth import get_user_model
|
||||||
|
from django.db.models.signals import post_save
|
||||||
|
from django.dispatch import receiver
|
||||||
|
|
||||||
|
from .models import Member
|
||||||
|
|
||||||
|
User = get_user_model()
|
||||||
|
|
||||||
|
|
||||||
|
@receiver(post_save, sender=User)
|
||||||
|
def create_member_profile(instance, *args, **kwargs) -> None:
|
||||||
|
"""Creates a Member profile for a newly created user."""
|
||||||
|
member, created = Member.objects.get_or_create(user=instance)
|
||||||
|
|
||||||
|
if not member.access_token:
|
||||||
|
member.access_token = secrets.token_urlsafe(64)
|
||||||
|
member.save(update_fields=["access_token"])
|
||||||
@@ -1,3 +1,30 @@
|
|||||||
|
from django.contrib.auth import get_user_model
|
||||||
|
from django.contrib.auth.models import Permission
|
||||||
from django.test import TestCase
|
from django.test import TestCase
|
||||||
|
|
||||||
# Create your tests here.
|
User = get_user_model()
|
||||||
|
|
||||||
|
|
||||||
|
class MembersTestCase(TestCase):
|
||||||
|
def setUp(self):
|
||||||
|
self.user_a = User.objects.create(username="user_a", first_name="User", last_name="A", email="user_a@test.com")
|
||||||
|
|
||||||
|
def testMemberName(self):
|
||||||
|
self.assertEqual(str(self.user_a.member), "User A")
|
||||||
|
|
||||||
|
def testMemberCreation(self):
|
||||||
|
self.assertTrue(hasattr(self.user_a, "member"))
|
||||||
|
|
||||||
|
def testMemberManager(self):
|
||||||
|
self.assertFalse(self.user_a.has_perm("members.member_manager"))
|
||||||
|
self.assertFalse(self.user_a.has_perm("members.add_member"))
|
||||||
|
self.assertFalse(self.user_a.is_superuser)
|
||||||
|
|
||||||
|
member_manager_permission = Permission.objects.get(codename="member_manager")
|
||||||
|
|
||||||
|
self.user_a.user_permissions.add(member_manager_permission)
|
||||||
|
self.user_a = User.objects.get(pk=self.user_a.pk)
|
||||||
|
|
||||||
|
self.assertTrue(self.user_a.has_perm("members.member_manager"))
|
||||||
|
self.assertTrue(self.user_a.has_perm("members.add_member"))
|
||||||
|
self.assertFalse(self.user_a.is_superuser)
|
||||||
|
|||||||
@@ -1,3 +0,0 @@
|
|||||||
from django.shortcuts import render
|
|
||||||
|
|
||||||
# Create your views here.
|
|
||||||
Reference in New Issue
Block a user