from django.test import TestCase from workflows.models import FormCustomFieldConfig, FormFieldConfig, FormSectionConfig, OffboardingRequest, OnboardingRequest from workflows.pdf_sections import build_pdf_sections class PDFSectionBuilderTests(TestCase): def test_onboarding_builder_respects_hidden_section_and_hidden_field(self): FormSectionConfig.objects.update_or_create( form_type='onboarding', section_key='itsetup', defaults={'is_visible': False}, ) FormFieldConfig.objects.update_or_create( form_type='onboarding', field_name='job_title', defaults={'is_visible': False}, ) request_obj = OnboardingRequest.objects.create( full_name='Max Mustermann', gender='herr', job_title='Consultant', department='IT-Service', work_email='max.mustermann@workdock.de', contract_start='2026-11-01', employment_type='unbefristet', agreement='accepted', ) sections = build_pdf_sections('onboarding', request_obj, 'de') self.assertEqual([section['key'] for section in sections], ['stammdaten', 'vertrag', 'abschluss']) stammdaten = next(section for section in sections if section['key'] == 'stammdaten') self.assertNotIn('job_title', [field['name'] for field in stammdaten['fields']]) def test_onboarding_builder_uses_field_order_and_overrides(self): FormFieldConfig.objects.update_or_create( form_type='onboarding', field_name='department', defaults={ 'sort_order': 1, 'label_override': 'Team', 'help_text_override': 'Interne Organisationseinheit', }, ) FormFieldConfig.objects.update_or_create( form_type='onboarding', field_name='gender', defaults={'sort_order': 5}, ) request_obj = OnboardingRequest.objects.create( full_name='Max Mustermann', gender='herr', job_title='Consultant', department='IT-Service', work_email='max.mustermann@workdock.de', contract_start='2026-11-01', employment_type='unbefristet', agreement='accepted', ) sections = build_pdf_sections('onboarding', request_obj, 'de') stammdaten = next(section for section in sections if section['key'] == 'stammdaten') visible_names = [field['name'] for field in stammdaten['fields']] department_field = next(field for field in stammdaten['fields'] if field['name'] == 'department') self.assertLess(visible_names.index('department'), visible_names.index('gender')) self.assertEqual(department_field['label'], 'Team') self.assertEqual(department_field['help_text'], 'Interne Organisationseinheit') self.assertEqual(department_field['display_value'], 'IT-Service') def test_offboarding_builder_has_section_parity_and_formats_values(self): FormSectionConfig.objects.update_or_create( form_type='offboarding', section_key='abschluss', defaults={'is_visible': False}, ) request_obj = OffboardingRequest.objects.create( full_name='Lara Beispiel', work_email='lara.beispiel@workdock.de', department='IT-Service', job_title='Engineer', last_working_day='2026-12-31', notes='Bitte Accounts sperren.', requested_by_email='admin@workdock.de', ) sections = build_pdf_sections('offboarding', request_obj, 'de') self.assertEqual([section['key'] for section in sections], ['mitarbeitende', 'austritt']) mitarbeitende = next(section for section in sections if section['key'] == 'mitarbeitende') austritt = next(section for section in sections if section['key'] == 'austritt') self.assertIn('full_name', [field['name'] for field in mitarbeitende['fields']]) self.assertIn('last_working_day', [field['name'] for field in austritt['fields']]) date_field = next(field for field in austritt['fields'] if field['name'] == 'last_working_day') self.assertTrue(date_field['display_value']) def test_custom_fields_are_included_in_pdf_sections(self): FormCustomFieldConfig.objects.create( form_type='onboarding', field_key='office_location', section_key='stammdaten', sort_order=0, field_type='text', is_active=True, label='Bürostandort', ) request_obj = OnboardingRequest.objects.create( full_name='Max Mustermann', gender='herr', job_title='Consultant', department='IT-Service', work_email='max.mustermann@workdock.de', contract_start='2026-11-01', employment_type='unbefristet', agreement='accepted', custom_field_values={'office_location': 'Berlin Mitte'}, ) sections = build_pdf_sections('onboarding', request_obj, 'de') stammdaten = next(section for section in sections if section['key'] == 'stammdaten') custom_field = next(field for field in stammdaten['fields'] if field['name'] == 'custom__office_location') self.assertEqual(custom_field['label'], 'Bürostandort') self.assertEqual(custom_field['display_value'], 'Berlin Mitte')