GUÍA DE BASE DE DATOS - HAKALAB FRAMEWORK
==========================================

Esta guía explica cómo realizar testing de bases de datos en tus pruebas automatizadas.

ÍNDICE
======
1. Conexión a Base de Datos
2. Consultas SQL
3. Validación de Datos
4. Transacciones
5. Ejemplos Prácticos

==========================================

1. CONEXIÓN A BASE DE DATOS
===========================

Conectar a Base de Datos:
- me conecto a la base de datos "test_db" con usuario "admin" y contraseña "password123"
- I connect to database "test_db" with user "admin" and password "password123"

Conectar con URL:
- me conecto a la base de datos con URL "postgresql://localhost:5432/test_db"
- I connect to database with URL "postgresql://localhost:5432/test_db"

Desconectar:
- me desconecto de la base de datos
- I disconnect from database

Verificar Conexión:
- verifico que estoy conectado a la base de datos
- I verify that I am connected to database

==========================================

2. CONSULTAS SQL
================

Ejecutar Consulta:
- ejecuto la consulta SQL "SELECT * FROM usuarios WHERE id = 1"
- I execute SQL query "SELECT * FROM usuarios WHERE id = 1"

Obtener Resultado:
- ejecuto la consulta SQL "SELECT * FROM usuarios" y guardo el resultado en la variable "usuarios"
- I execute SQL query "SELECT * FROM usuarios" and store result in variable "usuarios"

Obtener Valor:
- obtengo el valor de la consulta SQL "SELECT email FROM usuarios WHERE id = 1" y lo guardo en la variable "email"
- I get value from SQL query "SELECT email FROM usuarios WHERE id = 1" and store in variable "email"

Contar Registros:
- cuento los registros de la consulta SQL "SELECT COUNT(*) FROM usuarios" y lo guardo en la variable "total_usuarios"
- I count records from SQL query "SELECT COUNT(*) FROM usuarios" and store in variable "total_usuarios"

Insertar Datos:
- ejecuto la consulta SQL "INSERT INTO usuarios (nombre, email) VALUES ('Juan', 'juan@example.com')"
- I execute SQL query "INSERT INTO usuarios (nombre, email) VALUES ('Juan', 'juan@example.com')"

Actualizar Datos:
- ejecuto la consulta SQL "UPDATE usuarios SET email = 'nuevo@example.com' WHERE id = 1"
- I execute SQL query "UPDATE usuarios SET email = 'nuevo@example.com' WHERE id = 1"

Eliminar Datos:
- ejecuto la consulta SQL "DELETE FROM usuarios WHERE id = 1"
- I execute SQL query "DELETE FROM usuarios WHERE id = 1"

==========================================

3. VALIDACIÓN DE DATOS
======================

Verificar Existencia:
- verifico que existe un registro en la tabla "usuarios" donde "email" = "test@example.com"
- I verify that record exists in table "usuarios" where "email" = "test@example.com"

Verificar Valor:
- verifico que el valor de la columna "nombre" en la tabla "usuarios" donde "id" = 1 es "Juan"
- I verify that value of column "nombre" in table "usuarios" where "id" = 1 is "Juan"

Verificar Cantidad:
- verifico que hay 5 registros en la tabla "usuarios"
- I verify that there are 5 records in table "usuarios"

Verificar Rango:
- verifico que el valor de la columna "edad" en la tabla "usuarios" está entre 18 y 65
- I verify that value of column "edad" in table "usuarios" is between 18 and 65

==========================================

4. TRANSACCIONES
================

Iniciar Transacción:
- inicio una transacción en la base de datos
- I start a transaction in database

Confirmar Transacción:
- confirmo la transacción
- I commit the transaction

Revertir Transacción:
- revierto la transacción
- I rollback the transaction

==========================================

5. EJEMPLOS PRÁCTICOS
=====================

Ejemplo 1: Validar Datos Después de Acción

Feature: Validación de datos en base de datos

  Scenario: Crear usuario y validar en BD
    # Conectar a BD
    Given me conecto a la base de datos "test_db" con usuario "admin" y contraseña "password123"
    
    # Crear usuario en aplicación
    When voy a la url "https://example.com/register"
    And relleno el campo "nombre" con "Juan Pérez" con identificador "#name-input"
    And relleno el campo "email" con "juan@example.com" con identificador "#email-input"
    And hago click en el botón "Registrar" con identificador "#register-btn"
    
    # Validar en BD
    Then verifico que existe un registro en la tabla "usuarios" donde "email" = "juan@example.com"
    And verifico que el valor de la columna "nombre" en la tabla "usuarios" donde "email" = "juan@example.com" es "Juan Pérez"
    
    # Desconectar
    When me desconecto de la base de datos

Ejemplo 2: Transacciones

Feature: Transacciones en base de datos

  Scenario: Realizar transacción
    Given me conecto a la base de datos "test_db" con usuario "admin" y contraseña "password123"
    
    # Iniciar transacción
    When inicio una transacción en la base de datos
    
    # Ejecutar operaciones
    And ejecuto la consulta SQL "INSERT INTO usuarios (nombre, email) VALUES ('Test', 'test@example.com')"
    And ejecuto la consulta SQL "UPDATE usuarios SET activo = true WHERE email = 'test@example.com'"
    
    # Confirmar
    When confirmo la transacción
    
    # Validar
    Then verifico que existe un registro en la tabla "usuarios" donde "email" = "test@example.com"
    
    # Desconectar
    When me desconecto de la base de datos

Ejemplo 3: Consultas Complejas

Feature: Consultas complejas

  Scenario: Ejecutar consultas avanzadas
    Given me conecto a la base de datos "test_db" con usuario "admin" y contraseña "password123"
    
    # Contar registros
    When cuento los registros de la consulta SQL "SELECT COUNT(*) FROM usuarios WHERE activo = true" y lo guardo en la variable "usuarios_activos"
    
    # Obtener datos
    When ejecuto la consulta SQL "SELECT * FROM usuarios WHERE departamento = 'Desarrollo' ORDER BY salario DESC" y guardo el resultado en la variable "desarrolladores"
    
    # Validar resultado
    Then la variable "usuarios_activos" debería ser mayor que 0
    
    # Desconectar
    When me desconecto de la base de datos

==========================================

CONCLUSIÓN

El testing de base de datos es fundamental para validar la integridad de los datos 
en tus aplicaciones. El framework proporciona herramientas completas para conectar, 
consultar y validar datos en bases de datos.

==========================================
Documento generado automáticamente - Hakalab Framework v1.3.0
Guía de Base de Datos
Fecha: Enero 2026
==========================================
