In this last lesson, we will have another test for Quizzes form.
As always we need a factory.
php artisan make:factory QuizFactory
database/factories/QuizFactory.php:
use Illuminate\Support\Str; class QuizFactory extends Factory{    public function definition(): array    {        $title = $this->faker->sentence();        $slug = Str::slug($title);         return [            'title' => $title,            'slug' => $slug,            'description' => fake()->paragraph(),            'published' => false,            'public' => false,        ];    }}
And the feature test.
php artisan make:test Livewire/QuizzesTest
tests/Feature/Livewire/QuizzesTest.php:
use App\Models\User;use App\Models\Quiz;use Livewire\Livewire;use App\Models\Question;use App\Livewire\Quiz\QuizForm;use Illuminate\Foundation\Testing\RefreshDatabase; class QuizzesTest extends TestCase{    use RefreshDatabase;     public function testAdminCanCreateQuiz()    {        $this->actingAs(User::factory()->admin()->create());         Livewire::test(QuizForm::class)            ->set('title', 'quiz title')            ->call('save')            ->assertHasNoErrors(['title', 'slug', 'description', 'published', 'public', 'questions'])            ->assertRedirect(route('quizzes'));         $this->assertDatabaseHas('quizzes', [            'title' => 'quiz title',        ]);    }     public function testTitleIsRequired()    {        $this->actingAs(User::factory()->admin()->create());         Livewire::test(QuizForm::class)            ->set('title', '')            ->call('save')            ->assertHasErrors(['title' => 'required']);    }     public function testAdminCanEditQuiz()    {        $this->actingAs(User::factory()->admin()->create());         $quiz = Quiz::factory()            ->has(Question::factory())            ->create();         Livewire::test(QuizForm::class, [$quiz])            ->set('title', 'new quiz')            ->set('published', true)            ->call('save')            ->assertSet('published', true)            ->assertHasNoErrors(['title', 'slug', 'description', 'published', 'public', 'questions']);         $this->assertDatabaseHas('quizzes', [            'title' => 'new quiz',            'published' => true,        ]);    }}
These tests are very similar to the Questions. For the quiz edit, we also check if setting published to true is correct.
