ldc-boutique-cnc-sable/tests/Feature/Bo/Slides/CrudSlideTest.php

114 lines
3.6 KiB
PHP

<?php
declare(strict_types=1);
use App\Models\Slide;
use App\Models\User;
use Illuminate\Support\Facades\Date;
describe('On Slide CRUD', function (): void {
it('Can create a slide', function (): void {
/** @var \Tests\TestCase $this */
$this->withoutExceptionHandling();
// GIVEN
$htmlDateInputFormat = 'Y-m-d\TH:i';
$user = User::factory()->createOne();
$route = route('bo.slides.store');
$formData = [
'title' => '1rst Slide',
'text' => 'Super slide content',
'date_start' => Date::now()->format($htmlDateInputFormat),
'date_end' => Date::now()->addDay()->format($htmlDateInputFormat),
'client_timezone' => 'Europe/Paris',
];
// WHEN
$reponse = $this->actingAs($user, 'backend')->post($route, $formData);
// THEN
$reponse->assertRedirect(
route(
'bo.slides.edit',
Slide::query()->latest()->firstOrFail()
)
);
});
it('Can edit a slide', function (): void {
/** @var \Tests\TestCase $this */
// GIVEN
$user = User::factory()->createOne();
$slide = Slide::factory()->createOne();
$route = route('bo.slides.edit', $slide);
// WHEN
$reponse = $this->actingAs($user, 'backend')->get($route);
// THEN
$reponse->assertOk();
});
it('Can update a slide', function (): void {
/** @var \Tests\TestCase $this */
$this->withoutExceptionHandling();
// GIVEN
$user = User::factory()->createOne();
$slide = Slide::factory()->createOne();
$route = route('bo.slides.update', $slide);
$formData = [
'title' => 'Update Slide',
'text' => 'Super slide content updated',
'date_start' => Date::now()->format('Y-m-d\TH:i'),
'date_end' => Date::now()->addDay()->format('Y-m-d\TH:i'),
'client_timezone' => 'Europe/Paris',
];
// WHEN
$reponse = $this->actingAs($user, 'backend')->put($route, $formData);
// THEN
$reponse->assertRedirect(
route('bo.slides.edit', $slide)
);
});
it('Can delete a slide', function (): void {
/** @var \Tests\TestCase $this */
// GIVEN
$user = User::factory()->createOne();
$slide = Slide::factory()->createOne();
$route = route('bo.slides.destroy', $slide);
// WHEN
$reponse = $this->actingAs($user, 'backend')->delete($route);
// THEN
$reponse->assertRedirect(route('bo.slides.index'));
});
it('Can update a slide order', function (): void {
/** @var \Tests\TestCase $this */
// GIVEN
$user = User::factory()->createOne();
$slide = Slide::factory()->createOne();
$slide2 = Slide::factory()->createOne();
$route = route('bo.slides.change-order', [$slide, 'down']);
$fromRoute = route('bo.slides.index');
$slideOrder = $slide->order;
$slide2Order = $slide2->order;
// WHEN
$this->actingAs($user, 'backend')->get($fromRoute); // * First Navigation
$reponse = $this->actingAs($user, 'backend')->patch($route);
$slide->refresh();
$slide2->refresh();
// THEN
$reponse->assertRedirect($fromRoute);
expect($slideOrder)->toBe($slide2->order);
expect($slide2Order)->toBe($slide->order);
});
});