create(['role' => UserRole::Owner]); $response = $this->actingAs($owner)->postJson('/api/v1/zones', [ 'name' => 'Гостиная', 'description' => 'Тест', ]); $response->assertCreated(); $response->assertJsonPath('data.name', 'Гостиная'); $this->assertDatabaseHas('zones', ['name' => 'Гостиная', 'user_id' => $owner->id]); } public function test_viewer_cannot_create_zone(): void { $viewer = User::factory()->create(['role' => UserRole::Viewer]); $response = $this->actingAs($viewer)->postJson('/api/v1/zones', ['name' => 'Гостиная']); $response->assertForbidden(); $this->assertDatabaseMissing('zones', ['name' => 'Гостиная']); } public function test_viewer_can_list_zones(): void { $viewer = User::factory()->create(['role' => UserRole::Viewer]); Zone::forceCreate(['user_id' => $viewer->id, 'name' => 'Гроубокс']); $response = $this->actingAs($viewer)->getJson('/api/v1/zones'); $response->assertOk(); $response->assertJsonPath('data.0.name', 'Гроубокс'); } public function test_viewer_cannot_delete_zone(): void { $viewer = User::factory()->create(['role' => UserRole::Viewer]); $zone = Zone::forceCreate(['user_id' => $viewer->id, 'name' => 'Гроубокс']); $response = $this->actingAs($viewer)->deleteJson("/api/v1/zones/{$zone->id}"); $response->assertForbidden(); $this->assertDatabaseHas('zones', ['id' => $zone->id]); } public function test_guest_gets_401(): void { $this->getJson('/api/v1/zones')->assertUnauthorized(); } }