Files
eatvio-infra/tests/Feature/BlogPost/EditTest.php

223 lines
9.1 KiB
PHP

<?php
namespace Tests\Feature\BlogPost;
use App\Livewire\BlogPost\Edit;
use App\Models\BlogPost;
use App\Models\User;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Illuminate\Http\UploadedFile;
use Illuminate\Support\Facades\Storage;
use Livewire\Livewire;
use Tests\TestCase;
class EditTest extends TestCase
{
use RefreshDatabase;
private UploadedFile $image;
private BlogPost $blogPost;
protected User $user;
public function setUp(): void
{
$this->refreshApplicationWithLocale('en');
Storage::fake('tmp-for-tests');
$this->image = UploadedFile::fake()->image('blogPost.png');
$this->user = User::factory()->create(['is_consultant' => true]);
$this->blogPost = BlogPost::factory()->create();
}
public function test_show_form_edit_blog_post_success_for_author(): void
{
$this->user->author_of_blog_post()->attach($this->blogPost->id);
$response = $this
->actingAs($this->user)
->get(route('blog_post.edit', $this->blogPost));
$response->assertSuccessful();
}
public function test_show_form_edit_blog_post_success_for_admin(): void
{
$blogPost = BlogPost::factory()->create();
$this->user->author_of_blog_post()->attach($blogPost->id);
$response = $this
->actingAs($this->user->assignRole('admin'))
->get(route('blog_post.edit', $blogPost));
$response->assertSuccessful();
}
public function test_show_form_edit_blog_post_success_for_moderator(): void
{
$blogPost = BlogPost::factory()->create();
$this->user->author_of_blog_post()->attach($blogPost->id);
$response = $this
->actingAs($this->user->assignRole('moderator'))
->get(route('blog_post.edit', $blogPost));
$response->assertSuccessful();
}
public function test_show_form_edit_blog_post_forbidden_for_not_author(): void
{
$blogPost = BlogPost::factory()->create();
$user = User::factory()->create();
$this->user->author_of_blog_post()->attach($this->blogPost->id);
$user->author_of_blog_post()->attach($blogPost->id);
$response = $this
->actingAs($this->user)
->get(route('blog_post.edit', $blogPost));
$response->assertForbidden();
}
public function test_publish_new_blogPost_success(): void
{
$this->actingAs($this->user);
$updatedBlogPostBeforeToAddDatabase = BlogPost::factory()->make();
$testCase = Livewire::test(
Edit::class, [
'blogPost' => $this->blogPost,
]
)
->set('title', $updatedBlogPostBeforeToAddDatabase->title)
->assertSet('title', $updatedBlogPostBeforeToAddDatabase->title)
->set('state', $updatedBlogPostBeforeToAddDatabase->state)
->assertSet('state', $updatedBlogPostBeforeToAddDatabase->state)
->set('image', $this->image)
->set('description', $updatedBlogPostBeforeToAddDatabase->description)
->assertSet('description', $updatedBlogPostBeforeToAddDatabase->description)
->set('youtube_url', $updatedBlogPostBeforeToAddDatabase->youtube_url)
->assertSet('youtube_url', $updatedBlogPostBeforeToAddDatabase->youtube_url)
->call('publish')
->assertSuccessful()
->assertHasNoErrors(['title', 'state', 'description', 'youtube_url']);
$updatedBlogPostAfterToAddDatabase = BlogPost::orderByDesc('id')->first();
$newBlogPostUrl = route('blog_post.show', $updatedBlogPostAfterToAddDatabase);
Storage::disk('tmp-for-tests')->assertExists($updatedBlogPostAfterToAddDatabase->image);
// check data after update blog_post
self::assertEquals($updatedBlogPostBeforeToAddDatabase->title, $updatedBlogPostAfterToAddDatabase->title);
self::assertEquals($updatedBlogPostBeforeToAddDatabase->state, $updatedBlogPostAfterToAddDatabase->state);
self::assertEquals($updatedBlogPostBeforeToAddDatabase->description, $updatedBlogPostAfterToAddDatabase->description);
// self::assertEquals($updatedBlogPostBeforeToAddDatabase->youtube_url, $updatedBlogPostAfterToAddDatabase->youtube_url);
$testCase->assertRedirect($newBlogPostUrl);
}
public function test_to_draft_new_blogPost_success(): void
{
$this->actingAs($this->user);
$updatedBlogPostBeforeToAddDatabase = BlogPost::factory()->make();
$testCase = Livewire::test(
Edit::class, [
'blogPost' => $this->blogPost,
]
)
->set('title', $updatedBlogPostBeforeToAddDatabase->title)
->assertSet('title', $updatedBlogPostBeforeToAddDatabase->title)
->set('state', $updatedBlogPostBeforeToAddDatabase->state)
->assertSet('state', $updatedBlogPostBeforeToAddDatabase->state)
->set('image', $this->image)
->set('description', $updatedBlogPostBeforeToAddDatabase->description)
->assertSet('description', $updatedBlogPostBeforeToAddDatabase->description)
->set('youtube_url', $updatedBlogPostBeforeToAddDatabase->youtube_url)
->assertSet('youtube_url', $updatedBlogPostBeforeToAddDatabase->youtube_url)
->call('draft')
->assertSuccessful()
->assertHasNoErrors(['title', 'state', 'description', 'youtube_url']);
$updatedBlogPostAfterToAddDatabase = BlogPost::orderByDesc('id')->first();
$newBlogPostUrl = route('blog_post.show', $updatedBlogPostAfterToAddDatabase);
Storage::disk('tmp-for-tests')->assertExists($updatedBlogPostAfterToAddDatabase->image);
// check data after update blog_post
self::assertEquals($updatedBlogPostBeforeToAddDatabase->title, $updatedBlogPostAfterToAddDatabase->title);
self::assertEquals('archived', $updatedBlogPostAfterToAddDatabase->state);
self::assertEquals($updatedBlogPostBeforeToAddDatabase->description, $updatedBlogPostAfterToAddDatabase->description);
// self::assertEquals($updatedBlogPostBeforeToAddDatabase->youtube_url, $updatedBlogPostAfterToAddDatabase->youtube_url);
$testCase->assertRedirect($newBlogPostUrl);
}
public function test_to_preview_new_blogPost_success(): void
{
$this->actingAs($this->user);
$updatedBlogPostBeforeToAddDatabase = BlogPost::factory()->make();
$testCase = Livewire::test(
Edit::class, [
'blogPost' => $this->blogPost,
]
)
->set('title', $updatedBlogPostBeforeToAddDatabase->title)
->assertSet('title', $updatedBlogPostBeforeToAddDatabase->title)
->set('state', $updatedBlogPostBeforeToAddDatabase->state)
->assertSet('state', $updatedBlogPostBeforeToAddDatabase->state)
->set('image', $this->image)
->set('description', $updatedBlogPostBeforeToAddDatabase->description)
->assertSet('description', $updatedBlogPostBeforeToAddDatabase->description)
->set('youtube_url', $updatedBlogPostBeforeToAddDatabase->youtube_url)
->assertSet('youtube_url', $updatedBlogPostBeforeToAddDatabase->youtube_url)
->call('preview')
->assertSuccessful()
->assertHasNoErrors(['title', 'state', 'description', 'youtube_url']);
$updatedBlogPostAfterToAddDatabase = BlogPost::orderByDesc('id')->first();
$newBlogPostUrl = route('blog_post.show', $updatedBlogPostAfterToAddDatabase);
Storage::disk('tmp-for-tests')->assertExists($updatedBlogPostAfterToAddDatabase->image);
// check data after update blog_post
self::assertEquals($updatedBlogPostBeforeToAddDatabase->title, $updatedBlogPostAfterToAddDatabase->title);
self::assertEquals('archived', $updatedBlogPostAfterToAddDatabase->state);
self::assertEquals($updatedBlogPostBeforeToAddDatabase->description, $updatedBlogPostAfterToAddDatabase->description);
// self::assertEquals($updatedBlogPostBeforeToAddDatabase->youtube_url, $updatedBlogPostAfterToAddDatabase->youtube_url);
$testCase->assertRedirect($newBlogPostUrl);
}
public function testNothingChange(): void
{
$this->actingAs($this->user);
$blogPostUpdate = Livewire::test(
Edit::class, [
'blogPost' => $this->blogPost,
]
)
->call('publish')
->assertSuccessful()
->assertHasNoErrors(['title', 'state', 'description', 'youtube_url']);
$newBlogPostUrl = route('blog_post.show', $this->blogPost, false);
Storage::disk('tmp-for-tests')->assertMissing($blogPostUpdate->image);
// check data after update blog_post
self::assertEquals($this->blogPost->title, $blogPostUpdate->title);
self::assertEquals($this->blogPost->state, $blogPostUpdate->state);
self::assertEquals($this->blogPost->description, $blogPostUpdate->description);
// self::assertEquals($this->blogPost->youtube_url, $blogPostUpdate->youtube_url);
$blogPostUpdate->assertRedirect($newBlogPostUrl);
}
}