$ref, 'name' => 'Proyecto ' . $ref, 'address' => 'x', 'lat' => 40.0, 'lng' => -3.0, 'start_date' => now()->toDateString(), 'end_date_estimated' => now()->addMonth()->toDateString(), 'status' => 'in_progress', 'created_by' => $member->id, ]); $p->users()->attach($member->id, ['role_in_project' => 'supervisor']); return $p; } public function test_import_templates_from_another_project(): void { $user = User::factory()->create(); $source = $this->project($user, 'SRC'); $target = $this->project($user, 'DST'); $tpl = InspectionTemplate::create([ 'project_id' => $source->id, 'name' => 'Recepción acero', 'fields' => [['name' => 'ok', 'label' => 'OK', 'type' => 'boolean']], ]); // Tabla Rappasoft: lista plantillas de otros proyectos, selección con checkbox. Livewire::actingAs($user) ->test(ImportTemplatesTable::class, ['projectId' => $target->id]) ->assertSee('Recepción acero') ->set('selected', [(string) $tpl->id]) ->call('importSelected') ->assertDispatched('templates-imported'); $this->assertDatabaseHas('inspection_templates', [ 'project_id' => $target->id, 'name' => 'Recepción acero', ]); } public function test_import_table_excludes_target_project_templates(): void { $user = User::factory()->create(); $target = $this->project($user, 'DST2'); InspectionTemplate::create(['project_id' => $target->id, 'name' => 'Propia del destino', 'fields' => []]); Livewire::actingAs($user) ->test(ImportTemplatesTable::class, ['projectId' => $target->id]) ->assertDontSee('Propia del destino'); } public function test_import_template_from_csv(): void { $user = User::factory()->create(); $project = $this->project($user, 'CSV'); $csv = "name,label,type,required,options,min,max,step\n" . "resistencia,Resistencia,integer,1,,,,\n" . "acabado,Acabado,select,0,bueno;regular;malo,,,\n"; $file = UploadedFile::fake()->createWithContent('campos.csv', $csv); Livewire::actingAs($user) ->test(TemplateManager::class, ['project' => $project]) ->call('openImportFileModal') ->set('importTemplateName', 'Plantilla CSV') ->set('importFile', $file) ->call('parseImportFile') ->assertHasNoErrors() ->call('confirmImportFile'); $this->assertDatabaseHas('inspection_templates', [ 'project_id' => $project->id, 'name' => 'Plantilla CSV', ]); $tpl = InspectionTemplate::where('name', 'Plantilla CSV')->first(); $this->assertCount(2, $tpl->fields); } }