Manuales de desarrollo de YeboYebo
Para generar de forma ágil datos de prueba usaremos las clases Mother y MotherApi. Estos clases fabrican objetos con valores por defecto y automatizan la generación de identificadores de registros.
from sistema.libreria.contexts.shared.test.EntityMotherApi import EntityMotherApi
# @class_declaration Oficial */
class Oficial(EntityMotherApi):
_referencia = 0
@classmethod
def default(cls, data={}):
return {
"referencia": cls.get_next_referencia(),
"descripcion": "Artículo de test",
"pvp": 10,
**data
}
@classmethod
def iva_reducido(cls, data={}):
return {
**cls.default(),
"codimpuesto": "RED",
**data
}
@classmethod
def get_next_referencia(cls):
cls._referencia += 1
return str(cls._referencia).zfill(10)
# @class_declaration ArticuloMotherApi */
class ArticuloMotherApi(Oficial):
pass
En este ejemplo vemos que, si no especificamos la referencia del artículo, la clase nos devolverá un autonumérico con ceros a la izquierda.
Podemos usar estas clases para construir modelos de qsa o clases de dominio. En el caso de los MotherApi, contamos además con una función create en la librería T3ST que podemos llamar para crear una entidad en base de datos a través de unos datos generados por un fichero mother.
factura = self.lib.api_create("formfacturascli_api",
FacturaClienteMotherApi.default())
A veces sucede que, por ejemplo, para un fichero de test de facturas de cliente, queremos que cuando llame a FacturaClienteMotherApi.default(), la factura creada se asocie a un determinado cliente, y a un determinado artículo.
De esta forma, a menos que cambie los parámetros de la llamada a la clase mother, sabré cómo serán todas las facturas que creo en los tests del fichero.
Para ello, cada clase MotherApi tiene una propiedad default_id que podemos establecer para indicar qué identificador usar cuando necesitemos una instancia de la entidad asociada al Mother.
En la función carga_estaticos de cada fichero de test, haremos algo similar a esto:
ref_gen_10 = self.lib.api_create("formarticulos_api",
(ArticuloMotherApi.default())
ArticuloMotherApi.default_id = ref_gen_10
Con esto indico que cada vez que un fichero mother necesite en su interior referenciar a un artículo existente por defecto, se el artículo que acabamos de crear.