auditionadmin/tests/Feature/Pages/Admin/UsersIndexTest.php

79 lines
2.2 KiB
PHP

<?php
use App\Models\School;
use App\Models\User;
use Illuminate\Foundation\Testing\RefreshDatabase;
use function Pest\Laravel\actingAs;
use function Pest\Laravel\get;
uses(RefreshDatabase::class);
beforeEach(function () {
$this->adminUser = User::factory()->admin()->create();
$this->nonAdminUser = User::factory()->create();
$this->tabUser = User::factory()->tab()->create();
$this->users = User::factory(3)->create();
$this->schools = [];
foreach ($this->users as $user) {
$school = School::factory()->create();
$user->school_id = $school->id;
$user->save();
}
});
it('only shows for an admin user', function () {
// Act & Assert
$checkRoute = 'admin.users.index';
get(route($checkRoute))->assertRedirect(route('home'));
actingAs($this->adminUser);
get(route($checkRoute))->assertOk();
actingAs($this->nonAdminUser);
get(route($checkRoute))->assertRedirect(route('dashboard'));
});
it('has a new user link', function () {
// Arrange
actingAs($this->adminUser);
// Act & Assert
get(route('admin.users.index'))
->assertOk()
->assertSeeInOrder([
'href=',
route('admin.users.create'),
'New User',
'/a',
]);
});
it('shows user data', function () {
// Arrange
actingAs($this->adminUser);
// Act & Assert
$response = get(route('admin.users.index'));
$response->assertOk();
foreach ($this->users as $user) {
$response->assertSeeInOrder([
$user->full_name(true),
$user->school->name,
$user->email,
$user->cell_phone,
$user->judging_preference,
]);
}
});
it('has an edit link for each user', function () {
// Arrange
actingAs($this->adminUser);
// Act & Assert
$response = get(route('admin.users.index'));
$response->assertOk();
$response->assertSee(route('admin.users.edit', $this->adminUser));
$response->assertSee(route('admin.users.edit', $this->nonAdminUser));
$response->assertSee(route('admin.users.edit', $this->tabUser));
foreach ($this->users as $user) {
$response->assertSee(route('admin.users.edit', $user));
}
});