Targ Apps Docs

Testing

Suite unitaria de Targ-Apps-Finance, plugin Chroma-t2t y comprobaciones de persistencia en dev.

Targ-Apps-Finance mantiene la lógica crítica en módulos puros bajo logic/. Los tests viven en test/ (espejo de logic/ y src/components/). La suite corre con node --test (sin navegador) y el plugin chroma-t2t (@chroma/t2t) expone utilidades equivalentes en dev sobre Chroma.

Suite Node (npm test)

Desde la raíz del proyecto:

cd Targ-Apps-Finance
npm test

También vía el bridge del plugin:

npm run test:plugin
# equivalente a:
node plugins/chroma-t2t/node/run-tests.mjs

Módulos cubiertos

ÁreaArchivo de test
Persistencia / Chroma-Fstest/logic/persist.test.js
Auth local (perfil + sesión)test/logic/auth.test.js
Onboarding (cuenta financiera)test/logic/onboarding.test.js
Ajustes (settings.js)test/logic/settings.test.js
Exportacióntest/logic/export.test.js
Importación + round-triptest/logic/import.test.js
Recurrenciatest/logic/recurrence.test.js
Reportes / gráficostest/logic/reportCalculations.test.js
Integración E2Etest/logic/integration.test.js
Formato multi-monedatest/logic/utils/currency.test.js
Cuentastest/logic/store/accountDomain.test.js
Defaults de cuentatest/logic/store/accountDefaults.test.js
Ledger / balancestest/logic/store/ledger.test.js
Transaccionestest/logic/store/transactions.test.js
Filtrostest/logic/utils/filterTransactions.test.js
Select (utilidades)test/components/Select.test.js
DatePicker (utilidades)test/components/DatePicker.test.js

Los tests de import/export validan que un backup JSON exportado se reimporta sin pérdida y que payloads inválidos se rechazan antes de sobrescribir el snapshot.

Lógica de export/import

MóduloRol
logic/export.jsbuildExportPayload(), serializeExportPayload() — sin DOM
logic/import.jsparseImportText(), validateImportPayload(), applyImportPayload()
logic/persistence/exportImport.jsDescarga de archivo e importData(file) en la UI
logic/format.jsRe-export de formatCurrency y COMMON_CURRENCIES

La UI en pages/Settings.js pide confirmación explícita antes de importar y refresca el store con finance.refreshFromStorage() tras un import válido.

Plugin chroma-t2t

Fuente canónica: Chroma-t2t/ (workspace root, paquete @chroma/t2t).

Copia vendoreada para dev: Targ-Apps-Finance/plugins/chroma-t2t/ — mismo patrón que plugins/chroma-fs/ (build/código copiado desde el repo del plugin, no symlink).

Registrado en chroma.json:

"plugins": ["chroma-fs", "chroma-t2t"]

Arranque en dev

En localhost (o con ?test=1 en la URL), src/main.js carga plugins/loader.js y ejecuta el hook bootstrapT2t del plugin. El API queda en:

globalThis.__chromaT2t

plugins/loader.js resuelve rutas de forma distinta según el mecanismo: fetch() usa la raíz del documento (./plugins/<name>/chroma.plugin.json), mientras que import() usa import.meta.url del propio loader (plugins/<name>/index.js como hermano del archivo). Esto evita el prefijo duplicado plugins/plugins/ que aparecía al mezclar ambas resoluciones.

Los plugins vendoreados viven en plugins/chroma-fs/ (build de Chroma-Fs, sin chroma.plugin.json — ruta legacy) y plugins/chroma-t2t/ (con manifest + wiring Finance en finance.js).

API expuesta

MétodoDescripción
smokeFinanceSnapshot()Comprueba que transactions, categories, accounts y budgets son arrays en el snapshot actual
smokeSnapshot(snapshot?)Variante genérica sobre las mismas colecciones
assertPersistRoundTrip()Escribe cuentas/settings, exporta JSON, reinicia cache y reimporta; falla si hay pérdida
runAll()Ejecuta smoke + round-trip en secuencia
desktopSmokeNoteRecordatorio para verificar persistencia tras reiniciar Chroma Desktop
npmTestCommand"npm test" — referencia para la suite Node
npmTestScriptRuta al runner Node del plugin

Ejemplo en consola del navegador (con chroma dev):

await __chromaT2t.runAll()

Smoke en Chroma Desktop (Tauri)

Tras crear una cuenta en develop mode, reiniciá Chroma Desktop y confirmá que los datos persisten. En consola del iframe:

getPersistBackend()              // debe ser "chroma-fs"
__tafPersist.resolveChromaFsConfigPath()
await __chromaT2t.runAll()

Ver Persistence — Web vs Desktop.

Wiring Finance

ArchivoRol
plugins/chroma-t2t/helpers.jsHelpers genéricos @chroma/t2t (copiados desde Chroma-t2t/)
plugins/chroma-t2t/finance.jsAdaptadores persist/export/import de Finance
plugins/chroma-t2t/index.jsbootstrapT2t — expone globalThis.__chromaT2t

plugins/chroma-t2t/chroma.plugin.json declara loadAs: "t2t" y el hook bootstrap: "bootstrapT2t". La lógica de negocio no se duplica: finance.js importa logic/persist.js, logic/export.js y logic/import.js.

Migración desde chroma-test

Antes (chroma-test)Ahora (chroma-t2t)
globalThis.__chromaTestglobalThis.__chromaT2t
plugins/chroma-test/plugins/chroma-t2t/ (+ fuente Chroma-t2t/)
Helpers acoplados a FinanceHelpers genéricos + finance.js
loadAs: "test"loadAs: "t2t"

Ajustes y moneda

  • logic/settings.js — reglas puras: normalizeSettings, validateSettings, defaults (defaultCurrency, locale, weekStartsOn, theme).
  • logic/store/settingsStore.js — persistencia bajo la clave settings del snapshot.
  • logic/utils/currency.js — formatCurrency con Intl.NumberFormat; balances totales agrupados por moneda vía computeTotalBalanceByCurrency en el ledger.

Ver también Persistence para el formato del snapshot y el flujo de backup.

On this page