Files
workdock-platform/backend/workflows/tests/test_pdf_sections.py
2026-03-27 16:54:11 +01:00

161 lines
6.8 KiB
Python

from django.test import TestCase
from workflows.models import FormCustomFieldConfig, FormCustomSectionConfig, 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')
def test_custom_section_title_is_used_in_pdf_sections(self):
FormCustomSectionConfig.objects.create(
form_type='onboarding',
section_key='benefits',
sort_order=10,
title='Benefits',
is_active=True,
)
FormCustomFieldConfig.objects.create(
form_type='onboarding',
field_key='meal_allowance',
section_key='benefits',
sort_order=0,
field_type='text',
is_active=True,
label='Essenszuschuss',
)
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={'meal_allowance': 'Ja'},
)
sections = build_pdf_sections('onboarding', request_obj, 'de')
custom_section = next(section for section in sections if section['key'] == 'benefits')
self.assertEqual(custom_section['title'], 'Benefits')
self.assertIn('custom__meal_allowance', [field['name'] for field in custom_section['fields']])