forked from eatvio/eatvio-infra
233 lines
12 KiB
PHP
233 lines
12 KiB
PHP
<?php
|
|
|
|
namespace Tests\Feature\Plan;
|
|
|
|
use App\Models\Plan;
|
|
use App\Models\User;
|
|
use Illuminate\Foundation\Testing\RefreshDatabase;
|
|
use Illuminate\Http\UploadedFile;
|
|
use Illuminate\Support\Facades\Storage;
|
|
use Livewire\Livewire;
|
|
use Tests\TestCase;
|
|
use App\Livewire\Plan\Edit;
|
|
|
|
class EditTest extends TestCase
|
|
{
|
|
use RefreshDatabase;
|
|
|
|
private $image;
|
|
|
|
private Plan $plan;
|
|
|
|
protected User $user;
|
|
|
|
public function setUp(): void
|
|
{
|
|
$this->refreshApplicationWithLocale('en');
|
|
|
|
Storage::fake('tmp-for-tests');
|
|
$this->image = UploadedFile::fake()->image('plan.png');
|
|
|
|
$this->user = User::factory()->create(['is_consultant' => true]);
|
|
$this->plan = Plan::factory()->create();
|
|
}
|
|
|
|
public function test_show_form_edit_plan()
|
|
{
|
|
$response = $this
|
|
->actingAs($this->user)
|
|
->get(route('plan.edit', $this->plan));
|
|
|
|
$response->assertSuccessful();
|
|
}
|
|
|
|
public function test_publish_new_plan_success(): void
|
|
{
|
|
$this->actingAs($this->user);
|
|
|
|
$updatedPlanBeforeToAddDatabase = Plan::factory()->make();
|
|
|
|
$testCase = Livewire::test(Edit::class, [
|
|
'plan' => $this->plan,
|
|
])
|
|
->set('name', $updatedPlanBeforeToAddDatabase->name)
|
|
->assertSet('name', $updatedPlanBeforeToAddDatabase->name)
|
|
->set('image', $this->image)
|
|
->set('duration', $updatedPlanBeforeToAddDatabase->duration)
|
|
->assertSet('duration', $updatedPlanBeforeToAddDatabase->duration)
|
|
->set('state', $updatedPlanBeforeToAddDatabase->state)
|
|
->assertSet('state', $updatedPlanBeforeToAddDatabase->state)
|
|
->set('type', $updatedPlanBeforeToAddDatabase->type)
|
|
->assertSet('type', $updatedPlanBeforeToAddDatabase->type)
|
|
->set('details', $updatedPlanBeforeToAddDatabase->details)
|
|
->assertSet('details', $updatedPlanBeforeToAddDatabase->details)
|
|
->set('packets_count', $updatedPlanBeforeToAddDatabase->packets_count)
|
|
->assertSet('packets_count', $updatedPlanBeforeToAddDatabase->packets_count)
|
|
->set('packet1_options', $updatedPlanBeforeToAddDatabase->packet1_options)
|
|
->assertSet('packet1_options', $updatedPlanBeforeToAddDatabase->packet1_options)
|
|
->set('packet2_options', $updatedPlanBeforeToAddDatabase->packet2_options)
|
|
->assertSet('packet2_options', $updatedPlanBeforeToAddDatabase->packet2_options)
|
|
->set('packet3_options', $updatedPlanBeforeToAddDatabase->packet3_options)
|
|
->assertSet('packet3_options', $updatedPlanBeforeToAddDatabase->packet3_options)
|
|
->call('publish')
|
|
->assertSuccessful()
|
|
->assertHasNoErrors(['name', 'image', 'duration', 'details', 'packets_count', 'packet1_options', 'packet2_options', 'packet3_options']);
|
|
|
|
$updatedPlanAfterToAddDatabase = Plan::orderByDesc('id')->first();
|
|
|
|
$newPlanUrl = route('plan.show', $updatedPlanAfterToAddDatabase, false);
|
|
|
|
Storage::disk('tmp-for-tests')->assertExists($updatedPlanAfterToAddDatabase->image);
|
|
|
|
|
|
// check data after update recipe
|
|
self::assertEquals($updatedPlanBeforeToAddDatabase->name, $updatedPlanAfterToAddDatabase->name);
|
|
self::assertEquals($updatedPlanBeforeToAddDatabase->duration, $updatedPlanAfterToAddDatabase->duration);
|
|
self::assertEquals($updatedPlanBeforeToAddDatabase->state, $updatedPlanAfterToAddDatabase->state);
|
|
self::assertEquals($updatedPlanBeforeToAddDatabase->type, $updatedPlanAfterToAddDatabase->type);
|
|
self::assertEquals($updatedPlanBeforeToAddDatabase->details, $updatedPlanAfterToAddDatabase->details);
|
|
self::assertEquals($updatedPlanBeforeToAddDatabase->packets_count, $updatedPlanAfterToAddDatabase->packets_count);
|
|
self::assertEquals($updatedPlanBeforeToAddDatabase->packet1_options, $updatedPlanAfterToAddDatabase->packet1_options);
|
|
self::assertEquals($updatedPlanBeforeToAddDatabase->packet2_options, $updatedPlanAfterToAddDatabase->packet2_options);
|
|
self::assertEquals($updatedPlanBeforeToAddDatabase->packet3_options, $updatedPlanAfterToAddDatabase->packet3_options);
|
|
|
|
$testCase->assertRedirect($newPlanUrl);
|
|
|
|
}
|
|
|
|
public function test_to_draft_new_plan_success(): void
|
|
{
|
|
$this->actingAs($this->user);
|
|
|
|
$updatedPlanBeforeToAddDatabase = Plan::factory()->make();
|
|
|
|
$testCase = Livewire::test(Edit::class, [
|
|
'plan' => $this->plan,
|
|
])
|
|
->set('name', $updatedPlanBeforeToAddDatabase->name)
|
|
->assertSet('name', $updatedPlanBeforeToAddDatabase->name)
|
|
->set('image', $this->image)
|
|
->set('duration', $updatedPlanBeforeToAddDatabase->duration)
|
|
->assertSet('duration', $updatedPlanBeforeToAddDatabase->duration)
|
|
->set('state', $updatedPlanBeforeToAddDatabase->state)
|
|
->assertSet('state', $updatedPlanBeforeToAddDatabase->state)
|
|
->set('type', $updatedPlanBeforeToAddDatabase->type)
|
|
->assertSet('type', $updatedPlanBeforeToAddDatabase->type)
|
|
->set('details', $updatedPlanBeforeToAddDatabase->details)
|
|
->assertSet('details', $updatedPlanBeforeToAddDatabase->details)
|
|
->set('packets_count', $updatedPlanBeforeToAddDatabase->packets_count)
|
|
->assertSet('packets_count', $updatedPlanBeforeToAddDatabase->packets_count)
|
|
->set('packet1_options', $updatedPlanBeforeToAddDatabase->packet1_options)
|
|
->assertSet('packet1_options', $updatedPlanBeforeToAddDatabase->packet1_options)
|
|
->set('packet2_options', $updatedPlanBeforeToAddDatabase->packet2_options)
|
|
->assertSet('packet2_options', $updatedPlanBeforeToAddDatabase->packet2_options)
|
|
->set('packet3_options', $updatedPlanBeforeToAddDatabase->packet3_options)
|
|
->assertSet('packet3_options', $updatedPlanBeforeToAddDatabase->packet3_options)
|
|
->call('addToDrafts')
|
|
->assertSuccessful()
|
|
->assertHasNoErrors(['name', 'image', 'duration', 'details', 'packets_count', 'packet1_options', 'packet2_options', 'packet3_options']);
|
|
|
|
$updatedPlanAfterToAddDatabase = Plan::orderByDesc('id')->first();
|
|
|
|
$newPlanUrl = route('plan.show', $updatedPlanAfterToAddDatabase, false);
|
|
|
|
Storage::disk('tmp-for-tests')->assertExists($updatedPlanAfterToAddDatabase->image);
|
|
|
|
// check data after update recipe
|
|
self::assertEquals($updatedPlanBeforeToAddDatabase->name, $updatedPlanAfterToAddDatabase->name);
|
|
self::assertEquals($updatedPlanBeforeToAddDatabase->duration, $updatedPlanAfterToAddDatabase->duration);
|
|
self::assertEquals('draft', $updatedPlanAfterToAddDatabase->state);
|
|
self::assertEquals($updatedPlanBeforeToAddDatabase->type, $updatedPlanAfterToAddDatabase->type);
|
|
self::assertEquals($updatedPlanBeforeToAddDatabase->details, $updatedPlanAfterToAddDatabase->details);
|
|
self::assertEquals($updatedPlanBeforeToAddDatabase->packets_count, $updatedPlanAfterToAddDatabase->packets_count);
|
|
self::assertEquals($updatedPlanBeforeToAddDatabase->packet1_options, $updatedPlanAfterToAddDatabase->packet1_options);
|
|
self::assertEquals($updatedPlanBeforeToAddDatabase->packet2_options, $updatedPlanAfterToAddDatabase->packet2_options);
|
|
self::assertEquals($updatedPlanBeforeToAddDatabase->packet3_options, $updatedPlanAfterToAddDatabase->packet3_options);
|
|
|
|
$testCase->assertRedirect($newPlanUrl);
|
|
}
|
|
|
|
public function test_to_preview_new_plan_success(): void
|
|
{
|
|
$this->actingAs($this->user);
|
|
|
|
$updatedPlanBeforeToAddDatabase = Plan::factory()->make();
|
|
|
|
$testCase = Livewire::test(Edit::class, [
|
|
'plan' => $this->plan,
|
|
])
|
|
->set('name', $updatedPlanBeforeToAddDatabase->name)
|
|
->assertSet('name', $updatedPlanBeforeToAddDatabase->name)
|
|
->set('image', $this->image)
|
|
->set('duration', $updatedPlanBeforeToAddDatabase->duration)
|
|
->assertSet('duration', $updatedPlanBeforeToAddDatabase->duration)
|
|
->set('state', $updatedPlanBeforeToAddDatabase->state)
|
|
->assertSet('state', $updatedPlanBeforeToAddDatabase->state)
|
|
->set('type', $updatedPlanBeforeToAddDatabase->type)
|
|
->assertSet('type', $updatedPlanBeforeToAddDatabase->type)
|
|
->set('details', $updatedPlanBeforeToAddDatabase->details)
|
|
->assertSet('details', $updatedPlanBeforeToAddDatabase->details)
|
|
->set('packets_count', $updatedPlanBeforeToAddDatabase->packets_count)
|
|
->assertSet('packets_count', $updatedPlanBeforeToAddDatabase->packets_count)
|
|
->set('packet1_options', $updatedPlanBeforeToAddDatabase->packet1_options)
|
|
->assertSet('packet1_options', $updatedPlanBeforeToAddDatabase->packet1_options)
|
|
->set('packet2_options', $updatedPlanBeforeToAddDatabase->packet2_options)
|
|
->assertSet('packet2_options', $updatedPlanBeforeToAddDatabase->packet2_options)
|
|
->set('packet3_options', $updatedPlanBeforeToAddDatabase->packet3_options)
|
|
->assertSet('packet3_options', $updatedPlanBeforeToAddDatabase->packet3_options)
|
|
->call('showPreview')
|
|
->assertSuccessful()
|
|
->assertHasNoErrors(['name', 'image', 'duration', 'details', 'packets_count', 'packet1_options', 'packet2_options', 'packet3_options']);
|
|
|
|
$updatedPlanAfterToAddDatabase = Plan::orderByDesc('id')->first();
|
|
|
|
$newPlanUrl = route('plan.show', $updatedPlanAfterToAddDatabase, false);
|
|
|
|
Storage::disk('tmp-for-tests')->assertExists($updatedPlanAfterToAddDatabase->image);
|
|
|
|
// check data after update recipe
|
|
self::assertEquals($updatedPlanBeforeToAddDatabase->name, $updatedPlanAfterToAddDatabase->name);
|
|
self::assertEquals($updatedPlanBeforeToAddDatabase->duration, $updatedPlanAfterToAddDatabase->duration);
|
|
self::assertEquals('unactive', $updatedPlanAfterToAddDatabase->state);
|
|
self::assertEquals($updatedPlanBeforeToAddDatabase->type, $updatedPlanAfterToAddDatabase->type);
|
|
self::assertEquals($updatedPlanBeforeToAddDatabase->details, $updatedPlanAfterToAddDatabase->details);
|
|
self::assertEquals($updatedPlanBeforeToAddDatabase->packets_count, $updatedPlanAfterToAddDatabase->packets_count);
|
|
self::assertEquals($updatedPlanBeforeToAddDatabase->packet1_options, $updatedPlanAfterToAddDatabase->packet1_options);
|
|
self::assertEquals($updatedPlanBeforeToAddDatabase->packet2_options, $updatedPlanAfterToAddDatabase->packet2_options);
|
|
self::assertEquals($updatedPlanBeforeToAddDatabase->packet3_options, $updatedPlanAfterToAddDatabase->packet3_options);
|
|
|
|
$testCase->assertRedirect($newPlanUrl);
|
|
}
|
|
|
|
public function testNothingChange(): void
|
|
{
|
|
$this->actingAs($this->user);
|
|
|
|
$planUpdate = Livewire::test(Edit::class, [
|
|
'plan' => $this->plan,
|
|
])
|
|
->call('publish')
|
|
->assertSuccessful()
|
|
->assertHasNoErrors(['title', 'image', 'state', 'cooking_time', 'ingredients', 'type', 'description', 'steps', 'video_url']);
|
|
|
|
$newPlanUrl = route('plan.show', $this->plan, false);
|
|
|
|
Storage::disk('tmp-for-tests')->assertMissing($planUpdate->image);
|
|
|
|
// check data after update recipe
|
|
self::assertEquals($this->plan->name, $planUpdate->name);
|
|
self::assertEquals($this->plan->duration, $planUpdate->duration);
|
|
self::assertEquals($this->plan->state, $planUpdate->state);
|
|
self::assertEquals($this->plan->type, $planUpdate->type);
|
|
self::assertEquals($this->plan->details, $planUpdate->details);
|
|
self::assertEquals($this->plan->packets_count, $planUpdate->packets_count);
|
|
self::assertIsArray($planUpdate->packet1_options);
|
|
self::assertIsArray($planUpdate->packet2_options);
|
|
self::assertIsArray($planUpdate->packet3_options);
|
|
|
|
$planUpdate->assertRedirect($newPlanUrl);
|
|
}
|
|
|
|
}
|
|
|