diff --git a/apps/onboarding/tests/test_api.py b/apps/onboarding/tests/test_api.py index 09fd9bc..4514302 100644 --- a/apps/onboarding/tests/test_api.py +++ b/apps/onboarding/tests/test_api.py @@ -635,3 +635,53 @@ class OnboardingApiTests(TestCase): response = self.client.post(f'/api/onboarding-session/{self.session.uuid}/complete/') self.assertEqual(response.status_code, HTTP_400_BAD_REQUEST) self.assertIn('error', response.data) + + def test_onboarding_session_progress_overview_returns_user_flow_matrix(self): + self.role.members.add(self.member) + extra_flow = OnboardingFlow.objects.create( + title='Second Flow', + role=self.role, + structure=[], + is_active=True, + ) + self.session.state = {'flow_uuid': str(self.flow.uuid), 'progress_percentage': 35} + self.session.save(update_fields=['state', 'updated_at']) + + self.client.force_authenticate(self.manager) + response = self.client.get('/api/onboarding-session/progress-overview/') + + self.assertEqual(response.status_code, HTTP_200_OK) + rows = response.json() + self.assertTrue(isinstance(rows, list)) + self.assertTrue(any(row.get('flow', {}).get('uuid') == str(self.flow.uuid) for row in rows)) + self.assertTrue(any(row.get('flow', {}).get('uuid') == str(extra_flow.uuid) for row in rows)) + first_flow_row = next(row for row in rows if row.get('flow', {}).get('uuid') == str(self.flow.uuid)) + self.assertEqual(first_flow_row.get('latest_status'), self.session.status) + self.assertEqual(first_flow_row.get('progress'), 35) + + def test_onboarding_session_list_filters_by_user_and_flow_for_manager(self): + self.role.members.add(self.member, self.manager) + self.session.state = {'flow_uuid': str(self.flow.uuid), 'progress_percentage': 50} + self.session.save(update_fields=['state', 'updated_at']) + + manager_session = OnboardingSession.objects.create( + user=self.manager, + role=self.role, + state={'flow_uuid': str(self.flow.uuid), 'progress_percentage': 10}, + active_configs={}, + ) + + self.client.force_authenticate(self.manager) + response = self.client.get( + '/api/onboarding-session/', + { + 'role_uuid': str(self.role.uuid), + 'user_uuid': str(self.member.uuid), + 'flow_uuid': str(self.flow.uuid), + }, + ) + + self.assertEqual(response.status_code, HTTP_200_OK) + uuids = {str(item.get('uuid')) for item in response.json()} + self.assertIn(str(self.session.uuid), uuids) + self.assertNotIn(str(manager_session.uuid), uuids)