dishplanner/tests/Pest.php

65 lines
1.4 KiB
PHP
Raw Normal View History

<?php
use App\Models\Planner;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Illuminate\Support\Facades\Hash;
use Pest\Browser\Api\Webpage;
use Tests\BrowserTestCase;
use Tests\TestCase;
uses(TestCase::class)->in('Feature', 'Unit');
uses(BrowserTestCase::class, RefreshDatabase::class)->in('Browser');
// Livewire round-trips can be slower than the default 5s auto-wait budget.
pest()->browser()->timeout(10000);
/**
* Create a planner with a known password for browser logins.
*/
function createPlanner(?string $email = null): Planner
{
return Planner::factory()->create([
'email' => $email ?? fake()->unique()->safeEmail(),
'password' => Hash::make('password'),
]);
}
/**
* Log in as the given planner and navigate to the target page.
*
* @return Webpage
*/
function loginAs(Planner $planner, string $page = '/dashboard')
{
return visit('/login')
->type('input[id="email"]', $planner->email)
->type('input[id="password"]', 'password')
->press('Sign In')
->assertPathIs('/dashboard')
->navigate($page);
}
/**
* @return Webpage
*/
function loginAndGoToDishes()
{
return loginAs(createPlanner(), '/dishes');
}
/**
* @return Webpage
*/
function loginAndGoToUsers()
{
return loginAs(createPlanner(), '/users');
}
/**
* @return Webpage
*/
function loginAndGoToSchedule()
{
return loginAs(createPlanner(), '/schedule');
}