ExamplesWorker
extends AbstractWorker
in package
implements
ExamplesWorkerInterface
Clase para el catálogo de ejemplos de documentos tributarios.
Los ejemplos provienen de los casos de prueba en YAML utilizados por los
tests funcionales del builder de documentos. El archivo de origen mezcla
los datos del documento con la clave Test (valores esperados usados por
la suite de tests para sus aserciones); acá se separan en example
(entrada válida para BuilderWorker::build()) y expected (los valores
esperados), sin exponer el vocabulario Test/ExpectedValues propio de
la suite de tests.
Algunos ejemplos referencian a otro (ej. una Nota de Crédito que anula una
Factura previamente emitida) vía Test.DependsOn en el YAML de origen —
una lista de IDs de otros ejemplos. list() entrega los ejemplos en un
orden donde toda dependencia aparece antes que quien depende de ella, para
que un consumidor que emita los ejemplos secuencialmente (ej. un demo/seed
de una aplicación) siempre pueda resolver esas referencias contra
documentos que ya emitió.
Attributes
- #[Worker]
- $name: 'examples'
- $component: 'document'
- $package: 'billing'
Table of Contents
Interfaces
- ExamplesWorkerInterface
- Interfaz para el catálogo de ejemplos de documentos tributarios.
Constants
- EXTENSION : mixed = '.yaml'
- Extensión de los archivos de ejemplos.
Properties
- $fixturesDir : string
Methods
- __construct() : mixed
- get() : array{id: string, example: array, expected: array}
- Entrega los datos de un ejemplo específico.
- list() : array<int, array{id: string, category: string, case: string}>
- Entrega el listado de ejemplos disponibles.
- sortByDependencies() : array<string|int, string>
- Ordena los IDs de ejemplos de forma que cada uno aparezca después de todos los ejemplos de los que depende (`Test.DependsOn` en el YAML de origen).
- toId() : string
- Determina el identificador de un ejemplo a partir de la ruta de su archivo.
Constants
EXTENSION
Extensión de los archivos de ejemplos.
private
mixed
EXTENSION
= '.yaml'
Properties
$fixturesDir read-only
private
string
$fixturesDir
Methods
__construct()
public
__construct(string $fixturesDir) : mixed
Parameters
- $fixturesDir : string
get()
Entrega los datos de un ejemplo específico.
public
get(string $id) : array{id: string, example: array, expected: array}
Parameters
- $id : string
-
Identificador del ejemplo (ver
list()).
Attributes
- #[Operation]
- $parameters: ['id' => ['example' => '033_factura_afecta/033_001_simple']]
Return values
array{id: string, example: array, expected: array} —Datos del ejemplo.
list()
Entrega el listado de ejemplos disponibles.
public
list() : array<int, array{id: string, category: string, case: string}>
Attributes
- #[Operation]
Return values
array<int, array{id: string, category: string, case: string}>sortByDependencies()
Ordena los IDs de ejemplos de forma que cada uno aparezca después de todos los ejemplos de los que depende (`Test.DependsOn` en el YAML de origen).
private
sortByDependencies(array<string, array<string|int, string>> $dependsOnById) : array<string|int, string>
Recorrido DFS post-order sobre el orden de entrada ($dependsOnById,
ya determinístico por venir de $files ordenado alfabéticamente):
los ejemplos sin dependencias, o cuyas dependencias ya se visitaron,
mantienen ese mismo orden entre sí; solo se reordenan los que
dependen de otro ejemplo que todavía no aparecía.
Parameters
- $dependsOnById : array<string, array<string|int, string>>
-
IDs de ejemplo mapeados a la lista de IDs de los que dependen (posiblemente vacía).
Tags
Return values
array<string|int, string> —IDs en el orden final.
toId()
Determina el identificador de un ejemplo a partir de la ruta de su archivo.
private
toId(string $file) : string
Parameters
- $file : string
-
Ruta absoluta del archivo del ejemplo.
Return values
string —Identificador del ejemplo (ruta relativa sin extensión).