7d390872c3
- app/Livewire: 34 componentes agrupados en Issues/, Projects/, Phases/, Companies/, Users/, Admin/, Inspections/, Layers/, Media/, Common/ (Client/, Reports/, Forms/, Actions/ ya estaban). Namespaces actualizados. - resources/views/livewire: vistas sueltas movidas a subcarpetas espejo (companies/, users/, phases/, roles/, inspections/, media/, common/); render() actualizado. - Referencias actualizadas sin romper nada: rutas (FQN, nombres de ruta intactos), tags <livewire:...>/@livewire() a alias con punto, y use de los tests. - No tocado: Volt de Breeze (auth/profile/navigation), y el portal cliente (user-nav/client-projects) que ya tenía referencias inconsistentes. Verificado: 69 rutas OK, vistas compilan, suite 69 passing (solo 2 pre-existentes sqlite). autoload regenerado con --ignore-platform-reqs (PHP 8.2). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
88 lines
2.7 KiB
PHP
88 lines
2.7 KiB
PHP
<?php
|
|
|
|
namespace Tests\Feature;
|
|
|
|
use App\Livewire\Issues\IssueManager;
|
|
use App\Livewire\Issues\IssueTable;
|
|
use App\Models\Issue;
|
|
use App\Models\Project;
|
|
use App\Models\User;
|
|
use Illuminate\Foundation\Testing\RefreshDatabase;
|
|
use Livewire\Livewire;
|
|
use Spatie\Permission\Models\Permission;
|
|
use Tests\TestCase;
|
|
|
|
class IssuesTablePageTest extends TestCase
|
|
{
|
|
use RefreshDatabase;
|
|
|
|
private function memberWithIssue(): array
|
|
{
|
|
foreach (['view issues', 'create issues', 'edit issues', 'delete issues'] as $p) {
|
|
Permission::findOrCreate($p);
|
|
}
|
|
|
|
$user = User::factory()->create();
|
|
$user->givePermissionTo(['view issues', 'edit issues', 'delete issues']);
|
|
|
|
$project = Project::create([
|
|
'reference' => 'TBL-1',
|
|
'name' => 'Proyecto Tabla',
|
|
'address' => 'Calle Falsa 123',
|
|
'lat' => 40.0,
|
|
'lng' => -3.0,
|
|
'start_date' => now()->toDateString(),
|
|
'end_date_estimated' => now()->addMonths(6)->toDateString(),
|
|
'status' => 'in_progress',
|
|
'created_by' => $user->id,
|
|
]);
|
|
$project->users()->attach($user->id, ['role_in_project' => 'supervisor']);
|
|
|
|
$issue = Issue::create([
|
|
'project_id' => $project->id,
|
|
'title' => 'Grieta en muro',
|
|
'status' => 'open',
|
|
'priority' => 'high',
|
|
'reported_by' => $user->id,
|
|
]);
|
|
|
|
return [$user, $project, $issue];
|
|
}
|
|
|
|
public function test_issue_manager_renders_stats_and_table(): void
|
|
{
|
|
[$user, $project, $issue] = $this->memberWithIssue();
|
|
|
|
Livewire::actingAs($user)
|
|
->test(IssueManager::class, ['project' => $project])
|
|
->assertOk()
|
|
->assertSee('Incidencias del proyecto')
|
|
->assertSeeLivewire(IssueTable::class);
|
|
}
|
|
|
|
public function test_issue_table_lists_and_resolves_an_issue(): void
|
|
{
|
|
[$user, $project, $issue] = $this->memberWithIssue();
|
|
|
|
Livewire::actingAs($user)
|
|
->test(IssueTable::class, ['projectId' => $project->id])
|
|
->assertOk()
|
|
->assertSee('Grieta en muro')
|
|
->call('resolve', $issue->id);
|
|
|
|
$this->assertEquals('resolved', $issue->fresh()->status);
|
|
}
|
|
|
|
public function test_issue_table_forbidden_for_non_member(): void
|
|
{
|
|
[, $project] = $this->memberWithIssue();
|
|
|
|
$outsider = User::factory()->create();
|
|
$outsider->givePermissionTo('view issues');
|
|
|
|
Livewire::actingAs($outsider)
|
|
->test(IssueTable::class, ['projectId' => $project->id])
|
|
->assertForbidden();
|
|
}
|
|
}
|