forked from eatvio/eatvio-infra
205 lines
8.7 KiB
PHP
205 lines
8.7 KiB
PHP
<?php
|
|
|
|
namespace Tests\Feature\Diet;
|
|
|
|
use App\Models\Diet;
|
|
use App\Models\User;
|
|
use Illuminate\Foundation\Testing\RefreshDatabase;
|
|
use Illuminate\Http\UploadedFile;
|
|
use Illuminate\Support\Facades\Storage;
|
|
use Tests\TestCase;
|
|
use App\Livewire\Diet\Edit;
|
|
use Livewire\Livewire;
|
|
|
|
class EditTest extends TestCase
|
|
{
|
|
use RefreshDatabase;
|
|
|
|
private UploadedFile $image;
|
|
|
|
private Diet $diet;
|
|
|
|
protected User $user;
|
|
|
|
public function setUp(): void
|
|
{
|
|
$this->refreshApplicationWithLocale('en');
|
|
|
|
Storage::fake('tmp-for-tests');
|
|
$this->image = UploadedFile::fake()->image('diet.png');
|
|
|
|
$this->user = User::factory()->create(['is_consultant' => true]);
|
|
$this->diet = Diet::factory()->create();
|
|
}
|
|
|
|
public function test_show_form_edit_diet(): void
|
|
{
|
|
$response = $this
|
|
->actingAs($this->user)
|
|
->get(route('diet.edit', $this->diet));
|
|
|
|
$response->assertSuccessful();
|
|
}
|
|
|
|
public function test_publish_new_diet_success(): void
|
|
{
|
|
$this->actingAs($this->user);
|
|
|
|
$updatedDietBeforeToAddDatabase = Diet::factory()->make();
|
|
|
|
$testCase = Livewire::test(Edit::class, [
|
|
'diet' => $this->diet,
|
|
])
|
|
->set('name', $updatedDietBeforeToAddDatabase->name)
|
|
->assertSet('name', $updatedDietBeforeToAddDatabase->name)
|
|
->set('image', $this->image)
|
|
->set('duration', $updatedDietBeforeToAddDatabase->duration)
|
|
->assertSet('duration', $updatedDietBeforeToAddDatabase->duration)
|
|
->set('state', $updatedDietBeforeToAddDatabase->state)
|
|
->assertSet('state', $updatedDietBeforeToAddDatabase->state)
|
|
->set('type', $updatedDietBeforeToAddDatabase->type)
|
|
->assertSet('type', $updatedDietBeforeToAddDatabase->type)
|
|
->set('details', $updatedDietBeforeToAddDatabase->details)
|
|
->assertSet('details', $updatedDietBeforeToAddDatabase->details)
|
|
->set('daily_schedule', $this->diet->daily_schedule)
|
|
->assertSet('daily_schedule', $this->diet->daily_schedule)
|
|
->call('publish')
|
|
->assertSuccessful()
|
|
->assertHasNoErrors(['name', 'image', 'duration', 'state', 'details', 'daily_schedule', 'type']);
|
|
|
|
$updatedDietAfterToAddDatabase = Diet::orderByDesc('id')->first();
|
|
|
|
$newDietUrl = route('diet.show', $updatedDietAfterToAddDatabase);
|
|
|
|
Storage::disk('tmp-for-tests')->assertExists($updatedDietAfterToAddDatabase->image);
|
|
|
|
|
|
// check data after update recipe
|
|
self::assertEquals($updatedDietBeforeToAddDatabase->name, $updatedDietAfterToAddDatabase->name);
|
|
self::assertEquals($updatedDietBeforeToAddDatabase->duration, $updatedDietAfterToAddDatabase->duration);
|
|
self::assertEquals($updatedDietBeforeToAddDatabase->state, $updatedDietAfterToAddDatabase->state);
|
|
self::assertEquals($updatedDietBeforeToAddDatabase->type, $updatedDietAfterToAddDatabase->type);
|
|
self::assertEquals($updatedDietBeforeToAddDatabase->details, $updatedDietAfterToAddDatabase->details);
|
|
// self::assertEquals($updatedDietBeforeToAddDatabase->daily_schedule, $updatedDietAfterToAddDatabase->daily_schedule);
|
|
|
|
$testCase->assertRedirect($newDietUrl);
|
|
|
|
}
|
|
|
|
public function test_to_draft_new_diet_success(): void
|
|
{
|
|
$this->actingAs($this->user);
|
|
|
|
$updatedDietBeforeToAddDatabase = Diet::factory()->make();
|
|
|
|
$testCase = Livewire::test(Edit::class, [
|
|
'diet' => $this->diet,
|
|
])
|
|
->set('name', $updatedDietBeforeToAddDatabase->name)
|
|
->assertSet('name', $updatedDietBeforeToAddDatabase->name)
|
|
->set('image', $this->image)
|
|
->set('duration', $updatedDietBeforeToAddDatabase->duration)
|
|
->assertSet('duration', $updatedDietBeforeToAddDatabase->duration)
|
|
->set('state', $updatedDietBeforeToAddDatabase->state)
|
|
->assertSet('state', $updatedDietBeforeToAddDatabase->state)
|
|
->set('type', $updatedDietBeforeToAddDatabase->type)
|
|
->assertSet('type', $updatedDietBeforeToAddDatabase->type)
|
|
->set('details', $updatedDietBeforeToAddDatabase->details)
|
|
->assertSet('details', $updatedDietBeforeToAddDatabase->details)
|
|
->set('daily_schedule', $this->diet->daily_schedule)
|
|
->assertSet('daily_schedule', $this->diet->daily_schedule)
|
|
->call('addToDrafts')
|
|
->assertSuccessful()
|
|
->assertHasNoErrors(['name', 'image', 'duration', 'state', 'details', 'days', 'type']);
|
|
|
|
$updatedDietAfterToAddDatabase = Diet::orderByDesc('id')->first();
|
|
|
|
$newDietUrl = route('diet.show', $updatedDietAfterToAddDatabase);
|
|
|
|
Storage::disk('tmp-for-tests')->assertExists($updatedDietAfterToAddDatabase->image);
|
|
|
|
|
|
// check data after update recipe
|
|
self::assertEquals($updatedDietBeforeToAddDatabase->name, $updatedDietAfterToAddDatabase->name);
|
|
self::assertEquals($updatedDietBeforeToAddDatabase->duration, $updatedDietAfterToAddDatabase->duration);
|
|
self::assertEquals('draft', $updatedDietAfterToAddDatabase->state);
|
|
self::assertEquals($updatedDietBeforeToAddDatabase->type, $updatedDietAfterToAddDatabase->type);
|
|
self::assertEquals($updatedDietBeforeToAddDatabase->details, $updatedDietAfterToAddDatabase->details);
|
|
// self::assertEquals($updatedDietBeforeToAddDatabase->daily_schedule, $updatedDietAfterToAddDatabase->daily_schedule);
|
|
|
|
$testCase->assertRedirect($newDietUrl);
|
|
}
|
|
|
|
public function test_to_preview_new_diet_success(): void
|
|
{
|
|
$this->actingAs($this->user);
|
|
|
|
$updatedDietBeforeToAddDatabase = Diet::factory()->make();
|
|
|
|
$testCase = Livewire::test(Edit::class, [
|
|
'diet' => $this->diet,
|
|
])
|
|
->set('name', $updatedDietBeforeToAddDatabase->name)
|
|
->assertSet('name', $updatedDietBeforeToAddDatabase->name)
|
|
->set('image', $this->image)
|
|
->set('duration', $updatedDietBeforeToAddDatabase->duration)
|
|
->assertSet('duration', $updatedDietBeforeToAddDatabase->duration)
|
|
->set('state', $updatedDietBeforeToAddDatabase->state)
|
|
->assertSet('state', $updatedDietBeforeToAddDatabase->state)
|
|
->set('type', $updatedDietBeforeToAddDatabase->type)
|
|
->assertSet('type', $updatedDietBeforeToAddDatabase->type)
|
|
->set('details', $updatedDietBeforeToAddDatabase->details)
|
|
->assertSet('details', $updatedDietBeforeToAddDatabase->details)
|
|
->set('daily_schedule', $this->diet->daily_schedule)
|
|
->assertSet('daily_schedule', $this->diet->daily_schedule)
|
|
->call('showPreview')
|
|
->assertSuccessful()
|
|
->assertHasNoErrors(['name', 'image', 'duration', 'state', 'details', 'days', 'type']);
|
|
|
|
$updatedDietAfterToAddDatabase = Diet::orderByDesc('id')->first();
|
|
|
|
$newDietUrl = route('diet.show', $updatedDietAfterToAddDatabase);
|
|
|
|
Storage::disk('tmp-for-tests')->assertExists($updatedDietAfterToAddDatabase->image);
|
|
|
|
|
|
// check data after update recipe
|
|
self::assertEquals($updatedDietBeforeToAddDatabase->name, $updatedDietAfterToAddDatabase->name);
|
|
self::assertEquals($updatedDietBeforeToAddDatabase->duration, $updatedDietAfterToAddDatabase->duration);
|
|
self::assertEquals('draft', $updatedDietAfterToAddDatabase->state);
|
|
self::assertEquals($updatedDietBeforeToAddDatabase->type, $updatedDietAfterToAddDatabase->type);
|
|
self::assertEquals($updatedDietBeforeToAddDatabase->details, $updatedDietAfterToAddDatabase->details);
|
|
// self::assertEquals($updatedDietBeforeToAddDatabase->daily_schedule, $updatedDietAfterToAddDatabase->daily_schedule);
|
|
|
|
$testCase->assertRedirect($newDietUrl);
|
|
}
|
|
|
|
public function testNothingChange(): void
|
|
{
|
|
$this->actingAs($this->user);
|
|
|
|
$dietUpdate = Livewire::test(Edit::class, [
|
|
'diet' => $this->diet,
|
|
])
|
|
->call('publish')
|
|
->assertSuccessful()
|
|
->assertHasNoErrors(['name', 'image', 'duration', 'state', 'details', 'days', 'type']);
|
|
|
|
$newDietUrl = route('diet.show', $this->diet, false);
|
|
|
|
Storage::disk('tmp-for-tests')->assertMissing($dietUpdate->image);
|
|
|
|
// check data after update recipe
|
|
self::assertEquals($this->diet->name, $dietUpdate->name);
|
|
self::assertEquals($this->diet->duration, $dietUpdate->duration);
|
|
self::assertEquals($this->diet->state, $dietUpdate->state);
|
|
self::assertEquals($this->diet->type, $dietUpdate->type);
|
|
self::assertEquals($this->diet->details, $dietUpdate->details);
|
|
self::assertEquals($this->diet->daily_schedule, $dietUpdate->days);
|
|
|
|
$dietUpdate->assertRedirect($newDietUrl);
|
|
}
|
|
|
|
}
|
|
|