From 7fa2ff03fad788ddc8f7f5f23bc6f61fef4a7095 Mon Sep 17 00:00:00 2001 From: enlineawork Date: Fri, 11 Sep 2026 11:32:10 -0300 Subject: [PATCH] test(android): fijar contrato final de campo y castellano --- .../FinalFieldFlowContractTest.kt | 63 +++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 android-app/app/src/test/java/com/korexlabs/dhinspeccion/FinalFieldFlowContractTest.kt diff --git a/android-app/app/src/test/java/com/korexlabs/dhinspeccion/FinalFieldFlowContractTest.kt b/android-app/app/src/test/java/com/korexlabs/dhinspeccion/FinalFieldFlowContractTest.kt new file mode 100644 index 0000000..988bf04 --- /dev/null +++ b/android-app/app/src/test/java/com/korexlabs/dhinspeccion/FinalFieldFlowContractTest.kt @@ -0,0 +1,63 @@ +package com.korexlabs.dhinspeccion + +import java.io.File +import org.junit.Assert.assertFalse +import org.junit.Assert.assertTrue +import org.junit.Test + +class FinalFieldFlowContractTest { + private val home = File("src/main/java/com/korexlabs/dhinspeccion/ui/MobileHomeScreen.kt").readText() + private val visit = File("src/main/java/com/korexlabs/dhinspeccion/ui/ModernVisitRoot.kt").readText() + private val acts = File("src/main/java/com/korexlabs/dhinspeccion/ui/ModernMobileActsScreen.kt").readText() + private val findings = File("src/main/java/com/korexlabs/dhinspeccion/ui/FieldFindingScreen.kt").readText() + private val viewModel = File("src/main/java/com/korexlabs/dhinspeccion/MainViewModel.kt").readText() + + @Test + fun inspectionIsPlannedInOfficeAndOnlyStartedOnTablet() { + assertTrue(home.contains("Trabajo planificado desde oficina")) + assertFalse(home.contains("MobileInspectionOpenRepository")) + assertFalse(home.contains("Abrir inspección ahora")) + assertTrue(visit.contains("Iniciar inspección")) + } + + @Test + fun findingsAreScopedToInstallationsAndSubinstallations() { + assertTrue(visit.contains("setOf(\"instalacion\", \"subinstalacion\")")) + assertTrue(visit.contains("Elegí una Instalación o Subinstalación")) + assertTrue(visit.contains("Guardar y tomar foto")) + assertTrue(visit.contains("La foto es obligatoria antes de registrar Hallazgos")) + } + + @Test + fun fieldCreationKeepsDashboardIdentityAndTechnicalRequirements() { + assertTrue(visit.contains("Nombre técnico / identificación *")) + assertTrue(visit.contains("El Código DH de campo se genera automáticamente")) + assertTrue(visit.contains("Clasificación técnica")) + assertTrue(visit.contains("description = description")) + assertTrue(visit.contains("discoveryNotes = discoveryNotes")) + assertTrue(viewModel.contains("description = description?.trim()")) + assertTrue(viewModel.contains("discoveryNotes = discoveryNotes?.trim()")) + } + + @Test + fun closingActLeavesItPendingForSignature() { + assertTrue(acts.contains("Cerrar Acta y dejar pendiente de firma")) + assertTrue(acts.contains("Acta pendiente de firma")) + assertTrue(viewModel.contains("Acta cerrada y pendiente de firma")) + assertTrue(acts.contains("Registrar imposibilidad de firma")) + assertTrue(acts.contains("Finalizar Acta firmada")) + } + + @Test + fun activeFieldScreensDoNotExposeKnownEnglishLabels() { + val activeUi = home + visit + acts + findings + assertFalse(activeUi.contains("Text(\"Email\")")) + assertFalse(activeUi.contains("El checklist requiere actualización")) + assertFalse(activeUi.contains("Acta BLOQUEADA")) + assertFalse(activeUi.contains("SELLAR Acta")) + assertFalse(activeUi.contains("Acta SELLADA")) + assertTrue(acts.contains("\"PASSPORT\" -> \"Pasaporte\"")) + assertTrue(acts.contains("\"OTHER\" -> \"Otro\"")) + assertTrue(findings.contains("findingStatusLabel(finding.status)")) + } +}