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_success_for_author(): void { $plan = $this->plan; $plan->author()->attach($this->user->id); $response = $this ->actingAs($this->user) ->get(route('plan.edit', $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); 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); 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); } }