76 lines
2.9 KiB
Python
76 lines
2.9 KiB
Python
from datetime import date
|
|
from pathlib import Path
|
|
|
|
from django.test import TestCase, override_settings
|
|
from pypdf import PdfReader
|
|
|
|
from workflows.models import FormFieldConfig, FormSectionConfig, OffboardingRequest, OnboardingRequest
|
|
from workflows.tasks import _generate_offboarding_pdf, _generate_onboarding_pdf
|
|
|
|
|
|
@override_settings(PDF_OUTPUT_DIR=Path('/tmp/onoff_test_pdfs'))
|
|
class PDFGenerationTests(TestCase):
|
|
def _extract_pdf_text(self, pdf_path: Path) -> str:
|
|
reader = PdfReader(str(pdf_path))
|
|
return "\n".join((page.extract_text() or "") for page in reader.pages)
|
|
|
|
def test_onboarding_pdf_respects_hidden_section_and_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=date(2026, 11, 1),
|
|
employment_type='unbefristet',
|
|
needed_devices='Laptop\nMonitor',
|
|
onboarded_by_email='requester@workdock.de',
|
|
onboarded_by_name='Mia Beispiel',
|
|
agreement='accepted',
|
|
)
|
|
|
|
pdf_path = _generate_onboarding_pdf(request_obj)
|
|
text = self._extract_pdf_text(pdf_path)
|
|
|
|
self.assertIn('Max Mustermann', text)
|
|
self.assertIn('IT-Service', text)
|
|
self.assertIn('Stammdaten', text)
|
|
self.assertNotIn('Consultant', text)
|
|
self.assertNotIn('Laptop', text)
|
|
self.assertNotIn('IT-Setup', text)
|
|
self.assertNotIn('1. Stammdaten', text)
|
|
self.assertNotIn('Vorname', text)
|
|
self.assertNotIn('Nachname', text)
|
|
self.assertNotIn('onboarded_by_email', text)
|
|
|
|
def test_offboarding_pdf_uses_dynamic_sections(self):
|
|
request_obj = OffboardingRequest.objects.create(
|
|
full_name='Lara Beispiel',
|
|
work_email='lara.beispiel@workdock.de',
|
|
department='IT-Service',
|
|
job_title='Engineer',
|
|
last_working_day=date(2026, 12, 31),
|
|
notes='Bitte Accounts sperren.',
|
|
requested_by_email='admin@workdock.de',
|
|
requested_by_name='Nina Admin',
|
|
)
|
|
|
|
pdf_path = _generate_offboarding_pdf(request_obj)
|
|
text = self._extract_pdf_text(pdf_path)
|
|
|
|
self.assertIn('Lara Beispiel', text)
|
|
self.assertIn('Engineer', text)
|
|
self.assertIn('31. Dezember 2026', text)
|
|
self.assertIn('Bitte Accounts sperren.', text)
|
|
self.assertNotIn('1. Mitarbeitende', text)
|