snapshot: preserve dynamic form builder parity and presets
This commit is contained in:
@@ -3,7 +3,7 @@ import json
|
||||
from django.contrib.auth import get_user_model
|
||||
from django.test import TestCase
|
||||
|
||||
from workflows.models import FormFieldConfig, FormOption
|
||||
from workflows.models import FormFieldConfig, FormOption, FormSectionConfig
|
||||
|
||||
|
||||
class FormBuilderAdminTests(TestCase):
|
||||
@@ -94,3 +94,81 @@ class FormBuilderAdminTests(TestCase):
|
||||
|
||||
self.assertEqual(response.status_code, 302)
|
||||
self.assertTrue(FormOption.objects.filter(category='device', label='Tablet').exists())
|
||||
|
||||
def test_staff_can_save_field_rules(self):
|
||||
self.client.force_login(self.staff)
|
||||
self.client.get('/admin-tools/form-builder/?form_type=onboarding', HTTP_HOST='localhost')
|
||||
department = FormFieldConfig.objects.get(form_type='onboarding', field_name='department')
|
||||
contract_start = FormFieldConfig.objects.get(form_type='onboarding', field_name='contract_start')
|
||||
|
||||
response = self.client.post(
|
||||
'/admin-tools/form-builder/?form_type=onboarding&option_category=device',
|
||||
data={
|
||||
'builder_action': 'save_field_rules',
|
||||
'field_rule_ids': [str(department.id), str(contract_start.id)],
|
||||
f'is_required_{department.id}': 'required',
|
||||
f'is_visible_{contract_start.id}': 'on',
|
||||
},
|
||||
HTTP_HOST='localhost',
|
||||
)
|
||||
|
||||
self.assertEqual(response.status_code, 302)
|
||||
department.refresh_from_db()
|
||||
contract_start.refresh_from_db()
|
||||
self.assertEqual(department.is_required, True)
|
||||
self.assertEqual(contract_start.is_required, None)
|
||||
|
||||
def test_staff_can_save_section_rules_with_locked_sections_preserved(self):
|
||||
self.client.force_login(self.staff)
|
||||
self.client.get('/admin-tools/form-builder/?form_type=onboarding', HTTP_HOST='localhost')
|
||||
|
||||
response = self.client.post(
|
||||
'/admin-tools/form-builder/?form_type=onboarding&option_category=device',
|
||||
data={
|
||||
'builder_action': 'save_section_rules',
|
||||
},
|
||||
HTTP_HOST='localhost',
|
||||
)
|
||||
|
||||
self.assertEqual(response.status_code, 302)
|
||||
itsetup = FormSectionConfig.objects.get(form_type='onboarding', section_key='itsetup')
|
||||
stammdaten = FormSectionConfig.objects.get(form_type='onboarding', section_key='stammdaten')
|
||||
self.assertEqual(itsetup.is_visible, False)
|
||||
self.assertEqual(stammdaten.is_visible, True)
|
||||
|
||||
def test_apply_onboarding_lean_preset_updates_section_and_field_rules(self):
|
||||
self.client.force_login(self.staff)
|
||||
response = self.client.post(
|
||||
'/admin-tools/form-builder/?form_type=onboarding&option_category=device',
|
||||
data={
|
||||
'builder_action': 'apply_preset',
|
||||
'preset_key': 'lean',
|
||||
},
|
||||
HTTP_HOST='localhost',
|
||||
)
|
||||
|
||||
self.assertEqual(response.status_code, 302)
|
||||
itsetup = FormSectionConfig.objects.get(form_type='onboarding', section_key='itsetup')
|
||||
gender = FormFieldConfig.objects.get(form_type='onboarding', field_name='gender')
|
||||
contract_start = FormFieldConfig.objects.get(form_type='onboarding', field_name='contract_start')
|
||||
self.assertEqual(itsetup.is_visible, False)
|
||||
self.assertEqual(gender.is_visible, False)
|
||||
self.assertEqual(contract_start.is_required, None)
|
||||
|
||||
def test_apply_offboarding_hr_heavy_preset_updates_fields(self):
|
||||
self.client.force_login(self.staff)
|
||||
response = self.client.post(
|
||||
'/admin-tools/form-builder/?form_type=offboarding&option_category=device',
|
||||
data={
|
||||
'builder_action': 'apply_preset',
|
||||
'preset_key': 'hr_heavy',
|
||||
},
|
||||
HTTP_HOST='localhost',
|
||||
)
|
||||
|
||||
self.assertEqual(response.status_code, 302)
|
||||
notes = FormFieldConfig.objects.get(form_type='offboarding', field_name='notes')
|
||||
department = FormFieldConfig.objects.get(form_type='offboarding', field_name='department')
|
||||
self.assertEqual(notes.is_visible, True)
|
||||
self.assertEqual(notes.is_required, True)
|
||||
self.assertEqual(department.is_required, True)
|
||||
|
||||
@@ -4,7 +4,7 @@ from django.contrib.auth import get_user_model
|
||||
from django.test import TestCase
|
||||
|
||||
from workflows.branding import get_company_email_domain
|
||||
from workflows.models import FormFieldConfig, OnboardingRequest
|
||||
from workflows.models import FormFieldConfig, FormSectionConfig, OnboardingRequest
|
||||
|
||||
|
||||
class OnboardingFlowTests(TestCase):
|
||||
@@ -112,3 +112,34 @@ class OnboardingFlowTests(TestCase):
|
||||
self.assertContains(response, 'Dieses Feld ist zwingend erforderlich.')
|
||||
self.assertFalse(OnboardingRequest.objects.filter(work_email=f'lina.leer@{self.company_domain}').exists())
|
||||
mock_delay.assert_not_called()
|
||||
|
||||
@patch('workflows.views.process_onboarding_request.delay')
|
||||
def test_hidden_itsetup_section_is_removed_from_form_and_submission(self, mock_delay):
|
||||
FormSectionConfig.objects.update_or_create(
|
||||
form_type='onboarding',
|
||||
section_key='itsetup',
|
||||
defaults={'is_visible': False},
|
||||
)
|
||||
|
||||
response = self.client.get('/onboarding/new/', HTTP_HOST='localhost')
|
||||
self.assertEqual(response.status_code, 200)
|
||||
self.assertNotContains(response, '3. IT-Setup')
|
||||
|
||||
payload = {
|
||||
'first_name': 'Nora',
|
||||
'last_name': 'Neutral',
|
||||
'gender': 'frau',
|
||||
'job_title': 'Consultant',
|
||||
'department': 'IT-Service',
|
||||
'work_email': f'nora.section@{self.company_domain}',
|
||||
'contract_start': '2026-11-01',
|
||||
'employment_type': 'unbefristet',
|
||||
'group_mailboxes_required_choice': 'nein',
|
||||
'agreement_confirm': 'on',
|
||||
}
|
||||
|
||||
submit_response = self.client.post('/onboarding/new/', payload, HTTP_HOST='localhost')
|
||||
|
||||
self.assertEqual(submit_response.status_code, 302)
|
||||
self.assertTrue(OnboardingRequest.objects.filter(work_email=f'nora.section@{self.company_domain}').exists())
|
||||
mock_delay.assert_called_once()
|
||||
|
||||
Reference in New Issue
Block a user