forked from eatvio/eatvio-infra
161 lines
5.0 KiB
PHP
161 lines
5.0 KiB
PHP
<?php
|
|
|
|
namespace Tests\Feature\Plan;
|
|
use Illuminate\Http\UploadedFile;
|
|
use Illuminate\Support\Facades\Storage;
|
|
use Illuminate\Foundation\Testing\RefreshDatabase;
|
|
use Livewire\Livewire;
|
|
use Livewire\Features\SupportFileUploads\TemporaryUploadedFile;
|
|
use App\Models\Recipe;
|
|
use App\Models\User;
|
|
use App\Livewire\Recipe\Edit;
|
|
use Tests\TestCase;
|
|
|
|
class RecipeEditTest extends TestCase
|
|
|
|
{
|
|
use RefreshDatabase;
|
|
|
|
public function can_update_recipe()
|
|
{
|
|
Storage::fake('public');
|
|
$user = User::factory()->create();
|
|
$recipe = Recipe::factory()->create([
|
|
'steps' => [],
|
|
'ingredients' => [],
|
|
]);
|
|
$tag1 = Tag::factory()->create();
|
|
$tag2 = Tag::factory()->create();
|
|
|
|
Livewire::actingAs($user)
|
|
->test('recipe.edit', ['recipe' => $recipe])
|
|
->set('title', 'New Title')
|
|
->set('description', 'New Description')
|
|
->set('cooking_time', '30')
|
|
->set('type', 'Main Dish')
|
|
->set('video_url', 'https://www.youtube.com/watch?v=dQw4w9WgXcQ')
|
|
->set('image', UploadedFile::fake()->image('new_image.jpg'))
|
|
->set('tags', [$tag1->id, $tag2->id])
|
|
->call('addIngredient')
|
|
->set('ingredients_name.0', 'New Ingredient')
|
|
->set('ingredients_portion.0', '100')
|
|
->call('addStep')
|
|
->set('steps.0.description', 'New Step Description')
|
|
->set('steps.0.image', UploadedFile::fake()->image('new_step_image.jpg'))
|
|
->call('publish');
|
|
|
|
$this->assertDatabaseHas('recipes', [
|
|
'title' => 'New Title',
|
|
'description' => 'New Description',
|
|
'cooking_time' => 30,
|
|
'type' => 'Main Dish',
|
|
'video_url' => 'https://www.youtube.com/watch?v=dQw4w9WgXcQ',
|
|
'image' => 'recipes/new_image.jpg',
|
|
'state' => 'active',
|
|
]);
|
|
|
|
$this->assertDatabaseHas('recipe_tag', [
|
|
'recipe_id' => $recipe->id,
|
|
'tag_id' => $tag1->id,
|
|
]);
|
|
$this->assertDatabaseHas('recipe_tag', [
|
|
'recipe_id' => $recipe->id,
|
|
'tag_id' => $tag2->id,
|
|
]);
|
|
|
|
$this->assertDatabaseHas('ingredients', [
|
|
'name' => 'New Ingredient',
|
|
'portion' => '100',
|
|
'unit' => 'gr',
|
|
'recipe_id' => $recipe->id,
|
|
]);
|
|
|
|
Storage::disk('public')->assertExists('recipes/new_image.jpg');
|
|
Storage::disk('public')->assertExists('steps/new_step_image.jpg');
|
|
}
|
|
|
|
public function can_remove_ingredient()
|
|
{
|
|
$user = User::factory()->create();
|
|
$recipe = Recipe::factory()->create([
|
|
'steps' => [],
|
|
'ingredients' => [],
|
|
]);
|
|
$ingredient1 = Ingredient::factory()->create(['recipe_id' => $recipe->id]);
|
|
$ingredient2 = Ingredient::factory()->create(['recipe_id' => $recipe->id]);
|
|
|
|
Livewire::actingAs($user)
|
|
->test('recipe.edit', ['recipe' => $recipe])
|
|
->call('removeIngredient', 0);
|
|
|
|
$this->assertDatabaseMissing('ingredients', [
|
|
'id' => $ingredient1->id,
|
|
]);
|
|
$this->assertDatabaseHas('ingredients', [
|
|
'id' => $ingredient2->id,
|
|
]);
|
|
}
|
|
|
|
public function can_remove_step()
|
|
{
|
|
Storage::fake('public');
|
|
$user = User::factory()->create();
|
|
$recipe = Recipe::factory()->create([
|
|
'steps' => [],
|
|
'ingredients' => [],
|
|
]);
|
|
$step1 = Step::factory()->create(['recipe_id' => $recipe->id]);
|
|
$step2 = Step::factory()->create(['recipe_id' => $recipe->id]);
|
|
|
|
Livewire::actingAs($user)
|
|
->test('recipe.edit', ['recipe' => $recipe])
|
|
->call('removeStep', 0);
|
|
|
|
$this->assertDatabaseMissing('steps', [
|
|
'id' => $step1->id,
|
|
]);
|
|
$this->assertDatabaseHas('steps', [
|
|
'id' => $step2->id,
|
|
]);
|
|
}
|
|
|
|
public function can_add_tag()
|
|
{
|
|
$user = User::factory()->create();
|
|
$recipe = Recipe::factory()->create([
|
|
'steps' => [],
|
|
'ingredients' => [],
|
|
]);
|
|
$tag = Tag::factory()->create();
|
|
|
|
Livewire::actingAs($user)
|
|
->test('recipe.edit', ['recipe' => $recipe])
|
|
->emit('tagAdded', $tag->id);
|
|
|
|
$this->assertDatabaseHas('recipe_tag', [
|
|
'recipe_id' => $recipe->id,
|
|
'tag_id' => $tag->id,
|
|
]);
|
|
}
|
|
|
|
public function can_remove_tag()
|
|
{
|
|
$user = User::factory()->create();
|
|
$recipe = Recipe::factory()->create([
|
|
'steps' => [],
|
|
'ingredients' => [],
|
|
]);
|
|
$tag = Tag::factory()->create();
|
|
$recipe->tags()->attach($tag->id);
|
|
|
|
Livewire::actingAs($user)
|
|
->test('recipe.edit', ['recipe' => $recipe])
|
|
->emit('tagRemoved', $tag->name);
|
|
|
|
$this->assertDatabaseMissing('recipe_tag', [
|
|
'recipe_id' => $recipe->id,
|
|
'tag_id' => $tag->id,
|
|
]);
|
|
}
|
|
}
|