Colecciones y Lógica
Las funciones de colecciones y lógica permiten consultar, inspeccionar y validar listas y mapas en Testform.
Índice de Funciones
Sección titulada «Índice de Funciones»| Función | Firma | Descripción |
|---|---|---|
contains |
contains(list_or_string, val) |
Verifica si una lista o texto contiene un elemento. |
coalesce |
coalesce(...args) |
Retorna el primer valor no nulo ni vacío. |
lookup |
lookup(map, key, [default]) |
Obtiene el valor de una clave en un mapa de forma segura. |
length |
length(value) |
Retorna la cantidad de elementos, caracteres o claves. |
element |
element(list, index) |
Accede al elemento en un índice (con envoltura circular segura). |
slice |
slice(list, start, [end]) |
Retorna una porción de una lista. |
merge |
merge(...maps) |
Combina múltiples mapas en uno solo. |
contains
Sección titulada «contains»Evalúa si una lista contiene el valor buscado o si una subcadena forma parte de una cadena. Es la función estándar por excelencia para validar enums en variables.yml.
variable: environment: type: string validation: condition: "${contains(['dev', 'staging', 'production'], var.environment)}" error_message: "El ambiente debe ser 'dev', 'staging' o 'production'."Uso interactivo:
testform functions --eval "contains(['chrome', 'firefox', 'edge'], 'safari')"# => falsecoalesce
Sección titulada «coalesce»Toma un número arbitrario de argumentos y retorna el primer valor que no sea null, undefined ni cadena vacía "".
locals: # Usa la variable explícita, si no existe toma el entorno, y si tampoco, usa el valor por defecto active_host: "${coalesce(var.custom_host, env('HOST_NAME'), '127.0.0.1')}"testform functions --eval "coalesce(null, '', 'fallback', 'otro')"# => "fallback"Recupera el valor de una clave dentro de un mapa u objeto. Si la clave no existe, retorna el valor por defecto provisto (o genera un error si no se especificó un valor por defecto).
locals: ports_by_env: dev: 3000 staging: 8080 production: 443
active_port: "${lookup(local.ports_by_env, var.environment, 8080)}"Determina el tamaño o longitud según el tipo de dato:
- En una lista: número de elementos.
- En una cadena: número de caracteres.
- En un mapa/objeto: número de propiedades.
variable: password: type: string sensitive: true validation: condition: "${length(var.password) >= 8}" error_message: "La contraseña debe contener al menos 8 caracteres."
target_browsers: type: list(string) validation: condition: "${length(var.target_browsers) > 0}" error_message: "Debe especificar al menos un navegador de destino."element
Sección titulada «element»Retorna el elemento en la posición index de una lista. Si el índice sobrepasa la longitud de la lista, aplica una operación de módulo circular (index % length), evitando excepciones por desbordamiento.
testform functions --eval "element(['a', 'b', 'c'], 1)"# => "b"
testform functions --eval "element(['a', 'b', 'c'], 3)"# => "a" (recorrido circular)Extrae un subconjunto de elementos de una lista entre las posiciones start y end (no inclusivo).
testform functions --eval "slice(['smoke', 'auth', 'checkout', 'reports'], 1, 3)"# => ["auth", "checkout"]Fusiona múltiples mapas u objetos en uno solo. En caso de colisión de claves, los argumentos situados más a la derecha tienen prioridad y sobrescriben a los anteriores.
locals: default_headers: Content-Type: "application/json" Accept: "application/json"
auth_headers: Authorization: "Bearer ${var.api_token}"
all_headers: "${merge(local.default_headers, local.auth_headers)}"