feat(templates): grupos de campos, pregunta/comentarios por campo y plantillas globales
Builder de plantillas (parte 1 del bloque): - Cada campo admite "Grupo / sección" (título), "Pregunta / revisar" (texto corto, tras la etiqueta) y "Comentarios / ayuda" (texto largo, al final). - Plantillas híbridas: toggle "Global" → project_id null; el listado de un proyecto muestra sus plantillas + las globales (badge "Global"). Tests: TemplateCreationTest (grupo/pregunta/ayuda persisten; global sin proyecto y visible en otros proyectos). Suite 90 passing. Pendiente (parte 2): adaptar el formulario de inspección (grupos, comentarios, fotos) y el visor de inspección. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -56,4 +56,55 @@ class TemplateCreationTest extends TestCase
|
||||
'name' => 'Recepción de hormigón',
|
||||
]);
|
||||
}
|
||||
|
||||
public function test_field_keeps_group_question_and_help(): void
|
||||
{
|
||||
[$user, $project] = $this->setup_();
|
||||
|
||||
Livewire::actingAs($user)
|
||||
->test(TemplateManager::class, ['project' => $project])
|
||||
->call('newTemplate')
|
||||
->set('form.name', 'Con grupos')
|
||||
->call('addField')
|
||||
->set('form.fields.0.group', 'Geometría')
|
||||
->set('form.fields.0.name', 'altura')
|
||||
->set('form.fields.0.label', 'Altura (m)')
|
||||
->set('form.fields.0.question', '¿Cumple la cota?')
|
||||
->set('form.fields.0.help', 'Medir con láser')
|
||||
->call('saveTemplate')
|
||||
->assertHasNoErrors();
|
||||
|
||||
$tpl = \App\Models\InspectionTemplate::where('name', 'Con grupos')->first();
|
||||
$this->assertSame('Geometría', $tpl->fields[0]['group']);
|
||||
$this->assertSame('¿Cumple la cota?', $tpl->fields[0]['question']);
|
||||
$this->assertSame('Medir con láser', $tpl->fields[0]['help']);
|
||||
}
|
||||
|
||||
public function test_global_template_has_no_project_and_shows_in_other_projects(): void
|
||||
{
|
||||
[$user, $project] = $this->setup_();
|
||||
|
||||
Livewire::actingAs($user)
|
||||
->test(TemplateManager::class, ['project' => $project])
|
||||
->call('newTemplate')
|
||||
->set('form.name', 'Plantilla global')
|
||||
->set('form.is_global', true)
|
||||
->call('saveTemplate')
|
||||
->assertHasNoErrors();
|
||||
|
||||
$this->assertDatabaseHas('inspection_templates', [
|
||||
'name' => 'Plantilla global', 'project_id' => null,
|
||||
]);
|
||||
|
||||
// Otro proyecto del mismo usuario ve la plantilla global en su listado
|
||||
$other = \App\Models\Project::create([
|
||||
'reference' => 'OTH', 'name' => 'Otro', 'address' => 'x', 'lat' => 40, 'lng' => -3,
|
||||
'start_date' => now()->toDateString(), 'end_date_estimated' => now()->addMonth()->toDateString(),
|
||||
'status' => 'in_progress', 'created_by' => $user->id,
|
||||
]);
|
||||
|
||||
Livewire::actingAs($user)
|
||||
->test(TemplateManager::class, ['project' => $other])
|
||||
->assertSee('Plantilla global');
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user