feature test su institution
This commit is contained in:
110
backend/tests/Feature/InstitutionCategoryControllerTest.php
Normal file
110
backend/tests/Feature/InstitutionCategoryControllerTest.php
Normal file
@@ -0,0 +1,110 @@
|
||||
<?php
|
||||
|
||||
namespace Tests\Feature;
|
||||
|
||||
use App\Models\Institution;
|
||||
use App\Models\Lists\InstitutionCategory;
|
||||
use Illuminate\Foundation\Testing\RefreshDatabase;
|
||||
use Tests\TestCase;
|
||||
|
||||
class InstitutionCategoryControllerTest extends TestCase
|
||||
{
|
||||
use RefreshDatabase;
|
||||
|
||||
// --- Lettura (tier.app) --------------------------------------------------
|
||||
|
||||
public function test_index_lists_categories(): void
|
||||
{
|
||||
$this->actingAs($this->operationalUser(), 'sanctum');
|
||||
InstitutionCategory::factory()->count(2)->create();
|
||||
|
||||
$this->getJson('/api/institution-categories')
|
||||
->assertOk()
|
||||
->assertJsonStructure(['message', 'data' => [['id', 'value']]])
|
||||
->assertJsonCount(2, 'data');
|
||||
}
|
||||
|
||||
public function test_show_returns_a_single_category(): void
|
||||
{
|
||||
$this->actingAs($this->operationalUser(), 'sanctum');
|
||||
$category = InstitutionCategory::factory()->create();
|
||||
|
||||
$this->getJson("/api/institution-categories/{$category->id}")
|
||||
->assertOk()
|
||||
->assertJsonPath('data.id', $category->id);
|
||||
}
|
||||
|
||||
public function test_usage_reflects_whether_the_category_is_used(): void
|
||||
{
|
||||
$this->actingAs($this->operationalUser(), 'sanctum');
|
||||
$free = InstitutionCategory::factory()->create();
|
||||
$used = InstitutionCategory::factory()->create();
|
||||
Institution::factory()->create(['category_id' => $used->id]);
|
||||
|
||||
$this->getJson("/api/institution-categories/{$free->id}/usage")->assertJsonPath('in_use', false);
|
||||
$this->getJson("/api/institution-categories/{$used->id}/usage")->assertJsonPath('in_use', true);
|
||||
}
|
||||
|
||||
// --- Scrittura (tier.admin) ---------------------------------------------
|
||||
|
||||
public function test_admin_can_create_a_category(): void
|
||||
{
|
||||
$this->actingAs($this->adminUser(), 'sanctum');
|
||||
|
||||
$this->postJson('/api/institution-categories', ['value' => 'gallery'])
|
||||
->assertCreated()
|
||||
->assertJsonPath('data.value', 'gallery');
|
||||
|
||||
$this->assertDatabaseHas('institution_categories', ['value' => 'gallery']);
|
||||
}
|
||||
|
||||
public function test_create_rejects_a_duplicate_value(): void
|
||||
{
|
||||
$this->actingAs($this->adminUser(), 'sanctum');
|
||||
InstitutionCategory::factory()->create(['value' => 'gallery']);
|
||||
|
||||
$this->postJson('/api/institution-categories', ['value' => 'gallery'])
|
||||
->assertStatus(422)
|
||||
->assertJsonValidationErrors('value');
|
||||
}
|
||||
|
||||
public function test_admin_can_update_a_category(): void
|
||||
{
|
||||
$this->actingAs($this->adminUser(), 'sanctum');
|
||||
$category = InstitutionCategory::factory()->create();
|
||||
|
||||
$this->putJson("/api/institution-categories/{$category->id}", ['value' => 'archive'])
|
||||
->assertOk()
|
||||
->assertJsonPath('data.value', 'archive');
|
||||
}
|
||||
|
||||
public function test_cannot_delete_a_category_in_use(): void
|
||||
{
|
||||
$this->actingAs($this->adminUser(), 'sanctum');
|
||||
$category = InstitutionCategory::factory()->create();
|
||||
Institution::factory()->create(['category_id' => $category->id]);
|
||||
|
||||
$this->deleteJson("/api/institution-categories/{$category->id}")
|
||||
->assertStatus(409)
|
||||
->assertJsonPath('in_use', true);
|
||||
|
||||
$this->assertDatabaseHas('institution_categories', ['id' => $category->id]);
|
||||
}
|
||||
|
||||
public function test_admin_can_delete_a_free_category(): void
|
||||
{
|
||||
$this->actingAs($this->adminUser(), 'sanctum');
|
||||
$category = InstitutionCategory::factory()->create();
|
||||
|
||||
$this->deleteJson("/api/institution-categories/{$category->id}")->assertOk();
|
||||
|
||||
$this->assertDatabaseMissing('institution_categories', ['id' => $category->id]);
|
||||
}
|
||||
|
||||
public function test_a_non_admin_cannot_write(): void
|
||||
{
|
||||
$this->actingAs($this->operationalUser(), 'sanctum');
|
||||
|
||||
$this->postJson('/api/institution-categories', ['value' => 'x'])->assertForbidden();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user