forked from eatvio/eatvio-infra
193 lines
7.6 KiB
PHP
193 lines
7.6 KiB
PHP
<?php declare(strict_types=1);
|
|
|
|
namespace Tests\Feature\Recipe;
|
|
|
|
use App\Livewire\Recipe\Edit;
|
|
use App\Models\Recipe;
|
|
use App\Models\User;
|
|
use Illuminate\Foundation\Testing\RefreshDatabase;
|
|
use Illuminate\Support\Facades\Storage;
|
|
use Livewire\Livewire;
|
|
use Tests\TestCase;
|
|
|
|
/**
|
|
* @internal
|
|
*/
|
|
final class EditTest extends TestCase
|
|
{
|
|
use RefreshDatabase;
|
|
|
|
protected User $user;
|
|
|
|
private Recipe $recipe;
|
|
|
|
public function setUp(): void
|
|
{
|
|
$this->refreshApplicationWithLocale('en');
|
|
|
|
$this->user = User::factory()->create(['is_consultant' => true]);
|
|
|
|
$this->recipe = Recipe::inRandomOrder()->first();
|
|
}
|
|
|
|
public function test_edit_page_recipe_success(): void
|
|
{
|
|
$response = $this
|
|
->actingAs($this->user)
|
|
->get(route('recipe.edit', $this->recipe, false));
|
|
|
|
$response->assertSuccessful();
|
|
}
|
|
|
|
public function testUpdateRecipePublishSuccess(): void
|
|
{
|
|
$this->actingAs($this->user);
|
|
|
|
$recipe = $this->recipe = Recipe::factory()->make();
|
|
|
|
$recipeUpdate = Livewire::test(Edit::class, [
|
|
'recipe' => $this->recipe,
|
|
])
|
|
->set('title', $recipe->title)
|
|
->assertSet('title', $recipe->title)
|
|
->set('image', $recipe->image)
|
|
->set('state', $recipe->state)
|
|
->assertSet('state', $recipe->state)
|
|
->set('cooking_time', $recipe->cooking_time)
|
|
->assertSet('cooking_time', $recipe->cooking_time)
|
|
->set('ingredients', $recipe->ingredients)
|
|
->assertSet('ingredients', $recipe->ingredients)
|
|
->set('type', $recipe->type)
|
|
->assertSet('type', $recipe->type)
|
|
->set('description', $recipe->description)
|
|
->assertSet('description', $recipe->description)
|
|
->set('video_url', $recipe->video_url)
|
|
->assertSet('video_url', $recipe->video_url)
|
|
->call('publish')
|
|
->assertSuccessful()
|
|
->assertHasNoErrors(['title', 'image', 'state', 'cooking_time', 'ingredients', 'type', 'description', 'steps', 'video_url']);
|
|
|
|
Storage::disk('public')->assertExists($this->recipe->image);
|
|
|
|
// check data after update recipe
|
|
self::assertEquals($recipe->title, $recipeUpdate->title);
|
|
self::assertEquals($recipe->image, $recipeUpdate->image);
|
|
self::assertEquals($recipe->state, $recipeUpdate->state);
|
|
self::assertEquals($recipe->cooking_time, $recipeUpdate->cooking_time);
|
|
self::assertEquals($recipe->ingredients, $recipeUpdate->ingredients);
|
|
self::assertEquals($recipe->type, $recipeUpdate->type);
|
|
self::assertEquals($recipe->description, $recipeUpdate->description);
|
|
self::assertEquals($recipe->video_url, $recipeUpdate->video_url);
|
|
}
|
|
|
|
|
|
public function testUpdateRecipeDraftSuccess(): void
|
|
{
|
|
$this->actingAs($this->user);
|
|
|
|
$recipe = $this->recipe = Recipe::factory()->make();
|
|
|
|
$recipeUpdate = Livewire::test(Edit::class, [
|
|
'recipe' => $this->recipe,
|
|
])
|
|
->set('title', $recipe->title)
|
|
->assertSet('title', $recipe->title)
|
|
->set('image', $recipe->image)
|
|
->set('state', $recipe->state)
|
|
->assertSet('state', $recipe->state)
|
|
->set('cooking_time', $recipe->cooking_time)
|
|
->assertSet('cooking_time', $recipe->cooking_time)
|
|
->set('ingredients', $recipe->ingredients)
|
|
->assertSet('ingredients', $recipe->ingredients)
|
|
->set('type', $recipe->type)
|
|
->assertSet('type', $recipe->type)
|
|
->set('description', $recipe->description)
|
|
->assertSet('description', $recipe->description)
|
|
->set('video_url', $recipe->video_url)
|
|
->assertSet('video_url', $recipe->video_url)
|
|
->call('draft')
|
|
->assertSuccessful()
|
|
->assertHasNoErrors(['title', 'image', 'state', 'cooking_time', 'ingredients', 'type', 'description', 'steps', 'video_url']);
|
|
|
|
Storage::disk('public')->assertExists($this->recipe->image);
|
|
|
|
// check data after update recipe
|
|
self::assertEquals($recipe->title, $recipeUpdate->title);
|
|
self::assertEquals($recipe->image, $recipeUpdate->image);
|
|
self::assertEquals('archived', $recipeUpdate->state);
|
|
self::assertEquals($recipe->cooking_time, $recipeUpdate->cooking_time);
|
|
self::assertEquals($recipe->ingredients, $recipeUpdate->ingredients);
|
|
self::assertEquals($recipe->type, $recipeUpdate->type);
|
|
self::assertEquals($recipe->description, $recipeUpdate->description);
|
|
self::assertEquals($recipe->video_url, $recipeUpdate->video_url);
|
|
}
|
|
|
|
|
|
public function testUpdateRecipePreviewSuccess(): void
|
|
{
|
|
$this->actingAs($this->user);
|
|
|
|
$recipe = $this->recipe = Recipe::factory()->make();
|
|
|
|
$recipeUpdate = Livewire::test(Edit::class, [
|
|
'recipe' => $this->recipe,
|
|
])
|
|
->set('title', $recipe->title)
|
|
->assertSet('title', $recipe->title)
|
|
->set('image', $recipe->image)
|
|
->set('state', $recipe->state)
|
|
->assertSet('state', $recipe->state)
|
|
->set('cooking_time', $recipe->cooking_time)
|
|
->assertSet('cooking_time', $recipe->cooking_time)
|
|
->set('ingredients', $recipe->ingredients)
|
|
->assertSet('ingredients', $recipe->ingredients)
|
|
->set('type', $recipe->type)
|
|
->assertSet('type', $recipe->type)
|
|
->set('description', $recipe->description)
|
|
->assertSet('description', $recipe->description)
|
|
->set('video_url', $recipe->video_url)
|
|
->assertSet('video_url', $recipe->video_url)
|
|
->call('preview')
|
|
->assertSuccessful()
|
|
->assertHasNoErrors(['title', 'image', 'state', 'cooking_time', 'ingredients', 'type', 'description', 'steps', 'video_url']);
|
|
|
|
Storage::disk('public')->assertExists($this->recipe->image);
|
|
|
|
// check data after update recipe
|
|
self::assertEquals($recipe->title, $recipeUpdate->title);
|
|
self::assertEquals($recipe->image, $recipeUpdate->image);
|
|
self::assertEquals('archived', $recipeUpdate->state);
|
|
self::assertEquals($recipe->cooking_time, $recipeUpdate->cooking_time);
|
|
self::assertEquals($recipe->ingredients, $recipeUpdate->ingredients);
|
|
self::assertEquals($recipe->type, $recipeUpdate->type);
|
|
self::assertEquals($recipe->description, $recipeUpdate->description);
|
|
self::assertEquals($recipe->video_url, $recipeUpdate->video_url);
|
|
}
|
|
|
|
|
|
public function testNothingChange(): void
|
|
{
|
|
$this->actingAs($this->user);
|
|
|
|
$recipeUpdate = Livewire::test(Edit::class, [
|
|
'recipe' => $this->recipe,
|
|
])
|
|
->call('publish')
|
|
->assertSuccessful()
|
|
->assertHasNoErrors(['title', 'image', 'state', 'cooking_time', 'ingredients', 'type', 'description', 'steps', 'video_url']);
|
|
|
|
Storage::disk('public')->assertExists($this->recipe->image);
|
|
|
|
// check data after update recipe
|
|
self::assertEquals($this->recipe->title, $recipeUpdate->title);
|
|
self::assertEquals($this->recipe->image, $recipeUpdate->image);
|
|
self::assertEquals($this->recipe->state, $recipeUpdate->state);
|
|
self::assertEquals($this->recipe->cooking_time, $recipeUpdate->cooking_time);
|
|
self::assertEquals($this->recipe->ingredients, $recipeUpdate->ingredients);
|
|
self::assertEquals($this->recipe->type, $recipeUpdate->type);
|
|
self::assertEquals($this->recipe->description, $recipeUpdate->description);
|
|
self::assertEquals($this->recipe->video_url, $recipeUpdate->video_url);
|
|
}
|
|
|
|
}
|