Coverage for modules\team\tests.py: 100%
30 statements
« prev ^ index » next coverage.py v7.16.0, created at 2026-09-06 17:00 +0800
« prev ^ index » next coverage.py v7.16.0, created at 2026-09-06 17:00 +0800
1import pytest
2from django.utils import timezone
3from modules.authentication.models import Organization, User
4from modules.team.models import AttendanceLog, TeamMember
5from modules.team.schemas import LocalUserIn
6from modules.team.services import TeamService
9@pytest.mark.django_db
10class TestAttendanceLog:
11 def setup_method(self):
12 self.org = Organization.objects.create(name='Test Org', slug='test-org')
13 self.user = User.objects.create_user(
14 email='employee@test.local',
15 password='StrongPass123!',
16 first_name='Ada',
17 last_name='Lovelace',
18 )
20 def test_clock_in_and_clock_out_flow(self):
21 start = timezone.now()
22 attendance = AttendanceLog.objects.create(
23 tenant_id=self.org.id,
24 user=self.user,
25 check_in=start,
26 status='CLOCKED_IN',
27 )
29 assert attendance.check_out is None
30 assert attendance.status == 'CLOCKED_IN'
32 attendance.check_out = timezone.now()
33 attendance.status = 'CLOCKED_OUT'
34 attendance.save()
36 assert attendance.status == 'CLOCKED_OUT'
37 assert attendance.check_out is not None
40@pytest.mark.django_db
41class TestLocalUserLink:
42 def test_local_user_can_link_external_email(self):
43 org = Organization.objects.create(name='Users Org', slug='users-org')
44 member = TeamService.create_local_user(
45 org.id,
46 LocalUserIn(
47 local_email='worker@fudo.local',
48 external_email='worker@example.com',
49 password='StrongPass123!',
50 first_name='Worker',
51 role='MEMBER',
52 ),
53 )
55 user = member.user
56 assert user.email == 'worker@fudo.local'
57 assert user.external_email == 'worker@example.com'
58 assert TeamMember.objects.filter(tenant_id=org.id, user=user).exists()