Dynavera/apps/orgs/tests/test_models.py

76 lines
3.4 KiB
Python
Raw Normal View History

from django.test import TestCase
from django.utils import timezone
from django.contrib.auth import get_user_model
from datetime import timedelta
from apps.orgs.models import Organization, OrganizationMembership, OrganizationInvitation, Role, RoleMembership
User = get_user_model()
class OrganizationModelTests(TestCase):
def setUp(self):
self.user = User.objects.create_user(email_address='u@example.com', password='pass', is_manager=True)
def test_create_organization_and_membership(self):
org = Organization.objects.create(name='Acme', owner=self.user)
self.assertEqual(org.owner, self.user)
self.assertEqual(org.name, 'Acme')
self.assertEqual(org.members.count(), 0)
m = OrganizationMembership.objects.create(organization=org, user=self.user)
self.assertIn(self.user, org.members.all())
def test_invitation_defaults_and_validation(self):
org = Organization.objects.create(name='InvOrg', owner=self.user)
invite = OrganizationInvitation.objects.create(organization=org, created_by=self.user)
self.assertIsNotNone(invite.expires_at)
self.assertTrue(invite.is_valid())
invite.uses += 1
invite.save()
self.assertFalse(invite.is_valid())
invite.uses = 0
invite.expires_at = timezone.now() - timedelta(days=1)
invite.save()
self.assertFalse(invite.is_valid())
def test_role_and_role_membership(self):
org = Organization.objects.create(name='RoleOrg', owner=self.user)
role = Role.objects.create(name='Admin', organization=org)
rm = RoleMembership.objects.create(role=role, user=self.user)
self.assertIn(role, org.roles.all())
self.assertIn(self.user, role.members.all())
def test_unique_organization_name(self):
Organization.objects.create(name='UniqueOrg', owner=self.user)
with self.assertRaises(Exception):
Organization.objects.create(name='UniqueOrg', owner=self.user)
def test_membership_unique_together(self):
org = Organization.objects.create(name='UTOrg', owner=self.user)
OrganizationMembership.objects.create(organization=org, user=self.user)
with self.assertRaises(Exception):
OrganizationMembership.objects.create(organization=org, user=self.user)
def test_invite_default_expiry_is_seven_days(self):
org = Organization.objects.create(name='ExpiryOrg', owner=self.user)
invite = OrganizationInvitation.objects.create(organization=org, created_by=self.user)
delta = invite.expires_at - invite.created_at
self.assertTrue(6 <= delta.days <= 8)
def test_invite_str_contains_org_name(self):
org = Organization.objects.create(name='StrOrg', owner=self.user)
invite = OrganizationInvitation.objects.create(organization=org, created_by=self.user)
self.assertIn('StrOrg', str(invite))
def test_role_uuid_and_unique(self):
org = Organization.objects.create(name='RoleUuidOrg', owner=self.user)
r1 = Role.objects.create(name='R1', organization=org)
r2 = Role.objects.create(name='R2', organization=org)
self.assertNotEqual(r1.uuid, r2.uuid)
def test_str_methods(self):
org = Organization.objects.create(name='StrTestOrg', owner=self.user)
m = OrganizationMembership.objects.create(organization=org, user=self.user)
self.assertIn(org.name, str(m))