---
name: test_db_setup
kind: function
lang: go
domain: core
version: "1.0.0"
purity: impure
signature: "func TestDBSetup(t *testing.T, schema string) TestDB"
description: "Abre una base de datos SQLite en memoria (:memory:), ejecuta el schema SQL proporcionado y registra t.Cleanup. Retorna TestDB listo para usar en tests."
tags: [testing, database, sqlite, schema, test_helper]
uses_functions: []
uses_types: [test_db_go_core]
returns: [test_db_go_core]
returns_optional: false
error_type: "error_go_core"
imports: ["database/sql", "testing", "github.com/mattn/go-sqlite3"]
params:
  - name: t
    desc: "testing.T del test actual; usado para registrar Cleanup y llamar t.Fatalf en errores"
  - name: schema
    desc: "sentencias SQL DDL para crear tablas e indices; string vacio omite la inicializacion"
output: "TestDB con DB abierto apuntando a SQLite :memory:, Path=\":memory:\" y funcion Cleanup que cierra la conexion"
tested: true
tests:
  - "DB en memoria creado sin schema esta disponible"
  - "schema se ejecuta correctamente al crear el DB"
  - "schema invalido llama t.Fatalf"
test_file_path: "functions/core/test_db_setup_test.go"
file_path: "functions/core/test_db_setup.go"
---

## Ejemplo

```go
tdb := TestDBSetup(t, `
    CREATE TABLE users (
        id   INTEGER PRIMARY KEY,
        name TEXT NOT NULL
    );
`)
// tdb.DB esta listo para INSERT/SELECT
// tdb.Cleanup() cierra la conexion (se llama automaticamente via t.Cleanup)
```

## Notas

Funcion impura — abre una conexion de red/archivo (aunque sea :memory:).
Usa github.com/mattn/go-sqlite3 con driver "sqlite3".
Si el schema falla, cierra el DB antes de llamar t.Fatalf para evitar leaks.
