Files
util.nix/test/package/migrator/test/sqlite/sqlite-multi-file/run.sh

91 lines
2.6 KiB
Bash

#!/bin/dash
HECTIC_NAMESPACE=test-sqlite-multi-file
log notice "test case: ${WHITE}SQLite multi-file migration layout"
# Create SQLite database
SQLITE_DB="$PWD/test.db"
export DB_URL="sqlite://$SQLITE_DB"
log info "using SQLite database: $SQLITE_DB"
# Initialize migrator
if ! migrator --db-url "$DB_URL" init; then
log error "test failed: ${WHITE}init failed for SQLite"
exit 1
fi
# Apply first migration (up/entrypoint.sql)
if ! migrator --db-url "$DB_URL" migrate up; then
log error "test failed: ${WHITE}first migration failed"
exit 1
fi
# Verify migration was applied
migration_count=$(sqlite3 "$SQLITE_DB" "SELECT COUNT(*) FROM hectic_migration")
if [ "$migration_count" != "1" ]; then
log error "test failed: ${WHITE}expected 1 migration, got $migration_count"
exit 1
fi
# Verify table was created
if ! sqlite3 "$SQLITE_DB" "SELECT COUNT(*) FROM items" >/dev/null 2>&1; then
log error "test failed: ${WHITE}items table not created"
exit 1
fi
log info "first migration applied successfully"
# Apply second migration
if ! migrator --db-url "$DB_URL" migrate up; then
log error "test failed: ${WHITE}second migration failed"
exit 1
fi
# Verify columns were added
if ! sqlite3 "$SQLITE_DB" "SELECT description FROM items LIMIT 0" >/dev/null 2>&1; then
log error "test failed: ${WHITE}description column not added"
exit 1
fi
if ! sqlite3 "$SQLITE_DB" "SELECT price FROM items LIMIT 0" >/dev/null 2>&1; then
log error "test failed: ${WHITE}price column not added"
exit 1
fi
log info "second migration applied successfully"
# Migrate down one step
if ! migrator --db-url "$DB_URL" migrate down; then
log error "test failed: ${WHITE}migrate down failed"
exit 1
fi
# Verify only 1 migration remains
migration_count=$(sqlite3 "$SQLITE_DB" "SELECT COUNT(*) FROM hectic_migration")
if [ "$migration_count" != "1" ]; then
log error "test failed: ${WHITE}expected 1 migration after down, got $migration_count"
exit 1
fi
# Verify columns were removed (table recreated without extra columns)
if sqlite3 "$SQLITE_DB" "SELECT description FROM items LIMIT 0" >/dev/null 2>&1; then
log error "test failed: ${WHITE}description column should be removed"
exit 1
fi
# Migrate down to clean state
if ! migrator --db-url "$DB_URL" migrate down; then
log error "test failed: ${WHITE}second migrate down failed"
exit 1
fi
# Verify items table was dropped
if sqlite3 "$SQLITE_DB" "SELECT COUNT(*) FROM items" >/dev/null 2>&1; then
log error "test failed: ${WHITE}items table should be dropped"
exit 1
fi
log notice "test passed: SQLite multi-file migration layout works correctly"