vito/tests/Feature/API/ProjectsTest.php
2025-05-10 11:10:11 +03:00

90 lines
2.2 KiB
PHP

<?php
namespace Tests\Feature\API;
use App\Models\Project;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Laravel\Sanctum\Sanctum;
use Tests\TestCase;
class ProjectsTest extends TestCase
{
use RefreshDatabase;
public function test_create_project(): void
{
Sanctum::actingAs($this->user, ['read', 'write']);
$this->json('POST', '/api/projects', [
'name' => 'test',
])
->assertSuccessful();
$this->assertDatabaseHas('projects', [
'name' => 'test',
]);
}
public function test_see_projects_list(): void
{
Sanctum::actingAs($this->user, ['read', 'write']);
$project = Project::factory()->create();
$this->user->projects()->attach($project);
$this->json('GET', '/api/projects')
->assertSuccessful()
->assertJsonFragment([
'name' => $project->name,
]);
}
public function test_delete_project(): void
{
Sanctum::actingAs($this->user, ['read', 'write']);
$project = Project::factory()->create();
$this->user->projects()->attach($project);
$this->json('DELETE', '/api/projects/'.$project->id)
->assertSuccessful();
$this->assertDatabaseMissing('projects', [
'id' => $project->id,
]);
}
public function test_edit_project(): void
{
Sanctum::actingAs($this->user, ['read', 'write']);
$project = Project::factory()->create();
$this->user->projects()->attach($project);
$this->json('PUT', "/api/projects/{$project->id}", [
'name' => 'new-name',
])
->assertSuccessful();
$this->assertDatabaseHas('projects', [
'id' => $project->id,
'name' => 'new-name',
]);
}
public function test_cannot_delete_last_project(): void
{
Sanctum::actingAs($this->user, ['read', 'write']);
$this->json('DELETE', "/api/projects/{$this->user->currentProject->id}")
->assertJsonValidationErrorFor('project');
$this->assertDatabaseHas('projects', [
'id' => $this->user->currentProject->id,
]);
}
}