create(); $org = Organization::create(['name' => 'Test Commune', 'slug' => 'test-commune', 'org_type' => 'client']); $response = $this->actingAs($user)->get(route('organizations.infrastructure.index', $org)); $response->assertOk(); $response->assertSee('Infrastructure'); } public function test_can_create_a_diagram_and_it_opens_in_the_editor(): void { $user = User::factory()->create(); $org = Organization::create(['name' => 'Test Commune', 'slug' => 'test-commune', 'org_type' => 'client']); $this->actingAs($user); Livewire::test('infrastructure.index', ['organization' => $org]) ->set('newDiagramName', 'Schéma réseau - Mairie') ->call('createDiagram') ->assertHasNoErrors(); $this->assertDatabaseHas('documents', [ 'organization_id' => $org->id, 'name' => 'Schéma réseau - Mairie', 'type' => 'diagram', ]); $document = $org->documents()->where('type', 'diagram')->firstOrFail(); $response = $this->get(route('organizations.infrastructure.edit', [$org, $document])); $response->assertOk(); $response->assertSee('Schéma réseau - Mairie'); } public function test_saving_a_diagram_creates_a_new_version_only_when_content_changed(): void { $user = User::factory()->create(); $org = Organization::create(['name' => 'Test Commune', 'slug' => 'test-commune', 'org_type' => 'client']); $document = $org->documents()->create([ 'name' => 'Schéma test', 'type' => 'diagram', 'content' => 'old', 'current_version' => 1, 'created_by' => $user->id, ]); $document->versions()->create(['version' => 1, 'content' => 'old', 'created_by' => $user->id]); $this->actingAs($user); Livewire::test('documents.diagram-editor', ['organization' => $org, 'document' => $document]) ->call('saveDiagram', 'new'); $document->refresh(); $this->assertSame('new', $document->content); $this->assertSame(2, $document->current_version); $this->assertCount(2, $document->versions); } public function test_diagrams_do_not_appear_in_the_documents_browser(): void { $user = User::factory()->create(); $org = Organization::create(['name' => 'Test Commune', 'slug' => 'test-commune', 'org_type' => 'client']); $org->documents()->create([ 'name' => 'Schéma réseau - Mairie', 'type' => 'diagram', 'content' => '', 'current_version' => 1, 'created_by' => $user->id, ]); $org->documents()->create([ 'name' => 'Compte-rendu.md', 'type' => 'markdown', 'content' => '', 'current_version' => 1, 'created_by' => $user->id, ]); $this->actingAs($user); Livewire::test('documents.index', ['organization' => $org]) ->assertDontSee('Schéma réseau - Mairie') ->assertSee('Compte-rendu.md'); } public function test_can_create_a_folder_and_a_diagram_inside_it(): void { $user = User::factory()->create(); $org = Organization::create(['name' => 'Test Commune', 'slug' => 'test-commune', 'org_type' => 'client']); $this->actingAs($user); $component = Livewire::test('infrastructure.index', ['organization' => $org]) ->set('newFolderName', 'Réseau') ->call('createFolder') ->assertHasNoErrors(); $folder = $org->documents()->where('type', 'diagram')->where('is_folder', true)->firstOrFail(); $this->assertSame('Réseau', $folder->name); $component->set('folderId', $folder->id) ->set('newDiagramName', 'Schéma coeur de réseau') ->call('createDiagram') ->assertHasNoErrors(); $diagram = $org->documents()->where('type', 'diagram')->where('name', 'Schéma coeur de réseau')->firstOrFail(); $this->assertSame($folder->id, $diagram->folder_id); // The folder itself must not leak into the general Documents browser. Livewire::test('documents.index', ['organization' => $org])->assertDontSee('Réseau'); } public function test_a_diagram_can_be_associated_with_a_site(): void { $user = User::factory()->create(); $org = Organization::create(['name' => 'Test Commune', 'slug' => 'test-commune', 'org_type' => 'client']); $location = Location::create(['organization_id' => $org->id, 'name' => 'Mairie']); $document = $org->documents()->create([ 'name' => 'Schéma test', 'type' => 'diagram', 'content' => '', 'current_version' => 1, 'created_by' => $user->id, ]); $this->actingAs($user); Livewire::test('documents.diagram-editor', ['organization' => $org, 'document' => $document]) ->call('updateLocation', $location->id) ->assertHasNoErrors(); $this->assertSame($location->id, $document->refresh()->location_id); Livewire::test('infrastructure.index', ['organization' => $org, 'locationId' => $location->id]) ->assertSee('Schéma test'); $otherLocation = Location::create(['organization_id' => $org->id, 'name' => 'Annexe']); Livewire::test('infrastructure.index', ['organization' => $org, 'locationId' => $otherLocation->id]) ->assertDontSee('Schéma test'); } public function test_can_move_a_diagram_into_a_folder_and_back_to_the_root(): void { $user = User::factory()->create(); $org = Organization::create(['name' => 'Test Commune', 'slug' => 'test-commune', 'org_type' => 'client']); $folder = $org->documents()->create(['name' => 'Réseau', 'type' => 'diagram', 'is_folder' => true, 'created_by' => $user->id]); $diagram = $org->documents()->create([ 'name' => 'Schéma test', 'type' => 'diagram', 'content' => '', 'current_version' => 1, 'created_by' => $user->id, ]); $this->actingAs($user); Livewire::test('infrastructure.index', ['organization' => $org]) ->call('moveDocument', $diagram->id, $folder->id); $this->assertSame($folder->id, $diagram->refresh()->folder_id); Livewire::test('infrastructure.index', ['organization' => $org]) ->call('moveDocument', $diagram->id, null); $this->assertNull($diagram->refresh()->folder_id); } public function test_cannot_move_a_folder_into_its_own_descendant(): void { $user = User::factory()->create(); $org = Organization::create(['name' => 'Test Commune', 'slug' => 'test-commune', 'org_type' => 'client']); $parent = $org->documents()->create(['name' => 'Parent', 'type' => 'diagram', 'is_folder' => true, 'created_by' => $user->id]); $child = $org->documents()->create(['name' => 'Enfant', 'type' => 'diagram', 'is_folder' => true, 'folder_id' => $parent->id, 'created_by' => $user->id]); $this->actingAs($user); Livewire::test('infrastructure.index', ['organization' => $org]) ->call('moveDocument', $parent->id, $child->id); $this->assertNull($parent->refresh()->folder_id); } public function test_moving_an_item_is_scoped_to_diagram_type_documents(): void { $user = User::factory()->create(); $org = Organization::create(['name' => 'Test Commune', 'slug' => 'test-commune', 'org_type' => 'client']); $regularFolder = $org->documents()->create(['name' => 'Dossier documents', 'is_folder' => true, 'created_by' => $user->id]); $diagram = $org->documents()->create([ 'name' => 'Schéma test', 'type' => 'diagram', 'content' => '', 'current_version' => 1, 'created_by' => $user->id, ]); $this->actingAs($user); // A plain (non-diagram) folder must not be a valid drop target from Infrastructure. Livewire::test('infrastructure.index', ['organization' => $org]) ->call('moveDocument', $diagram->id, $regularFolder->id); $this->assertNull($diagram->refresh()->folder_id); } }