user = User::factory()->make()->only([ 'name', 'email', 'password' ]); $this->adminUser = User::factory()->create([ 'name' => 'admin', 'email' => 'test@example.com', 'password' => 123456 ]); $this->noAdminUser = User::factory()->create([ 'name' => 'noadmin', 'email' => 'notest@example.com', 'password' => 'no123456' ]); } public function testUsersPage(): void { $response = $this->actingAs($this->adminUser) ->withSession(['banned' => false]) ->get(route('users.index')); $response->assertOk(); } public function testNoAdminNoSeeUsersPage(): void { $response = $this->actingAs($this->noAdminUser) ->withSession(['banned' => false]) ->get(route('users.index')); $response->assertStatus(403); } public function testCreateUserPage(): void { $response = $this->actingAs($this->adminUser) ->withSession(['banned' => false]) ->get(route('users.create')); $response->assertOk(); } public function testNoAdminCreateUserPage(): void { $response = $this->actingAs($this->noAdminUser) ->withSession(['banned' => false]) ->get(route('users.create')); $response->assertStatus(403); } public function testStoreUser(): void { $response = $this->actingAs($this->adminUser) ->withSession(['banned' => false]) ->post(route('users.store', $this->user)); $response->assertRedirect(route('users.index')); $this->assertDatabaseHas('users', $this->user); } public function testNoAdminNoStoreUser(): void { $response = $this->actingAs($this->noAdminUser) ->withSession(['banned' => false]) ->post(route('users.store', $this->user)); $response->assertStatus(403); $this->assertDatabaseMissing('users', $this->user); } public function testEditUserPage(): void { $response = $this->actingAs($this->adminUser) ->withSession(['banned' => false]) ->get(route('users.edit', $this->adminUser)); $response->assertOk(); } public function testNoAdminEditUserPage(): void { $response = $this->actingAs($this->noAdminUser) ->withSession(['banned' => false]) ->get(route('users.edit', $this->noAdminUser)); $response->assertStatus(403); } public function testUpdateUser(): void { $response = $this->actingAs($this->adminUser) ->withSession(['banned' => false]) ->patch(route('users.update', $this->noAdminUser), $this->user); $response->assertRedirect(route('users.index')); $dataWithOutHashPassword = $this->user; unset($dataWithOutHashPassword['password']); $this->assertDatabaseHas('users', $dataWithOutHashPassword); } public function testNoAdminNoUpdateUser(): void { $response = $this->actingAs($this->noAdminUser) ->withSession(['banned' => false]) ->patch(route('users.update', $this->noAdminUser), $this->user); $response->assertStatus(403); $noAdminData = $this->noAdminUser->only(['name', 'email', 'password']); $this->assertDatabaseHas('users', $noAdminData); $this->assertDatabaseMissing('users', $this->user); } }