diff --git a/resources/js/Pages/Keys.vue b/resources/js/Pages/Keys.vue index f8b3807..647c2e0 100644 --- a/resources/js/Pages/Keys.vue +++ b/resources/js/Pages/Keys.vue @@ -27,7 +27,7 @@ scope="col" class="py-3 px-4 text-xs font-semibold tracking-wider text-left text-gray-500 uppercase whitespace-nowrap" > - Nazwa + Klucz count(10)->create(); + $user = User::factory()->create(); + + $this->assertDatabaseCount("keys", 10); + + $this->actingAs($user) + ->get("/keys") + ->assertOk() + ->assertInertia( + fn(Assert $page) => $page + ->component("Keys") + ->has("keys.data", 10), + ); + } + + public function testAdminCanCreateKey(): void + { + $admin = User::factory()->admin()->create(); + + $this->assertDatabaseMissing("keys", [ + "user_id" => $admin->id, + ]); + + $this->actingAs($admin) + ->post("/keys") + ->assertSessionHasNoErrors() + ->assertRedirect(); + + $this->assertDatabaseHas("keys", [ + "user_id" => $admin->id, + ]); + } + + public function testUserCannotCreateKey(): void + { + $user = User::factory()->create(); + + $this->actingAs($user) + ->post("/keys") + ->assertForbidden(); + } + + public function testAdminCanDeleteKey(): void + { + $admin = User::factory()->admin()->create(); + + $key = Key::factory()->create(); + + $this->actingAs($admin) + ->delete("/keys/{$key->id}") + ->assertRedirect(); + } + + public function testUserCanTakeKeyFromAnotherUser(): void + { + $user = User::factory()->create(); + $userWithKey = User::factory()->create(); + + $key = Key::factory()->for($userWithKey)->create(); + + $this->assertDatabaseHas("keys", [ + "id" => $key->id, + "user_id" => $userWithKey->id, + ]); + + $this->actingAs($user) + ->post("/keys/{$key->id}/take") + ->assertRedirect(); + + $this->assertDatabaseHas("keys", [ + "id" => $key->id, + "user_id" => $user->id, + ]); + } + + public function testUserCanGiveTheirKeyToAnotherUser(): void + { + $userWithKey = User::factory()->create(); + $user = User::factory()->create(); + + $key = Key::factory()->for($userWithKey)->create(); + + $this->assertDatabaseHas("keys", [ + "id" => $key->id, + "user_id" => $userWithKey->id, + ]); + + $this->actingAs($userWithKey) + ->post("/keys/{$key->id}/give", [ + "user" => $user->id, + ]) + ->assertSessionhasNoErrors() + ->assertRedirect(); + + $this->assertDatabaseHas("keys", [ + "id" => $key->id, + "user_id" => $user->id, + ]); + } +}