adrema/tests/Feature/Form/FormStoreActionTest.php

97 lines
3.9 KiB
PHP
Raw Normal View History

2023-12-27 22:54:58 +01:00
<?php
namespace Tests\Feature\Form;
2024-02-14 00:13:49 +01:00
use App\Form\Enums\NamiField;
2024-02-04 03:19:28 +01:00
use App\Form\Fields\TextField;
2023-12-27 22:54:58 +01:00
use App\Form\Models\Form;
use App\Lib\Events\Succeeded;
use Illuminate\Foundation\Testing\DatabaseTransactions;
use Illuminate\Support\Facades\Event;
use Tests\TestCase;
use Generator;
2024-01-12 23:29:18 +01:00
use Illuminate\Support\Facades\Storage;
2024-02-02 01:05:45 +01:00
use Tests\RequestFactories\EditorRequestFactory;
2023-12-27 22:54:58 +01:00
class FormStoreActionTest extends TestCase
{
use DatabaseTransactions;
2024-01-12 23:29:18 +01:00
public function setUp(): void
{
parent::setUp();
Storage::fake('temp');
}
2023-12-27 22:54:58 +01:00
public function testItStoresForm(): void
{
Event::fake([Succeeded::class]);
$this->login()->loginNami()->withoutExceptionHandling();
2024-02-02 01:05:45 +01:00
$description = EditorRequestFactory::new()->text(10, 'Lorem');
2023-12-27 22:54:58 +01:00
FormRequest::new()
->name('formname')
2024-02-09 00:21:33 +01:00
->description($description)
2023-12-27 22:54:58 +01:00
->excerpt('avff')
2023-12-31 22:35:13 +01:00
->registrationFrom('2023-05-04 01:00:00')->registrationUntil('2023-07-07 01:00:00')->from('2023-07-07')->to('2023-07-08')
2023-12-31 21:46:52 +01:00
->mailTop('Guten Tag')
->mailBottom('Viele Grüße')
2024-01-12 23:29:18 +01:00
->headerImage('htzz.jpg')
2024-02-14 00:13:49 +01:00
->sections([FormtemplateSectionRequest::new()->name('sname')->fields([FormtemplateFieldRequest::type(TextField::class)->namiField(NamiField::BIRTHDAY)])])
2023-12-27 22:54:58 +01:00
->fake();
$this->postJson(route('form.store'))->assertOk();
$form = Form::latest()->first();
$this->assertEquals('sname', $form->config['sections'][0]['name']);
$this->assertEquals('formname', $form->name);
$this->assertEquals('avff', $form->excerpt);
2024-02-02 01:05:45 +01:00
$this->assertEquals($description->paragraphBlock(10, 'Lorem'), $form->description);
2023-12-31 21:46:52 +01:00
$this->assertEquals('Guten Tag', $form->mail_top);
$this->assertEquals('Viele Grüße', $form->mail_bottom);
$this->assertEquals('2023-05-04 01:00', $form->registration_from->format('Y-m-d H:i'));
$this->assertEquals('2023-07-07 01:00', $form->registration_until->format('Y-m-d H:i'));
2023-12-31 22:35:13 +01:00
$this->assertEquals('2023-07-07', $form->from->format('Y-m-d'));
$this->assertEquals('2023-07-08', $form->to->format('Y-m-d'));
2024-02-14 00:13:49 +01:00
$this->assertEquals('Geburtstag', $form->config['sections'][0]['fields'][0]['nami_field']);
2024-01-12 23:29:18 +01:00
$this->assertCount(1, $form->getMedia('headerImage'));
$this->assertEquals('formname.jpg', $form->getMedia('headerImage')->first()->file_name);
2024-01-01 21:19:38 +01:00
Event::assertDispatched(Succeeded::class, fn (Succeeded $event) => $event->message === 'Veranstaltung gespeichert.');
2023-12-27 22:54:58 +01:00
}
2023-12-31 21:46:52 +01:00
public function testRegistrationDatesCanBeNull(): void
{
$this->login()->loginNami()->withoutExceptionHandling();
$this->postJson(route('form.store'), FormRequest::new()->registrationFrom(null)->registrationUntil(null)->create())->assertOk();
$this->assertDatabaseHas('forms', [
'registration_until' => null,
'registration_from' => null,
]);
}
2023-12-27 22:54:58 +01:00
public function validationDataProvider(): Generator
{
yield [FormRequest::new()->name(''), ['name' => 'Name ist erforderlich.']];
yield [FormRequest::new()->excerpt(''), ['excerpt' => 'Auszug ist erforderlich.']];
2024-02-02 01:05:45 +01:00
yield [FormRequest::new()->description(null), ['description.blocks' => 'Beschreibung ist erforderlich.']];
2023-12-31 21:46:52 +01:00
yield [FormRequest::new()->state(['from' => null]), ['from' => 'Start ist erforderlich']];
yield [FormRequest::new()->state(['to' => null]), ['to' => 'Ende ist erforderlich']];
2024-01-12 23:29:18 +01:00
yield [FormRequest::new()->state(['header_image' => null]), ['header_image' => 'Bild ist erforderlich']];
2023-12-27 22:54:58 +01:00
}
/**
* @dataProvider validationDataProvider
* @param array<string, string> $messages
*/
public function testItValidatesRequests(FormRequest $request, array $messages): void
{
$this->login()->loginNami();
$request->fake();
$this->postJson(route('form.store'))->assertJsonValidationErrors($messages);
}
}