This commit is contained in:
philipp lang 2024-03-15 01:19:52 +01:00
parent 91943a6321
commit c3a2417cac
2 changed files with 90 additions and 109 deletions
database/factories/Form/Models
tests/Feature/Form

View File

@ -5,6 +5,7 @@ namespace Database\Factories\Form\Models;
use App\Form\Models\Form; use App\Form\Models\Form;
use Database\Factories\Traits\FakesMedia; use Database\Factories\Traits\FakesMedia;
use Illuminate\Database\Eloquent\Factories\Factory; use Illuminate\Database\Eloquent\Factories\Factory;
use Tests\Feature\Form\FormtemplateFieldRequest;
use Tests\Feature\Form\FormtemplateSectionRequest; use Tests\Feature\Form\FormtemplateSectionRequest;
/** /**
@ -59,6 +60,14 @@ class FormFactory extends Factory
return $this->state(['config' => ['sections' => array_map(fn ($section) => $section->create(), $sections)]]); return $this->state(['config' => ['sections' => array_map(fn ($section) => $section->create(), $sections)]]);
} }
/**
* @param array<int, FormtemplateFieldRequest> $sections
*/
public function fields(array $fields): self
{
return $this->sections([FormtemplateSectionRequest::new()->fields($fields)]);
}
/** /**
* @param mixed $parameters * @param mixed $parameters
*/ */

View File

