from django.test import TestCase from django.contrib.auth import get_user_model from apps.orgs.models import Organization, Role from apps.mlstore.models import AgentModel, Agent from apps.onboarding.models import OnboardingFlow, OnboardingPage, OnboardingField, OnboardingSession User = get_user_model() class OnboardingModelTests(TestCase): def setUp(self): self.user = User.objects.create_user(email_address='user@example.com', password='pass') self.manager = User.objects.create_user(email_address='manager@example.com', password='pass', is_manager=True) self.org = Organization.objects.create(name='Org', owner=self.manager) self.role = Role.objects.create(name='Engineer', organization=self.org) self.model = AgentModel.objects.create(name='test-model', version='v1', path='model.gguf') self.agent = Agent.objects.create(model=self.model, organization=self.org) def test_flow_str(self): flow = OnboardingFlow.objects.create(role=self.role, agent=self.agent, title='Welcome', description='Intro') self.assertIn('Welcome', str(flow)) self.assertIn(self.role.name, str(flow)) def test_page_and_field_str(self): flow = OnboardingFlow.objects.create(role=self.role, agent=self.agent, title='Flow', description='') page = OnboardingPage.objects.create(flow=flow, order=0, title='Page 1', body='Body') field = OnboardingField.objects.create(page=page, order=0, key='q1', label='Question 1') self.assertIn(flow.title, str(page)) self.assertIn(field.label, str(field)) def test_field_unique_key_per_page(self): flow = OnboardingFlow.objects.create(role=self.role, agent=self.agent, title='Flow', description='') page = OnboardingPage.objects.create(flow=flow, order=0, title='Page 1', body='Body') OnboardingField.objects.create(page=page, order=0, key='dup', label='Dup 1') with self.assertRaises(Exception): OnboardingField.objects.create(page=page, order=1, key='dup', label='Dup 2') def test_session_str(self): flow = OnboardingFlow.objects.create(role=self.role, agent=self.agent, title='Flow', description='') session = OnboardingSession.objects.create(flow=flow, user=self.user) self.assertIn(self.user.email_address, str(session)) self.assertIn(flow.title, str(session))