@ -55,15 +55,11 @@ class FormRegisterActionTest extends FormTestCase
public function testItSendsEmailToParticipant(): void public function testItSendsEmailToParticipant(): void
{ {
$this->login()->loginNami()->withoutExceptionHandling(); $this->login()->loginNami()->withoutExceptionHandling();
$form = Form::factory() $form = Form::factory()->name('Ver2')->fields([
->sections([ $this->textField('vorname')->specialType(SpecialType::FIRSTNAME),
FormtemplateSectionRequest::new()->fields([ $this->textField('nachname')->specialType(SpecialType::LASTNAME),
$this->textField('vorname')->specialType(SpecialType::FIRSTNAME), $this->textField('email')->specialType(SpecialType::EMAIL),
$this->textField('nachname')->specialType(SpecialType::LASTNAME), ])
$this->textField('email')->specialType(SpecialType::EMAIL),
]),
])
->name('Ver2')
->create(); ->create();
$this->register($form, ['vorname' => 'Lala', 'nachname' => 'GG', 'email' => 'example@test.test']) $this->register($form, ['vorname' => 'Lala', 'nachname' => 'GG', 'email' => 'example@test.test'])
@ -75,13 +71,10 @@ class FormRegisterActionTest extends FormTestCase
public function testItDoesntSendEmailWhenNoMailFieldGiven(): void public function testItDoesntSendEmailWhenNoMailFieldGiven(): void
{ {
$this->login()->loginNami()->withoutExceptionHandling(); $this->login()->loginNami()->withoutExceptionHandling();
$form = Form::factory() $form = Form::factory()->fields([
->sections([ $this->textField('vorname')->specialType(SpecialType::FIRSTNAME),
FormtemplateSectionRequest::new()->fields([ $this->textField('nachname')->specialType(SpecialType::LASTNAME),
$this->textField('vorname')->specialType(SpecialType::FIRSTNAME), ])
$this->textField('nachname')->specialType(SpecialType::LASTNAME),
]),
])
->create(); ->create();
$this->register($form, ['vorname' => 'Lala', 'nachname' => 'GG']) $this->register($form, ['vorname' => 'Lala', 'nachname' => 'GG'])
@ -99,9 +92,7 @@ class FormRegisterActionTest extends FormTestCase
{ {
Carbon::setTestNow(Carbon::parse('2024-02-15 06:00:00')); Carbon::setTestNow(Carbon::parse('2024-02-15 06:00:00'));
$this->login()->loginNami(); $this->login()->loginNami();
$form = Form::factory() $form = Form::factory()->fields([$fieldGenerator])->create();
->sections([FormtemplateSectionRequest::new()->fields([$fieldGenerator])])
->create();
$response = $this->postJson(route('form.register', ['form' => $form]), $payload); $response = $this->postJson(route('form.register', ['form' => $form]), $payload);
@ -270,10 +261,9 @@ class FormRegisterActionTest extends FormTestCase
$this->login()->loginNami(); $this->login()->loginNami();
$group = Group::factory()->has(Group::factory()->count(3), 'children')->create(); $group = Group::factory()->has(Group::factory()->count(3), 'children')->create();
$foreignGroup = Group::factory()->create(); $foreignGroup = Group::factory()->create();
$form = Form::factory() $form = Form::factory()->fields([
->sections([FormtemplateSectionRequest::new()->fields([ $this->groupField('group')->name('Gruppe')->parentGroup($group->id)->required(true)
$this->groupField('group')->name('Gruppe')->parentGroup($group->id)->required(true) ])
])])
->create(); ->create();
$this->register($form, ['group' => null]) $this->register($form, ['group' => null])
@ -285,10 +275,9 @@ class FormRegisterActionTest extends FormTestCase
public function testGroupFieldCanBeNullWhenNotRequired(): void public function testGroupFieldCanBeNullWhenNotRequired(): void
{ {
$this->login()->loginNami(); $this->login()->loginNami();
$form = Form::factory() $form = Form::factory()->fields([
->sections([FormtemplateSectionRequest::new()->fields([ $this->groupField('group')->parentGroup(Group::factory()->create()->id)->required(false)
$this->groupField('group')->parentGroup(Group::factory()->create()->id)->required(false) ])
])])
->create(); ->create();
$this->register($form, ['group' => null]) $this->register($form, ['group' => null])
@ -300,11 +289,10 @@ class FormRegisterActionTest extends FormTestCase
$this->login()->loginNami(); $this->login()->loginNami();
$group = Group::factory()->has(Group::factory()->has(Group::factory()->count(3), 'children'), 'children')->create(); $group = Group::factory()->has(Group::factory()->has(Group::factory()->count(3), 'children'), 'children')->create();
$foreignGroup = Group::factory()->create(); $foreignGroup = Group::factory()->create();
$form = Form::factory() $form = Form::factory()->fields([
->sections([FormtemplateSectionRequest::new()->fields([ $this->groupField('parentgroup')->name('Übergeordnete Gruppe')->parentGroup($group->id)->required(true),
$this->groupField('parentgroup')->name('Übergeordnete Gruppe')->parentGroup($group->id)->required(true), $this->groupField('group')->name('Gruppe')->parentField('parentgroup')->required(true),
$this->groupField('group')->name('Gruppe')->parentField('parentgroup')->required(true), ])
])])
->create(); ->create();
$this->register($form, ['parentgroup' => $group->children->first()->id, 'group' => $foreignGroup->id]) $this->register($form, ['parentgroup' => $group->children->first()->id, 'group' => $foreignGroup->id])
@ -317,12 +305,11 @@ class FormRegisterActionTest extends FormTestCase
{ {
$this->login()->loginNami(); $this->login()->loginNami();
$this->createMember(['mitgliedsnr' => '9966', 'email' => 'max@muster.de', 'firstname' => 'Max', 'lastname' => 'Muster']); $this->createMember(['mitgliedsnr' => '9966', 'email' => 'max@muster.de', 'firstname' => 'Max', 'lastname' => 'Muster']);
$form = Form::factory() $form = Form::factory()->fields([
->sections([FormtemplateSectionRequest::new()->fields([ $this->textField('email')->namiType(NamiType::EMAIL),
$this->textField('email')->namiType(NamiType::EMAIL), $this->textField('firstname')->namiType(NamiType::FIRSTNAME),
$this->textField('firstname')->namiType(NamiType::FIRSTNAME), $this->textField('lastname')->namiType(NamiType::LASTNAME),
$this->textField('lastname')->namiType(NamiType::LASTNAME), ])
])])
->create(); ->create();
$this->register($form, ['email' => 'max@muster.de', 'firstname' => 'Max', 'lastname' => 'Muster'])->assertOk(); $this->register($form, ['email' => 'max@muster.de', 'firstname' => 'Max', 'lastname' => 'Muster'])->assertOk();
@ -333,10 +320,9 @@ class FormRegisterActionTest extends FormTestCase
{ {
$this->login()->loginNami(); $this->login()->loginNami();
$this->createMember(['mitgliedsnr' => '9966', 'email' => 'max@muster.de']); $this->createMember(['mitgliedsnr' => '9966', 'email' => 'max@muster.de']);
$form = Form::factory() $form = Form::factory()->fields([
->sections([FormtemplateSectionRequest::new()->fields([ $this->textField('email'),
$this->textField('email'), ])
])])
->create(); ->create();
$this->register($form, ['email' => 'max@muster.de'])->assertOk(); $this->register($form, ['email' => 'max@muster.de'])->assertOk();
@ -348,10 +334,9 @@ class FormRegisterActionTest extends FormTestCase
$this->login()->loginNami(); $this->login()->loginNami();
$this->createMember(['mitgliedsnr' => '9966', 'email' => 'max@muster.de']); $this->createMember(['mitgliedsnr' => '9966', 'email' => 'max@muster.de']);
$this->createMember(['mitgliedsnr' => '9967', 'email' => 'max@muster.de']); $this->createMember(['mitgliedsnr' => '9967', 'email' => 'max@muster.de']);
$form = Form::factory() $form = Form::factory()->fields([
->sections([FormtemplateSectionRequest::new()->fields([ $this->textField('email')->namiType(NamiType::EMAIL),
$this->textField('email')->namiType(NamiType::EMAIL), ])
])])
->create(); ->create();
$this->register($form, ['email' => 'max@muster.de'])->assertOk(); $this->register($form, ['email' => 'max@muster.de'])->assertOk();
@ -366,10 +351,9 @@ class FormRegisterActionTest extends FormTestCase
$this->login()->loginNami(); $this->login()->loginNami();
$this->createMember(['mitgliedsnr' => '5505']); $this->createMember(['mitgliedsnr' => '5505']);
$this->createMember(['mitgliedsnr' => '5506']); $this->createMember(['mitgliedsnr' => '5506']);
$form = Form::factory() $form = Form::factory()->fields([
->sections([FormtemplateSectionRequest::new()->fields([ $this->namiField('members'),
$this->namiField('members'), ])
])])
->create(); ->create();
$this->register($form, ['members' => [['id' => '5505'], ['id' => '5506']]]) $this->register($form, ['members' => [['id' => '5505'], ['id' => '5506']]])
@ -418,11 +402,10 @@ class FormRegisterActionTest extends FormTestCase
{ {
$this->login()->loginNami(); $this->login()->loginNami();
$this->createMember(['mitgliedsnr' => '5505', ...$memberAttributes]); $this->createMember(['mitgliedsnr' => '5505', ...$memberAttributes]);
$form = Form::factory() $form = Form::factory()->fields([
->sections([FormtemplateSectionRequest::new()->fields([ $this->namiField('members'),
$this->namiField('members'), $this->textField('other')->required(true)->namiType($type),
$this->textField('other')->required(true)->namiType($type), ])
])])
->create(); ->create();
$this->register($form, ['other' => '::other::', 'members' => [['id' => '5505']]])->assertOk(); $this->register($form, ['other' => '::other::', 'members' => [['id' => '5505']]])->assertOk();
@ -433,11 +416,10 @@ class FormRegisterActionTest extends FormTestCase
{ {
$this->login()->loginNami(); $this->login()->loginNami();
$this->createMember(['mitgliedsnr' => '5505']); $this->createMember(['mitgliedsnr' => '5505']);
$form = Form::factory() $form = Form::factory()->fields([
->sections([FormtemplateSectionRequest::new()->fields([ $this->namiField('members'),
$this->namiField('members'), $this->textField('other')->required(false),
$this->textField('other')->required(false), ])
])])
->create(); ->create();
$this->register($form, ['other' => '::string::', 'members' => [['id' => '5505', 'other' => 'othervalue']]]) $this->register($form, ['other' => '::string::', 'members' => [['id' => '5505', 'other' => 'othervalue']]])
@ -450,11 +432,10 @@ class FormRegisterActionTest extends FormTestCase
$this->login()->loginNami(); $this->login()->loginNami();
$this->createMember(['mitgliedsnr' => '5505']); $this->createMember(['mitgliedsnr' => '5505']);
$this->createMember(['mitgliedsnr' => '5506']); $this->createMember(['mitgliedsnr' => '5506']);
$form = Form::factory() $form = Form::factory()->fields([
->sections([FormtemplateSectionRequest::new()->fields([ $this->namiField('members'),
$this->namiField('members'), $this->textField('other')->name('Andere')->required(true),
$this->textField('other')->name('Andere')->required(true), ])
])])
->create(); ->create();
$this->register($form, ['other' => 'ooo', 'members' => [['id' => '5505', 'other' => ''], ['id' => '5506', 'other' => '']]]) $this->register($form, ['other' => 'ooo', 'members' => [['id' => '5505', 'other' => ''], ['id' => '5506', 'other' => '']]])
@ -465,11 +446,10 @@ class FormRegisterActionTest extends FormTestCase
public function testItValidatesIfMemberExists(): void public function testItValidatesIfMemberExists(): void
{ {
$this->login()->loginNami(); $this->login()->loginNami();
$form = Form::factory() $form = Form::factory()->fields([
->sections([FormtemplateSectionRequest::new()->fields([ $this->namiField('members'),
$this->namiField('members'), $this->textField('other')->required(true),
$this->textField('other')->required(true), ])
])])
->create(); ->create();
$this->register($form, ['other' => '::string::', 'members' => [['id' => '9999', 'other' => '::string::']]]) $this->register($form, ['other' => '::string::', 'members' => [['id' => '9999', 'other' => '::string::']]])
@ -480,11 +460,10 @@ class FormRegisterActionTest extends FormTestCase
{ {
$this->login()->loginNami(); $this->login()->loginNami();
$this->createMember(['mitgliedsnr' => '5505']); $this->createMember(['mitgliedsnr' => '5505']);
$form = Form::factory() $form = Form::factory()->fields([
->sections([FormtemplateSectionRequest::new()->fields([ $this->namiField('members'),
$this->namiField('members'), $this->checkboxesField('other')->name('Andere')->options(['A', 'B']),
$this->checkboxesField('other')->name('Andere')->options(['A', 'B']), ])
])])
->create(); ->create();
$this->register($form, ['other' => [], 'members' => [ $this->register($form, ['other' => [], 'members' => [
@ -497,11 +476,10 @@ class FormRegisterActionTest extends FormTestCase
{ {
$this->login()->loginNami(); $this->login()->loginNami();
$this->createMember(['mitgliedsnr' => '5505']); $this->createMember(['mitgliedsnr' => '5505']);
$form = Form::factory() $form = Form::factory()->fields([
->sections([FormtemplateSectionRequest::new()->fields([ $this->namiField('members'),
$this->namiField('members'), $this->checkboxesField('other')->name('Andere')->options(['A', 'B']),
$this->checkboxesField('other')->name('Andere')->options(['A', 'B']), ])
])])
->create(); ->create();
$this->register($form, ['other' => [], 'members' => [ $this->register($form, ['other' => [], 'members' => [
@ -514,12 +492,11 @@ class FormRegisterActionTest extends FormTestCase
{ {
$this->login()->loginNami(); $this->login()->loginNami();
$this->createMember(['mitgliedsnr' => '5505', 'firstname' => 'Paula']); $this->createMember(['mitgliedsnr' => '5505', 'firstname' => 'Paula']);
$form = Form::factory() $form = Form::factory()->fields([
->sections([FormtemplateSectionRequest::new()->fields([ $this->namiField('members'),
$this->namiField('members'), $this->textField('other')->required(true)->forMembers(false)->options(['A', 'B']),
$this->textField('other')->required(true)->forMembers(false)->options(['A', 'B']), $this->textField('firstname')->required(true)->namiType(NamiType::FIRSTNAME),
$this->textField('firstname')->required(true)->namiType(NamiType::FIRSTNAME), ])
])])
->create(); ->create();
$this->register($form, ['firstname' => 'A', 'other' => 'B', 'members' => [['id' => '5505']]]) $this->register($form, ['firstname' => 'A', 'other' => 'B', 'members' => [['id' => '5505']]])
@ -531,10 +508,9 @@ class FormRegisterActionTest extends FormTestCase
public function testNamiFieldCanBeEmptyArray(): void public function testNamiFieldCanBeEmptyArray(): void
{ {
$this->login()->loginNami(); $this->login()->loginNami();
$form = Form::factory() $form = Form::factory()->fields([
->sections([FormtemplateSectionRequest::new()->fields([ $this->namiField('members'),
$this->namiField('members'), ])
])])
->create(); ->create();
$this->register($form, ['members' => []])->assertOk(); $this->register($form, ['members' => []])->assertOk();
@ -544,10 +520,9 @@ class FormRegisterActionTest extends FormTestCase
public function testNamiFieldMustBeArray(): void public function testNamiFieldMustBeArray(): void
{ {
$this->login()->loginNami(); $this->login()->loginNami();
$form = Form::factory() $form = Form::factory()->fields([
->sections([FormtemplateSectionRequest::new()->fields([ $this->namiField('members'),
$this->namiField('members'), ])
])])
->create(); ->create();
$this->register($form, ['members' => null])->assertJsonValidationErrors(['members']); $this->register($form, ['members' => null])->assertJsonValidationErrors(['members']);
@ -557,10 +532,9 @@ class FormRegisterActionTest extends FormTestCase
{ {
$this->login()->loginNami(); $this->login()->loginNami();
$this->createMember(['mitgliedsnr' => '5505']); $this->createMember(['mitgliedsnr' => '5505']);
$form = Form::factory() $form = Form::factory()->fields([
->sections([FormtemplateSectionRequest::new()->fields([ $this->namiField('members'),
$this->namiField('members'), ])
])])
->create(); ->create();
$this->register($form, ['members' => [['id' => '5505']]])->assertOk(); $this->register($form, ['members' => [['id' => '5505']]])->assertOk();
@ -573,12 +547,11 @@ class FormRegisterActionTest extends FormTestCase
$bezirk = Group::factory()->level(Level::REGION)->create(); $bezirk = Group::factory()->level(Level::REGION)->create();
$stamm = Group::factory()->for($bezirk, 'parent')->level(Level::GROUP)->create(); $stamm = Group::factory()->for($bezirk, 'parent')->level(Level::GROUP)->create();
$this->createMember(['mitgliedsnr' => '5505', 'group_id' => $stamm->id]); $this->createMember(['mitgliedsnr' => '5505', 'group_id' => $stamm->id]);
$form = Form::factory() $form = Form::factory()->fields([
->sections([FormtemplateSectionRequest::new()->fields([ $this->namiField('members'),
$this->namiField('members'), $this->groupField('bezirk')->forMembers(false)->namiType(NamiType::REGION),
$this->groupField('bezirk')->forMembers(false)->namiType(NamiType::REGION), $this->groupField('stamm')->forMembers(false)->namiType(NamiType::STAMM),
$this->groupField('stamm')->forMembers(false)->namiType(NamiType::STAMM), ])
])])
->create(); ->create();
$this->register($form, ['bezirk' => $bezirk->id, 'stamm' => $stamm->id, 'members' => [['id' => '5505']]])->assertOk(); $this->register($form, ['bezirk' => $bezirk->id, 'stamm' => $stamm->id, 'members' => [['id' => '5505']]])->assertOk();
@ -591,11 +564,10 @@ class FormRegisterActionTest extends FormTestCase
$this->login()->loginNami(); $this->login()->loginNami();
$bezirk = Group::factory()->level(Level::REGION)->create(); $bezirk = Group::factory()->level(Level::REGION)->create();
$this->createMember(['mitgliedsnr' => '5505', 'group_id' => $bezirk->id]); $this->createMember(['mitgliedsnr' => '5505', 'group_id' => $bezirk->id]);
$form = Form::factory() $form = Form::factory()->fields([
->sections([FormtemplateSectionRequest::new()->fields([ $this->namiField('members'),
$this->namiField('members'), $this->groupField('bezirk')->forMembers(false)->namiType(NamiType::REGION),
$this->groupField('bezirk')->forMembers(false)->namiType(NamiType::REGION), ])
])])
->create(); ->create();
$this->register($form, ['bezirk' => $bezirk->id, 'members' => [['id' => '5505']]])->assertOk(); $this->register($form, ['bezirk' => $bezirk->id, 'members' => [['id' => '5505']]])->assertOk();