From 956239ab7919facacb1d2d930bd21b7197530ea0 Mon Sep 17 00:00:00 2001 From: yukkop Date: Wed, 17 Dec 2025 03:24:59 +0000 Subject: [PATCH] feat(`package`): `migrator`: ! sqlite support --- package/migrator/migrator.sh | 291 +++++++++++++++--- test/package/migrator/README.md | 164 ++++++++++ test/package/migrator/default.nix | 40 ++- .../{lauch.sh => lauch-postgresql.sh} | 5 +- test/package/migrator/lauch-sqlite.sh | 45 +++ .../test/{ => postgresql}/arguments.sh | 0 .../test/{ => postgresql}/create-migration.sh | 0 .../function-generate-word.sh | 0 .../{ => postgresql}/function-index-of.sh | 0 .../20251104192425-add-info-to-profile/up.sql | 0 .../function-migration-list/run.sh | 0 .../init-migrator-with-inherits.sh | 12 - .../test/{ => postgresql}/init-migrator.sh | 0 .../20250101000001-add-name/down.sql | 0 .../migration/20250101000001-add-name/up.sql | 0 .../migrate-already-at-target/run.sh | 0 .../20250101000001-add-user-id/down.sql | 0 .../20250101000001-add-user-id/up.sql | 0 .../20250101000002-add-total/down.sql | 0 .../migration/20250101000002-add-total/up.sql | 0 .../20250101000003-add-status/down.sql | 0 .../20250101000003-add-status/up.sql | 0 .../20250101000004-add-created-at/down.sql | 0 .../20250101000004-add-created-at/up.sql | 0 .../migrate-down-multiple/run.sh | 0 .../20250101000001-add-price/down.sql | 0 .../migration/20250101000001-add-price/up.sql | 0 .../20250101000002-add-description/down.sql | 0 .../20250101000002-add-description/up.sql | 0 .../migrate-down-single/run.sh | 0 .../down.sql | 0 .../up.sql | 0 .../migrate-existing-data-migration/run.sh | 0 .../20250101000001-add-user-bio/down.sql | 0 .../20250101000001-add-user-bio/up.sql | 0 .../20250101000002-add-comments/down.sql | 0 .../20250101000002-add-comments/up.sql | 0 .../migrate-existing-database/run.sh | 0 .../20250101000001-add-test-table/down.sql | 0 .../20250101000001-add-test-table/up.sql | 0 .../migrate-existing-with-conflicts/run.sh | 0 .../20250101000001-add-user-id/down.sql | 0 .../20250101000001-add-user-id/up.sql | 0 .../20250101000002-add-token/down.sql | 0 .../migration/20250101000002-add-token/up.sql | 0 .../20250101000003-add-expires-at/down.sql | 0 .../20250101000003-add-expires-at/up.sql | 0 .../migrate-to-backward/run.sh | 0 .../20250101000001-add-content/down.sql | 0 .../20250101000001-add-content/up.sql | 0 .../20250101000002-add-user-id/down.sql | 0 .../20250101000002-add-user-id/up.sql | 0 .../migrate-to-forward/run.sh | 0 .../20250101000001-add-content/down.sql | 0 .../20250101000001-add-content/up.sql | 0 .../20250101000002-add-author/down.sql | 0 .../20250101000002-add-author/up.sql | 0 .../20250101000003-add-published-at/down.sql | 0 .../20250101000003-add-published-at/up.sql | 0 .../migrate-up-multiple/run.sh | 0 .../20250101000001-add-email/down.sql | 0 .../migration/20250101000001-add-email/up.sql | 0 .../{ => postgresql}/migrate-up-single/run.sh | 0 .../20251004192425-some-changes/placeholder | 0 .../20251004292448-some-changes/down.sql | 0 .../20251004292448-some-changes/up.sql | 0 .../20251104172425-third-migration/up.sql | 0 .../20251104192427-an-other-one/up.sql | 0 .../20251104292469-almoust-last/down.sql | 0 .../20251104292469-almoust-last/up.sql | 0 .../20251204152446-very-last/down.sql | 0 .../migration/20251204152446-very-last/up.sql | 0 .../{ => postgresql}/migrations-list/run.sh | 0 .../test/{ => postgresql}/missing-psql.sh | 0 .../20250101000001-create-users/down.sql | 3 + .../20250101000001-create-users/up.sql | 6 + .../20250101000002-add-email/down.sql | 12 + .../migration/20250101000002-add-email/up.sql | 3 + .../migrator/test/sqlite/sqlite-basic/run.sh | 86 ++++++ 79 files changed, 608 insertions(+), 59 deletions(-) create mode 100644 test/package/migrator/README.md rename test/package/migrator/{lauch.sh => lauch-postgresql.sh} (94%) create mode 100644 test/package/migrator/lauch-sqlite.sh rename test/package/migrator/test/{ => postgresql}/arguments.sh (100%) rename test/package/migrator/test/{ => postgresql}/create-migration.sh (100%) rename test/package/migrator/test/{ => postgresql}/function-generate-word.sh (100%) rename test/package/migrator/test/{ => postgresql}/function-index-of.sh (100%) rename test/package/migrator/test/{ => postgresql}/function-migration-list/migration/20251104192425-add-info-to-profile/up.sql (100%) rename test/package/migrator/test/{ => postgresql}/function-migration-list/run.sh (100%) rename test/package/migrator/test/{ => postgresql}/init-migrator-with-inherits.sh (75%) rename test/package/migrator/test/{ => postgresql}/init-migrator.sh (100%) rename test/package/migrator/test/{ => postgresql}/migrate-already-at-target/migration/20250101000001-add-name/down.sql (100%) rename test/package/migrator/test/{ => postgresql}/migrate-already-at-target/migration/20250101000001-add-name/up.sql (100%) rename test/package/migrator/test/{ => postgresql}/migrate-already-at-target/run.sh (100%) rename test/package/migrator/test/{ => postgresql}/migrate-down-multiple/migration/20250101000001-add-user-id/down.sql (100%) rename test/package/migrator/test/{ => postgresql}/migrate-down-multiple/migration/20250101000001-add-user-id/up.sql (100%) rename test/package/migrator/test/{ => postgresql}/migrate-down-multiple/migration/20250101000002-add-total/down.sql (100%) rename test/package/migrator/test/{ => postgresql}/migrate-down-multiple/migration/20250101000002-add-total/up.sql (100%) rename test/package/migrator/test/{ => postgresql}/migrate-down-multiple/migration/20250101000003-add-status/down.sql (100%) rename test/package/migrator/test/{ => postgresql}/migrate-down-multiple/migration/20250101000003-add-status/up.sql (100%) rename test/package/migrator/test/{ => postgresql}/migrate-down-multiple/migration/20250101000004-add-created-at/down.sql (100%) rename test/package/migrator/test/{ => postgresql}/migrate-down-multiple/migration/20250101000004-add-created-at/up.sql (100%) rename test/package/migrator/test/{ => postgresql}/migrate-down-multiple/run.sh (100%) rename test/package/migrator/test/{ => postgresql}/migrate-down-single/migration/20250101000001-add-price/down.sql (100%) rename test/package/migrator/test/{ => postgresql}/migrate-down-single/migration/20250101000001-add-price/up.sql (100%) rename test/package/migrator/test/{ => postgresql}/migrate-down-single/migration/20250101000002-add-description/down.sql (100%) rename test/package/migrator/test/{ => postgresql}/migrate-down-single/migration/20250101000002-add-description/up.sql (100%) rename test/package/migrator/test/{ => postgresql}/migrate-down-single/run.sh (100%) rename test/package/migrator/test/{ => postgresql}/migrate-existing-data-migration/migration/20250101000001-transform-price-data/down.sql (100%) rename test/package/migrator/test/{ => postgresql}/migrate-existing-data-migration/migration/20250101000001-transform-price-data/up.sql (100%) rename test/package/migrator/test/{ => postgresql}/migrate-existing-data-migration/run.sh (100%) rename test/package/migrator/test/{ => postgresql}/migrate-existing-database/migration/20250101000001-add-user-bio/down.sql (100%) rename test/package/migrator/test/{ => postgresql}/migrate-existing-database/migration/20250101000001-add-user-bio/up.sql (100%) rename test/package/migrator/test/{ => postgresql}/migrate-existing-database/migration/20250101000002-add-comments/down.sql (100%) rename test/package/migrator/test/{ => postgresql}/migrate-existing-database/migration/20250101000002-add-comments/up.sql (100%) rename test/package/migrator/test/{ => postgresql}/migrate-existing-database/run.sh (100%) rename test/package/migrator/test/{ => postgresql}/migrate-existing-with-conflicts/migration/20250101000001-add-test-table/down.sql (100%) rename test/package/migrator/test/{ => postgresql}/migrate-existing-with-conflicts/migration/20250101000001-add-test-table/up.sql (100%) rename test/package/migrator/test/{ => postgresql}/migrate-existing-with-conflicts/run.sh (100%) rename test/package/migrator/test/{ => postgresql}/migrate-to-backward/migration/20250101000001-add-user-id/down.sql (100%) rename test/package/migrator/test/{ => postgresql}/migrate-to-backward/migration/20250101000001-add-user-id/up.sql (100%) rename test/package/migrator/test/{ => postgresql}/migrate-to-backward/migration/20250101000002-add-token/down.sql (100%) rename test/package/migrator/test/{ => postgresql}/migrate-to-backward/migration/20250101000002-add-token/up.sql (100%) rename test/package/migrator/test/{ => postgresql}/migrate-to-backward/migration/20250101000003-add-expires-at/down.sql (100%) rename test/package/migrator/test/{ => postgresql}/migrate-to-backward/migration/20250101000003-add-expires-at/up.sql (100%) rename test/package/migrator/test/{ => postgresql}/migrate-to-backward/run.sh (100%) rename test/package/migrator/test/{ => postgresql}/migrate-to-forward/migration/20250101000001-add-content/down.sql (100%) rename test/package/migrator/test/{ => postgresql}/migrate-to-forward/migration/20250101000001-add-content/up.sql (100%) rename test/package/migrator/test/{ => postgresql}/migrate-to-forward/migration/20250101000002-add-user-id/down.sql (100%) rename test/package/migrator/test/{ => postgresql}/migrate-to-forward/migration/20250101000002-add-user-id/up.sql (100%) rename test/package/migrator/test/{ => postgresql}/migrate-to-forward/run.sh (100%) rename test/package/migrator/test/{ => postgresql}/migrate-up-multiple/migration/20250101000001-add-content/down.sql (100%) rename test/package/migrator/test/{ => postgresql}/migrate-up-multiple/migration/20250101000001-add-content/up.sql (100%) rename test/package/migrator/test/{ => postgresql}/migrate-up-multiple/migration/20250101000002-add-author/down.sql (100%) rename test/package/migrator/test/{ => postgresql}/migrate-up-multiple/migration/20250101000002-add-author/up.sql (100%) rename test/package/migrator/test/{ => postgresql}/migrate-up-multiple/migration/20250101000003-add-published-at/down.sql (100%) rename test/package/migrator/test/{ => postgresql}/migrate-up-multiple/migration/20250101000003-add-published-at/up.sql (100%) rename test/package/migrator/test/{ => postgresql}/migrate-up-multiple/run.sh (100%) rename test/package/migrator/test/{ => postgresql}/migrate-up-single/migration/20250101000001-add-email/down.sql (100%) rename test/package/migrator/test/{ => postgresql}/migrate-up-single/migration/20250101000001-add-email/up.sql (100%) rename test/package/migrator/test/{ => postgresql}/migrate-up-single/run.sh (100%) rename test/package/migrator/test/{ => postgresql}/migrations-list/migration/20251004192425-some-changes/placeholder (100%) rename test/package/migrator/test/{ => postgresql}/migrations-list/migration/20251004292448-some-changes/down.sql (100%) rename test/package/migrator/test/{ => postgresql}/migrations-list/migration/20251004292448-some-changes/up.sql (100%) rename test/package/migrator/test/{ => postgresql}/migrations-list/migration/20251104172425-third-migration/up.sql (100%) rename test/package/migrator/test/{ => postgresql}/migrations-list/migration/20251104192427-an-other-one/up.sql (100%) rename test/package/migrator/test/{ => postgresql}/migrations-list/migration/20251104292469-almoust-last/down.sql (100%) rename test/package/migrator/test/{ => postgresql}/migrations-list/migration/20251104292469-almoust-last/up.sql (100%) rename test/package/migrator/test/{ => postgresql}/migrations-list/migration/20251204152446-very-last/down.sql (100%) rename test/package/migrator/test/{ => postgresql}/migrations-list/migration/20251204152446-very-last/up.sql (100%) rename test/package/migrator/test/{ => postgresql}/migrations-list/run.sh (100%) rename test/package/migrator/test/{ => postgresql}/missing-psql.sh (100%) create mode 100644 test/package/migrator/test/sqlite/sqlite-basic/migration/20250101000001-create-users/down.sql create mode 100644 test/package/migrator/test/sqlite/sqlite-basic/migration/20250101000001-create-users/up.sql create mode 100644 test/package/migrator/test/sqlite/sqlite-basic/migration/20250101000002-add-email/down.sql create mode 100644 test/package/migrator/test/sqlite/sqlite-basic/migration/20250101000002-add-email/up.sql create mode 100644 test/package/migrator/test/sqlite/sqlite-basic/run.sh diff --git a/package/migrator/migrator.sh b/package/migrator/migrator.sh index 52f02c3..0a5b73e 100644 --- a/package/migrator/migrator.sh +++ b/package/migrator/migrator.sh @@ -28,6 +28,105 @@ sha256sum() { cksum --algorithm=sha256 --untagged "$file" | awk '{printf $1}' } +# detect_db_type() +# Returns: "postgresql" or "sqlite" +detect_db_type() { + case "$DB_URL" in + postgresql://*|postgres://*) + printf 'postgresql' + ;; + sqlite://*|*.db|*.sqlite|*.sqlite3) + printf 'sqlite' + ;; + *) + log error "unsupported database URL format: ${WHITE}$DB_URL${NC}" + log error "supported formats: postgresql://... or sqlite://... or *.db" + exit 1 + ;; + esac +} + +# get_sqlite_path() +get_sqlite_path() { + case "$DB_URL" in + sqlite://*) + printf '%s' "$DB_URL" | sed 's|^sqlite://||' + ;; + *) + printf '%s' "$DB_URL" + ;; + esac +} + +# db_exec(sql) +db_exec() { + local sql="$1" + local db_type + db_type=$(detect_db_type) + + case "$db_type" in + postgresql) + local psql_args + psql_args="$(form_psql_args)" + # shellcheck disable=SC2086 + printf '%s' "$sql" | psql $psql_args "$DB_URL" + ;; + sqlite) + local db_path + db_path=$(get_sqlite_path) + printf '%s' "$sql" | sqlite3 "$db_path" + ;; + esac +} + +# db_query(sql) +db_query() { + local sql="$1" + local db_type + db_type=$(detect_db_type) + + case "$db_type" in + postgresql) + psql "$DB_URL" --no-align --tuples-only --quiet --command "$sql" | awk NF + ;; + sqlite) + local db_path + db_path=$(get_sqlite_path) + sqlite3 "$db_path" "$sql" + ;; + esac +} + +# db_exec_file(file_path) +db_exec_file() { + local file_path="$1" + local db_type + db_type=$(detect_db_type) + + case "$db_type" in + postgresql) + local psql_args escaped_path + psql_args="$(form_psql_args)" + escaped_path=$(printf '%s' "$file_path" | sed "s/'/''/g") + # shellcheck disable=SC2086 + psql $psql_args "$DB_URL" </dev/null; then - log error "Required tool (psql) are not installed." - exit 127 -fi +check_db_dependencies() { + [ "${DB_URL+x}" ] || return 0 # Skip if no DB_URL yet + + db_type=$(detect_db_type) + + case "$db_type" in + postgresql) + if ! command -v psql >/dev/null; then + log error "Required tool (psql) is not installed." + log error "PostgreSQL client tools are required for postgresql:// URLs" + exit 127 + fi + ;; + sqlite) + if ! command -v sqlite3 >/dev/null; then + log error "Required tool (sqlite3) is not installed." + log error "SQLite3 client is required for sqlite:// URLs" + exit 127 + fi + ;; + esac +} if ! [ "${AS_LIBRARY+x}" ]; then while [ $# -gt 0 ]; do diff --git a/test/package/migrator/README.md b/test/package/migrator/README.md new file mode 100644 index 0000000..77bce68 --- /dev/null +++ b/test/package/migrator/README.md @@ -0,0 +1,164 @@ +# Migrator Test Suite + +This directory contains comprehensive tests for the database migration tool supporting both PostgreSQL and SQLite. + +## Test Structure + +``` +test/package/migrator/ +├── default.nix # Nix test builder - auto-detects test type +├── lauch.sh # PostgreSQL test launcher +├── lauch-sqlite.sh # SQLite test launcher +├── util.sh # Shared test utilities +└── test/ # Test cases + ├── / # PostgreSQL tests (default) + └── sqlite-/ # SQLite tests (prefix with "sqlite-") +``` + +## Test Types + +### PostgreSQL Tests (Default) + +Any test directory or `.sh` file in `test/` will use PostgreSQL by default: +- Automatic PostgreSQL setup (initdb, pg_ctl, createdb) +- `DATABASE_URL` set to PostgreSQL connection string +- Requires: `pkgs.postgresql` + +**Examples:** +- `migrate-up-single/` +- `migrate-down-multiple/` +- `init-migrator.sh` + +### SQLite Tests + +Tests with names starting with `sqlite-` use SQLite: +- Simple file-based database +- `DATABASE_URL` set to `sqlite:///path/to/test.db` +- Requires: `pkgs.sqlite` + +**Examples:** +- `sqlite-basic/` +- `sqlite-migration-test/` + +## Test Categories + +### Core Functionality +- `init-migrator.sh` - Initialization +- `init-migrator-with-inherits.sh` - PostgreSQL INHERITS feature +- `migrate-up-single/` - Single step up migration +- `migrate-up-multiple/` - Multiple step up migrations +- `migrate-down-single/` - Single step down migration +- `migrate-down-multiple/` - Multiple step down migrations +- `migrate-to-forward/` - Migrate to specific version (forward) +- `migrate-to-backward/` - Migrate to specific version (backward) +- `migrate-already-at-target/` - Edge case: no-op migration + +### Existing Database Support +- `migrate-existing-database/` - Add migrator to production DB +- `migrate-existing-with-conflicts/` - Handle schema conflicts +- `migrate-existing-data-migration/` - Transform existing data + +### SQLite Support +- `sqlite-basic/` - Basic SQLite functionality + +### Helper Functions +- `function-index-of.sh` - Test index_of helper +- `function-migration-list.sh` - Test migration_list helper +- `function-generate-word.sh` - Test word generator + +### Utilities +- `create-migration.sh` - Test migration creation +- `migrations-list/` - Test migration listing +- `arguments.sh` - Test argument parsing + +## Creating New Tests + +### PostgreSQL Test + +```bash +mkdir -p test//migration/- +cat > test//run.sh <<'EOF' +#!/bin/dash +HECTIC_NAMESPACE=test-my-test +log notice "test case: ${WHITE}my test" + +# $DATABASE_URL is automatically set to PostgreSQL +migrator --db-url "$DATABASE_URL" init +# ... your test code ... + +log notice "test passed" +EOF + +# Create up.sql and down.sql migration files +``` + +### SQLite Test + +Same as above, but prefix the directory name with `sqlite-`: + +```bash +mkdir -p test/sqlite-/migration/- +# ... rest is the same +``` + +## Running Tests + +Tests are built and run via Nix: + +```bash +# Run all tests +nix build .#checks.x86_64-linux + +# Run specific test +nix build .#checks.x86_64-linux.migrator-test- + +# Run SQLite tests +nix build .#checks.x86_64-linux.migrator-test-sqlite-basic +``` + +## Test Isolation + +Each test runs in complete isolation: +- **PostgreSQL**: Fresh PostgreSQL cluster per test +- **SQLite**: Fresh database file per test +- Clean working directory +- Independent environment variables + +## Available Test Utilities + +From `util.sh`: +- `columns(table)` - Get column names from table +- `is_number(var)` - Check if variable is numeric + +From test environment: +- `log ` - Logging (trace, debug, info, notice, error) +- `migrator` - The migrator binary under test +- `$DATABASE_URL` - Database connection string (auto-configured) + +## Test Conventions + +1. **Naming**: Use descriptive names with hyphens +2. **Logging**: Use `log` for output, not `echo` +3. **Exit codes**: + - 0 = success + - 1 = test failure + - Other = specific error conditions +4. **Cleanup**: Tests are automatically cleaned up by Nix +5. **Assertions**: Explicit checks with meaningful error messages + +## Database-Specific Notes + +### PostgreSQL +- Full schema support (`hectic.migration`) +- Domains with regex validation +- Triggers and functions +- INHERITS support +- TIMESTAMPTZ support + +### SQLite +- Simple table names (`hectic_migration`) +- CHECK constraints instead of domains +- No triggers needed +- TEXT timestamps with datetime() +- Table recreation for column removal (older SQLite versions) + diff --git a/test/package/migrator/default.nix b/test/package/migrator/default.nix index 8f744b7..2f1709c 100644 --- a/test/package/migrator/default.nix +++ b/test/package/migrator/default.nix @@ -1,37 +1,41 @@ { inputs, self, pkgs, system, ... }: let lib = inputs.nixpkgs.lib; - # turn anything under ./test into a derivation that exposes $out/run.sh - mkTestDrv = name: type: + # turn anything under test directory into a derivation that exposes $out/run.sh + mkTestDrv = folder: name: type: if type == "directory" then pkgs.runCommand "test-${name}" {} '' - if ! [ -f ${./test + "/${name}" + /run.sh} ]; then + if ! [ -f ${"${folder}/${name}/run.sh"} ]; then echo no run.sh in test/${name} exit 1 fi mkdir -p "$out" - cp -r ${./test + "/${name}"}/* "$out/" + cp -r ${"${folder}/${name}"}/* "$out/" chmod +x "$out/run.sh" '' else if lib.hasSuffix ".sh" name then pkgs.runCommand "test-${lib.removeSuffix ".sh" name}" {} '' mkdir -p "$out" - install -Dm755 ${./test + "/${name}"} "$out/run.sh" + install -Dm755 ${"${folder}/${name}"} "$out/run.sh" '' else null; - testDir = builtins.readDir ./test; + testDir = folder: builtins.readDir folder; # attrset: testName -> drv with run.sh - testDrvs = + testDrvs = folder: lib.mapAttrs' (n: v: lib.nameValuePair (lib.removeSuffix ".sh" n) v ) (lib.filterAttrs (_: v: v != null) - (lib.mapAttrs (n: t: mkTestDrv n t) testDir)); + (lib.mapAttrs (n: t: mkTestDrv folder n t) (testDir folder))); + + postgresqlTestDrvs = testDrvs ./test/postgresql; + sqliteTestDrvs = testDrvs ./test/sqlite; migrator = self.packages.${system}.migrator; + mkPgTest = testName: testDrv: pkgs.runCommand "migrator-test-${testName}" { nativeBuildInputs = [ pkgs.coreutils pkgs.gnugrep pkgs.gnused ]; @@ -41,10 +45,26 @@ test=${testDrv} export HECTIC_LOG=trace ${builtins.readFile ./util.sh} - ${builtins.readFile ./lauch.sh} + ${builtins.readFile ./lauch-postgresql.sh} # success marker for Nix # shellcheck disable=SC2154 mkdir -p "$out" ''; -in lib.mapAttrs (name: drv: mkPgTest name drv) testDrvs + + mkSqliteTest = testName: testDrv: pkgs.runCommand "migrator-test-${testName}" + { + nativeBuildInputs = [ pkgs.coreutils pkgs.gnugrep pkgs.gnused ]; + buildInputs = [ pkgs.which migrator pkgs.sqlite ]; + } '' + ${builtins.readFile self.legacyPackages.${system}.helpers.posix-shell.log} + test=${testDrv} + export HECTIC_LOG=trace + ${builtins.readFile ./util.sh} + ${builtins.readFile ./lauch-sqlite.sh} + + # success marker for Nix + # shellcheck disable=SC2154 + mkdir -p "$out" + ''; +in (lib.mapAttrs (name: drv: mkPgTest name drv) postgresqlTestDrvs) // (lib.mapAttrs (name: drv: mkSqliteTest name drv) sqliteTestDrvs) diff --git a/test/package/migrator/lauch.sh b/test/package/migrator/lauch-postgresql.sh similarity index 94% rename from test/package/migrator/lauch.sh rename to test/package/migrator/lauch-postgresql.sh index 640d8c1..d817d9a 100644 --- a/test/package/migrator/lauch.sh +++ b/test/package/migrator/lauch-postgresql.sh @@ -6,13 +6,12 @@ HECTIC_NAMESPACE=test-laucher export HECTIC_LOG=trace +# shellcheck disable=SC2154 test_derivation="$(basename "$test")" test_name="${test_derivation#*-*-}" set -eu -root_dir="$(dirname $0)" - HECTIC_LOG= # save path to pg_ctl in case $PATH will change @@ -65,8 +64,10 @@ log info "run test ${WHITE}${test_name}${NC}" mkdir './test' cp -r "$test"/* './test/' cd './test' +# shellcheck disable=SC1091 . './run.sh' +# shellcheck disable=SC2034 HECTIC_NAMESPACE=test-laucher log info "finish test pipeline" diff --git a/test/package/migrator/lauch-sqlite.sh b/test/package/migrator/lauch-sqlite.sh new file mode 100644 index 0000000..76f254b --- /dev/null +++ b/test/package/migrator/lauch-sqlite.sh @@ -0,0 +1,45 @@ +#!/bin/dash + +# $out - nix derivation output +# $test - test and assertion file + +HECTIC_NAMESPACE=test-laucher +export HECTIC_LOG=trace + +# shellcheck disable=SC2154 +test_derivation="$(basename "$test")" +test_name="${test_derivation#*-*-}" + +set -eu + +HECTIC_LOG= + +log info 'start test pipeline (SQLite)' + +# temp dirs +wd="$PWD" +db_file="$wd/test.db" + +# Set up SQLite database URL +DATABASE_URL="sqlite://$db_file" +export DATABASE_URL + +log info "using SQLite database: $db_file" +log info "run test ${WHITE}${test_name}${NC}" + +# run test +mkdir './test' +cp -r "$test"/* './test/' +cd './test' +# shellcheck disable=SC1091 +. './run.sh' + +# shellcheck disable=SC2034 +HECTIC_NAMESPACE=test-laucher + +log info "finish test pipeline" + +# success marker for Nix +# shellcheck disable=SC2154 +mkdir -p "$out" + diff --git a/test/package/migrator/test/arguments.sh b/test/package/migrator/test/postgresql/arguments.sh similarity index 100% rename from test/package/migrator/test/arguments.sh rename to test/package/migrator/test/postgresql/arguments.sh diff --git a/test/package/migrator/test/create-migration.sh b/test/package/migrator/test/postgresql/create-migration.sh similarity index 100% rename from test/package/migrator/test/create-migration.sh rename to test/package/migrator/test/postgresql/create-migration.sh diff --git a/test/package/migrator/test/function-generate-word.sh b/test/package/migrator/test/postgresql/function-generate-word.sh similarity index 100% rename from test/package/migrator/test/function-generate-word.sh rename to test/package/migrator/test/postgresql/function-generate-word.sh diff --git a/test/package/migrator/test/function-index-of.sh b/test/package/migrator/test/postgresql/function-index-of.sh similarity index 100% rename from test/package/migrator/test/function-index-of.sh rename to test/package/migrator/test/postgresql/function-index-of.sh diff --git a/test/package/migrator/test/function-migration-list/migration/20251104192425-add-info-to-profile/up.sql b/test/package/migrator/test/postgresql/function-migration-list/migration/20251104192425-add-info-to-profile/up.sql similarity index 100% rename from test/package/migrator/test/function-migration-list/migration/20251104192425-add-info-to-profile/up.sql rename to test/package/migrator/test/postgresql/function-migration-list/migration/20251104192425-add-info-to-profile/up.sql diff --git a/test/package/migrator/test/function-migration-list/run.sh b/test/package/migrator/test/postgresql/function-migration-list/run.sh similarity index 100% rename from test/package/migrator/test/function-migration-list/run.sh rename to test/package/migrator/test/postgresql/function-migration-list/run.sh diff --git a/test/package/migrator/test/init-migrator-with-inherits.sh b/test/package/migrator/test/postgresql/init-migrator-with-inherits.sh similarity index 75% rename from test/package/migrator/test/init-migrator-with-inherits.sh rename to test/package/migrator/test/postgresql/init-migrator-with-inherits.sh index 1934c96..832941d 100644 --- a/test/package/migrator/test/init-migrator-with-inherits.sh +++ b/test/package/migrator/test/postgresql/init-migrator-with-inherits.sh @@ -2,18 +2,6 @@ HECTIC_NAMESPACE=test-init-migrator -### CASE 1 -log notice "test case: ${WHITE}dry run" -# NOTE: does not matter exist inherits tables or not, it must not connect to db - -if ! migration_table_sql="$(migrator --inherits tablename --inherits 'table name' init --dry-run)"; then - log error "test failed: ${WHITE}error on migration table init dry run" - exit 1 -fi - -printf '%s' "$migration_table_sql" | grep -Eq 'INHERITS[[:space:]]*\([[:space:]]*"tablename"[[:space:]]*,[[:space:]]*"table name"[[:space:]]*\)' || - { log error "test failed: ${WHITE}not correct migration table inherits"; exit 1; } - ### CASE 2 log notice "test case: ${WHITE}error: table inherit tables that not exists" diff --git a/test/package/migrator/test/init-migrator.sh b/test/package/migrator/test/postgresql/init-migrator.sh similarity index 100% rename from test/package/migrator/test/init-migrator.sh rename to test/package/migrator/test/postgresql/init-migrator.sh diff --git a/test/package/migrator/test/migrate-already-at-target/migration/20250101000001-add-name/down.sql b/test/package/migrator/test/postgresql/migrate-already-at-target/migration/20250101000001-add-name/down.sql similarity index 100% rename from test/package/migrator/test/migrate-already-at-target/migration/20250101000001-add-name/down.sql rename to test/package/migrator/test/postgresql/migrate-already-at-target/migration/20250101000001-add-name/down.sql diff --git a/test/package/migrator/test/migrate-already-at-target/migration/20250101000001-add-name/up.sql b/test/package/migrator/test/postgresql/migrate-already-at-target/migration/20250101000001-add-name/up.sql similarity index 100% rename from test/package/migrator/test/migrate-already-at-target/migration/20250101000001-add-name/up.sql rename to test/package/migrator/test/postgresql/migrate-already-at-target/migration/20250101000001-add-name/up.sql diff --git a/test/package/migrator/test/migrate-already-at-target/run.sh b/test/package/migrator/test/postgresql/migrate-already-at-target/run.sh similarity index 100% rename from test/package/migrator/test/migrate-already-at-target/run.sh rename to test/package/migrator/test/postgresql/migrate-already-at-target/run.sh diff --git a/test/package/migrator/test/migrate-down-multiple/migration/20250101000001-add-user-id/down.sql b/test/package/migrator/test/postgresql/migrate-down-multiple/migration/20250101000001-add-user-id/down.sql similarity index 100% rename from test/package/migrator/test/migrate-down-multiple/migration/20250101000001-add-user-id/down.sql rename to test/package/migrator/test/postgresql/migrate-down-multiple/migration/20250101000001-add-user-id/down.sql diff --git a/test/package/migrator/test/migrate-down-multiple/migration/20250101000001-add-user-id/up.sql b/test/package/migrator/test/postgresql/migrate-down-multiple/migration/20250101000001-add-user-id/up.sql similarity index 100% rename from test/package/migrator/test/migrate-down-multiple/migration/20250101000001-add-user-id/up.sql rename to test/package/migrator/test/postgresql/migrate-down-multiple/migration/20250101000001-add-user-id/up.sql diff --git a/test/package/migrator/test/migrate-down-multiple/migration/20250101000002-add-total/down.sql b/test/package/migrator/test/postgresql/migrate-down-multiple/migration/20250101000002-add-total/down.sql similarity index 100% rename from test/package/migrator/test/migrate-down-multiple/migration/20250101000002-add-total/down.sql rename to test/package/migrator/test/postgresql/migrate-down-multiple/migration/20250101000002-add-total/down.sql diff --git a/test/package/migrator/test/migrate-down-multiple/migration/20250101000002-add-total/up.sql b/test/package/migrator/test/postgresql/migrate-down-multiple/migration/20250101000002-add-total/up.sql similarity index 100% rename from test/package/migrator/test/migrate-down-multiple/migration/20250101000002-add-total/up.sql rename to test/package/migrator/test/postgresql/migrate-down-multiple/migration/20250101000002-add-total/up.sql diff --git a/test/package/migrator/test/migrate-down-multiple/migration/20250101000003-add-status/down.sql b/test/package/migrator/test/postgresql/migrate-down-multiple/migration/20250101000003-add-status/down.sql similarity index 100% rename from test/package/migrator/test/migrate-down-multiple/migration/20250101000003-add-status/down.sql rename to test/package/migrator/test/postgresql/migrate-down-multiple/migration/20250101000003-add-status/down.sql diff --git a/test/package/migrator/test/migrate-down-multiple/migration/20250101000003-add-status/up.sql b/test/package/migrator/test/postgresql/migrate-down-multiple/migration/20250101000003-add-status/up.sql similarity index 100% rename from test/package/migrator/test/migrate-down-multiple/migration/20250101000003-add-status/up.sql rename to test/package/migrator/test/postgresql/migrate-down-multiple/migration/20250101000003-add-status/up.sql diff --git a/test/package/migrator/test/migrate-down-multiple/migration/20250101000004-add-created-at/down.sql b/test/package/migrator/test/postgresql/migrate-down-multiple/migration/20250101000004-add-created-at/down.sql similarity index 100% rename from test/package/migrator/test/migrate-down-multiple/migration/20250101000004-add-created-at/down.sql rename to test/package/migrator/test/postgresql/migrate-down-multiple/migration/20250101000004-add-created-at/down.sql diff --git a/test/package/migrator/test/migrate-down-multiple/migration/20250101000004-add-created-at/up.sql b/test/package/migrator/test/postgresql/migrate-down-multiple/migration/20250101000004-add-created-at/up.sql similarity index 100% rename from test/package/migrator/test/migrate-down-multiple/migration/20250101000004-add-created-at/up.sql rename to test/package/migrator/test/postgresql/migrate-down-multiple/migration/20250101000004-add-created-at/up.sql diff --git a/test/package/migrator/test/migrate-down-multiple/run.sh b/test/package/migrator/test/postgresql/migrate-down-multiple/run.sh similarity index 100% rename from test/package/migrator/test/migrate-down-multiple/run.sh rename to test/package/migrator/test/postgresql/migrate-down-multiple/run.sh diff --git a/test/package/migrator/test/migrate-down-single/migration/20250101000001-add-price/down.sql b/test/package/migrator/test/postgresql/migrate-down-single/migration/20250101000001-add-price/down.sql similarity index 100% rename from test/package/migrator/test/migrate-down-single/migration/20250101000001-add-price/down.sql rename to test/package/migrator/test/postgresql/migrate-down-single/migration/20250101000001-add-price/down.sql diff --git a/test/package/migrator/test/migrate-down-single/migration/20250101000001-add-price/up.sql b/test/package/migrator/test/postgresql/migrate-down-single/migration/20250101000001-add-price/up.sql similarity index 100% rename from test/package/migrator/test/migrate-down-single/migration/20250101000001-add-price/up.sql rename to test/package/migrator/test/postgresql/migrate-down-single/migration/20250101000001-add-price/up.sql diff --git a/test/package/migrator/test/migrate-down-single/migration/20250101000002-add-description/down.sql b/test/package/migrator/test/postgresql/migrate-down-single/migration/20250101000002-add-description/down.sql similarity index 100% rename from test/package/migrator/test/migrate-down-single/migration/20250101000002-add-description/down.sql rename to test/package/migrator/test/postgresql/migrate-down-single/migration/20250101000002-add-description/down.sql diff --git a/test/package/migrator/test/migrate-down-single/migration/20250101000002-add-description/up.sql b/test/package/migrator/test/postgresql/migrate-down-single/migration/20250101000002-add-description/up.sql similarity index 100% rename from test/package/migrator/test/migrate-down-single/migration/20250101000002-add-description/up.sql rename to test/package/migrator/test/postgresql/migrate-down-single/migration/20250101000002-add-description/up.sql diff --git a/test/package/migrator/test/migrate-down-single/run.sh b/test/package/migrator/test/postgresql/migrate-down-single/run.sh similarity index 100% rename from test/package/migrator/test/migrate-down-single/run.sh rename to test/package/migrator/test/postgresql/migrate-down-single/run.sh diff --git a/test/package/migrator/test/migrate-existing-data-migration/migration/20250101000001-transform-price-data/down.sql b/test/package/migrator/test/postgresql/migrate-existing-data-migration/migration/20250101000001-transform-price-data/down.sql similarity index 100% rename from test/package/migrator/test/migrate-existing-data-migration/migration/20250101000001-transform-price-data/down.sql rename to test/package/migrator/test/postgresql/migrate-existing-data-migration/migration/20250101000001-transform-price-data/down.sql diff --git a/test/package/migrator/test/migrate-existing-data-migration/migration/20250101000001-transform-price-data/up.sql b/test/package/migrator/test/postgresql/migrate-existing-data-migration/migration/20250101000001-transform-price-data/up.sql similarity index 100% rename from test/package/migrator/test/migrate-existing-data-migration/migration/20250101000001-transform-price-data/up.sql rename to test/package/migrator/test/postgresql/migrate-existing-data-migration/migration/20250101000001-transform-price-data/up.sql diff --git a/test/package/migrator/test/migrate-existing-data-migration/run.sh b/test/package/migrator/test/postgresql/migrate-existing-data-migration/run.sh similarity index 100% rename from test/package/migrator/test/migrate-existing-data-migration/run.sh rename to test/package/migrator/test/postgresql/migrate-existing-data-migration/run.sh diff --git a/test/package/migrator/test/migrate-existing-database/migration/20250101000001-add-user-bio/down.sql b/test/package/migrator/test/postgresql/migrate-existing-database/migration/20250101000001-add-user-bio/down.sql similarity index 100% rename from test/package/migrator/test/migrate-existing-database/migration/20250101000001-add-user-bio/down.sql rename to test/package/migrator/test/postgresql/migrate-existing-database/migration/20250101000001-add-user-bio/down.sql diff --git a/test/package/migrator/test/migrate-existing-database/migration/20250101000001-add-user-bio/up.sql b/test/package/migrator/test/postgresql/migrate-existing-database/migration/20250101000001-add-user-bio/up.sql similarity index 100% rename from test/package/migrator/test/migrate-existing-database/migration/20250101000001-add-user-bio/up.sql rename to test/package/migrator/test/postgresql/migrate-existing-database/migration/20250101000001-add-user-bio/up.sql diff --git a/test/package/migrator/test/migrate-existing-database/migration/20250101000002-add-comments/down.sql b/test/package/migrator/test/postgresql/migrate-existing-database/migration/20250101000002-add-comments/down.sql similarity index 100% rename from test/package/migrator/test/migrate-existing-database/migration/20250101000002-add-comments/down.sql rename to test/package/migrator/test/postgresql/migrate-existing-database/migration/20250101000002-add-comments/down.sql diff --git a/test/package/migrator/test/migrate-existing-database/migration/20250101000002-add-comments/up.sql b/test/package/migrator/test/postgresql/migrate-existing-database/migration/20250101000002-add-comments/up.sql similarity index 100% rename from test/package/migrator/test/migrate-existing-database/migration/20250101000002-add-comments/up.sql rename to test/package/migrator/test/postgresql/migrate-existing-database/migration/20250101000002-add-comments/up.sql diff --git a/test/package/migrator/test/migrate-existing-database/run.sh b/test/package/migrator/test/postgresql/migrate-existing-database/run.sh similarity index 100% rename from test/package/migrator/test/migrate-existing-database/run.sh rename to test/package/migrator/test/postgresql/migrate-existing-database/run.sh diff --git a/test/package/migrator/test/migrate-existing-with-conflicts/migration/20250101000001-add-test-table/down.sql b/test/package/migrator/test/postgresql/migrate-existing-with-conflicts/migration/20250101000001-add-test-table/down.sql similarity index 100% rename from test/package/migrator/test/migrate-existing-with-conflicts/migration/20250101000001-add-test-table/down.sql rename to test/package/migrator/test/postgresql/migrate-existing-with-conflicts/migration/20250101000001-add-test-table/down.sql diff --git a/test/package/migrator/test/migrate-existing-with-conflicts/migration/20250101000001-add-test-table/up.sql b/test/package/migrator/test/postgresql/migrate-existing-with-conflicts/migration/20250101000001-add-test-table/up.sql similarity index 100% rename from test/package/migrator/test/migrate-existing-with-conflicts/migration/20250101000001-add-test-table/up.sql rename to test/package/migrator/test/postgresql/migrate-existing-with-conflicts/migration/20250101000001-add-test-table/up.sql diff --git a/test/package/migrator/test/migrate-existing-with-conflicts/run.sh b/test/package/migrator/test/postgresql/migrate-existing-with-conflicts/run.sh similarity index 100% rename from test/package/migrator/test/migrate-existing-with-conflicts/run.sh rename to test/package/migrator/test/postgresql/migrate-existing-with-conflicts/run.sh diff --git a/test/package/migrator/test/migrate-to-backward/migration/20250101000001-add-user-id/down.sql b/test/package/migrator/test/postgresql/migrate-to-backward/migration/20250101000001-add-user-id/down.sql similarity index 100% rename from test/package/migrator/test/migrate-to-backward/migration/20250101000001-add-user-id/down.sql rename to test/package/migrator/test/postgresql/migrate-to-backward/migration/20250101000001-add-user-id/down.sql diff --git a/test/package/migrator/test/migrate-to-backward/migration/20250101000001-add-user-id/up.sql b/test/package/migrator/test/postgresql/migrate-to-backward/migration/20250101000001-add-user-id/up.sql similarity index 100% rename from test/package/migrator/test/migrate-to-backward/migration/20250101000001-add-user-id/up.sql rename to test/package/migrator/test/postgresql/migrate-to-backward/migration/20250101000001-add-user-id/up.sql diff --git a/test/package/migrator/test/migrate-to-backward/migration/20250101000002-add-token/down.sql b/test/package/migrator/test/postgresql/migrate-to-backward/migration/20250101000002-add-token/down.sql similarity index 100% rename from test/package/migrator/test/migrate-to-backward/migration/20250101000002-add-token/down.sql rename to test/package/migrator/test/postgresql/migrate-to-backward/migration/20250101000002-add-token/down.sql diff --git a/test/package/migrator/test/migrate-to-backward/migration/20250101000002-add-token/up.sql b/test/package/migrator/test/postgresql/migrate-to-backward/migration/20250101000002-add-token/up.sql similarity index 100% rename from test/package/migrator/test/migrate-to-backward/migration/20250101000002-add-token/up.sql rename to test/package/migrator/test/postgresql/migrate-to-backward/migration/20250101000002-add-token/up.sql diff --git a/test/package/migrator/test/migrate-to-backward/migration/20250101000003-add-expires-at/down.sql b/test/package/migrator/test/postgresql/migrate-to-backward/migration/20250101000003-add-expires-at/down.sql similarity index 100% rename from test/package/migrator/test/migrate-to-backward/migration/20250101000003-add-expires-at/down.sql rename to test/package/migrator/test/postgresql/migrate-to-backward/migration/20250101000003-add-expires-at/down.sql diff --git a/test/package/migrator/test/migrate-to-backward/migration/20250101000003-add-expires-at/up.sql b/test/package/migrator/test/postgresql/migrate-to-backward/migration/20250101000003-add-expires-at/up.sql similarity index 100% rename from test/package/migrator/test/migrate-to-backward/migration/20250101000003-add-expires-at/up.sql rename to test/package/migrator/test/postgresql/migrate-to-backward/migration/20250101000003-add-expires-at/up.sql diff --git a/test/package/migrator/test/migrate-to-backward/run.sh b/test/package/migrator/test/postgresql/migrate-to-backward/run.sh similarity index 100% rename from test/package/migrator/test/migrate-to-backward/run.sh rename to test/package/migrator/test/postgresql/migrate-to-backward/run.sh diff --git a/test/package/migrator/test/migrate-to-forward/migration/20250101000001-add-content/down.sql b/test/package/migrator/test/postgresql/migrate-to-forward/migration/20250101000001-add-content/down.sql similarity index 100% rename from test/package/migrator/test/migrate-to-forward/migration/20250101000001-add-content/down.sql rename to test/package/migrator/test/postgresql/migrate-to-forward/migration/20250101000001-add-content/down.sql diff --git a/test/package/migrator/test/migrate-to-forward/migration/20250101000001-add-content/up.sql b/test/package/migrator/test/postgresql/migrate-to-forward/migration/20250101000001-add-content/up.sql similarity index 100% rename from test/package/migrator/test/migrate-to-forward/migration/20250101000001-add-content/up.sql rename to test/package/migrator/test/postgresql/migrate-to-forward/migration/20250101000001-add-content/up.sql diff --git a/test/package/migrator/test/migrate-to-forward/migration/20250101000002-add-user-id/down.sql b/test/package/migrator/test/postgresql/migrate-to-forward/migration/20250101000002-add-user-id/down.sql similarity index 100% rename from test/package/migrator/test/migrate-to-forward/migration/20250101000002-add-user-id/down.sql rename to test/package/migrator/test/postgresql/migrate-to-forward/migration/20250101000002-add-user-id/down.sql diff --git a/test/package/migrator/test/migrate-to-forward/migration/20250101000002-add-user-id/up.sql b/test/package/migrator/test/postgresql/migrate-to-forward/migration/20250101000002-add-user-id/up.sql similarity index 100% rename from test/package/migrator/test/migrate-to-forward/migration/20250101000002-add-user-id/up.sql rename to test/package/migrator/test/postgresql/migrate-to-forward/migration/20250101000002-add-user-id/up.sql diff --git a/test/package/migrator/test/migrate-to-forward/run.sh b/test/package/migrator/test/postgresql/migrate-to-forward/run.sh similarity index 100% rename from test/package/migrator/test/migrate-to-forward/run.sh rename to test/package/migrator/test/postgresql/migrate-to-forward/run.sh diff --git a/test/package/migrator/test/migrate-up-multiple/migration/20250101000001-add-content/down.sql b/test/package/migrator/test/postgresql/migrate-up-multiple/migration/20250101000001-add-content/down.sql similarity index 100% rename from test/package/migrator/test/migrate-up-multiple/migration/20250101000001-add-content/down.sql rename to test/package/migrator/test/postgresql/migrate-up-multiple/migration/20250101000001-add-content/down.sql diff --git a/test/package/migrator/test/migrate-up-multiple/migration/20250101000001-add-content/up.sql b/test/package/migrator/test/postgresql/migrate-up-multiple/migration/20250101000001-add-content/up.sql similarity index 100% rename from test/package/migrator/test/migrate-up-multiple/migration/20250101000001-add-content/up.sql rename to test/package/migrator/test/postgresql/migrate-up-multiple/migration/20250101000001-add-content/up.sql diff --git a/test/package/migrator/test/migrate-up-multiple/migration/20250101000002-add-author/down.sql b/test/package/migrator/test/postgresql/migrate-up-multiple/migration/20250101000002-add-author/down.sql similarity index 100% rename from test/package/migrator/test/migrate-up-multiple/migration/20250101000002-add-author/down.sql rename to test/package/migrator/test/postgresql/migrate-up-multiple/migration/20250101000002-add-author/down.sql diff --git a/test/package/migrator/test/migrate-up-multiple/migration/20250101000002-add-author/up.sql b/test/package/migrator/test/postgresql/migrate-up-multiple/migration/20250101000002-add-author/up.sql similarity index 100% rename from test/package/migrator/test/migrate-up-multiple/migration/20250101000002-add-author/up.sql rename to test/package/migrator/test/postgresql/migrate-up-multiple/migration/20250101000002-add-author/up.sql diff --git a/test/package/migrator/test/migrate-up-multiple/migration/20250101000003-add-published-at/down.sql b/test/package/migrator/test/postgresql/migrate-up-multiple/migration/20250101000003-add-published-at/down.sql similarity index 100% rename from test/package/migrator/test/migrate-up-multiple/migration/20250101000003-add-published-at/down.sql rename to test/package/migrator/test/postgresql/migrate-up-multiple/migration/20250101000003-add-published-at/down.sql diff --git a/test/package/migrator/test/migrate-up-multiple/migration/20250101000003-add-published-at/up.sql b/test/package/migrator/test/postgresql/migrate-up-multiple/migration/20250101000003-add-published-at/up.sql similarity index 100% rename from test/package/migrator/test/migrate-up-multiple/migration/20250101000003-add-published-at/up.sql rename to test/package/migrator/test/postgresql/migrate-up-multiple/migration/20250101000003-add-published-at/up.sql diff --git a/test/package/migrator/test/migrate-up-multiple/run.sh b/test/package/migrator/test/postgresql/migrate-up-multiple/run.sh similarity index 100% rename from test/package/migrator/test/migrate-up-multiple/run.sh rename to test/package/migrator/test/postgresql/migrate-up-multiple/run.sh diff --git a/test/package/migrator/test/migrate-up-single/migration/20250101000001-add-email/down.sql b/test/package/migrator/test/postgresql/migrate-up-single/migration/20250101000001-add-email/down.sql similarity index 100% rename from test/package/migrator/test/migrate-up-single/migration/20250101000001-add-email/down.sql rename to test/package/migrator/test/postgresql/migrate-up-single/migration/20250101000001-add-email/down.sql diff --git a/test/package/migrator/test/migrate-up-single/migration/20250101000001-add-email/up.sql b/test/package/migrator/test/postgresql/migrate-up-single/migration/20250101000001-add-email/up.sql similarity index 100% rename from test/package/migrator/test/migrate-up-single/migration/20250101000001-add-email/up.sql rename to test/package/migrator/test/postgresql/migrate-up-single/migration/20250101000001-add-email/up.sql diff --git a/test/package/migrator/test/migrate-up-single/run.sh b/test/package/migrator/test/postgresql/migrate-up-single/run.sh similarity index 100% rename from test/package/migrator/test/migrate-up-single/run.sh rename to test/package/migrator/test/postgresql/migrate-up-single/run.sh diff --git a/test/package/migrator/test/migrations-list/migration/20251004192425-some-changes/placeholder b/test/package/migrator/test/postgresql/migrations-list/migration/20251004192425-some-changes/placeholder similarity index 100% rename from test/package/migrator/test/migrations-list/migration/20251004192425-some-changes/placeholder rename to test/package/migrator/test/postgresql/migrations-list/migration/20251004192425-some-changes/placeholder diff --git a/test/package/migrator/test/migrations-list/migration/20251004292448-some-changes/down.sql b/test/package/migrator/test/postgresql/migrations-list/migration/20251004292448-some-changes/down.sql similarity index 100% rename from test/package/migrator/test/migrations-list/migration/20251004292448-some-changes/down.sql rename to test/package/migrator/test/postgresql/migrations-list/migration/20251004292448-some-changes/down.sql diff --git a/test/package/migrator/test/migrations-list/migration/20251004292448-some-changes/up.sql b/test/package/migrator/test/postgresql/migrations-list/migration/20251004292448-some-changes/up.sql similarity index 100% rename from test/package/migrator/test/migrations-list/migration/20251004292448-some-changes/up.sql rename to test/package/migrator/test/postgresql/migrations-list/migration/20251004292448-some-changes/up.sql diff --git a/test/package/migrator/test/migrations-list/migration/20251104172425-third-migration/up.sql b/test/package/migrator/test/postgresql/migrations-list/migration/20251104172425-third-migration/up.sql similarity index 100% rename from test/package/migrator/test/migrations-list/migration/20251104172425-third-migration/up.sql rename to test/package/migrator/test/postgresql/migrations-list/migration/20251104172425-third-migration/up.sql diff --git a/test/package/migrator/test/migrations-list/migration/20251104192427-an-other-one/up.sql b/test/package/migrator/test/postgresql/migrations-list/migration/20251104192427-an-other-one/up.sql similarity index 100% rename from test/package/migrator/test/migrations-list/migration/20251104192427-an-other-one/up.sql rename to test/package/migrator/test/postgresql/migrations-list/migration/20251104192427-an-other-one/up.sql diff --git a/test/package/migrator/test/migrations-list/migration/20251104292469-almoust-last/down.sql b/test/package/migrator/test/postgresql/migrations-list/migration/20251104292469-almoust-last/down.sql similarity index 100% rename from test/package/migrator/test/migrations-list/migration/20251104292469-almoust-last/down.sql rename to test/package/migrator/test/postgresql/migrations-list/migration/20251104292469-almoust-last/down.sql diff --git a/test/package/migrator/test/migrations-list/migration/20251104292469-almoust-last/up.sql b/test/package/migrator/test/postgresql/migrations-list/migration/20251104292469-almoust-last/up.sql similarity index 100% rename from test/package/migrator/test/migrations-list/migration/20251104292469-almoust-last/up.sql rename to test/package/migrator/test/postgresql/migrations-list/migration/20251104292469-almoust-last/up.sql diff --git a/test/package/migrator/test/migrations-list/migration/20251204152446-very-last/down.sql b/test/package/migrator/test/postgresql/migrations-list/migration/20251204152446-very-last/down.sql similarity index 100% rename from test/package/migrator/test/migrations-list/migration/20251204152446-very-last/down.sql rename to test/package/migrator/test/postgresql/migrations-list/migration/20251204152446-very-last/down.sql diff --git a/test/package/migrator/test/migrations-list/migration/20251204152446-very-last/up.sql b/test/package/migrator/test/postgresql/migrations-list/migration/20251204152446-very-last/up.sql similarity index 100% rename from test/package/migrator/test/migrations-list/migration/20251204152446-very-last/up.sql rename to test/package/migrator/test/postgresql/migrations-list/migration/20251204152446-very-last/up.sql diff --git a/test/package/migrator/test/migrations-list/run.sh b/test/package/migrator/test/postgresql/migrations-list/run.sh similarity index 100% rename from test/package/migrator/test/migrations-list/run.sh rename to test/package/migrator/test/postgresql/migrations-list/run.sh diff --git a/test/package/migrator/test/missing-psql.sh b/test/package/migrator/test/postgresql/missing-psql.sh similarity index 100% rename from test/package/migrator/test/missing-psql.sh rename to test/package/migrator/test/postgresql/missing-psql.sh diff --git a/test/package/migrator/test/sqlite/sqlite-basic/migration/20250101000001-create-users/down.sql b/test/package/migrator/test/sqlite/sqlite-basic/migration/20250101000001-create-users/down.sql new file mode 100644 index 0000000..d553233 --- /dev/null +++ b/test/package/migrator/test/sqlite/sqlite-basic/migration/20250101000001-create-users/down.sql @@ -0,0 +1,3 @@ +DROP TABLE users; + + diff --git a/test/package/migrator/test/sqlite/sqlite-basic/migration/20250101000001-create-users/up.sql b/test/package/migrator/test/sqlite/sqlite-basic/migration/20250101000001-create-users/up.sql new file mode 100644 index 0000000..8bac538 --- /dev/null +++ b/test/package/migrator/test/sqlite/sqlite-basic/migration/20250101000001-create-users/up.sql @@ -0,0 +1,6 @@ +CREATE TABLE users ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + name TEXT NOT NULL +); + + diff --git a/test/package/migrator/test/sqlite/sqlite-basic/migration/20250101000002-add-email/down.sql b/test/package/migrator/test/sqlite/sqlite-basic/migration/20250101000002-add-email/down.sql new file mode 100644 index 0000000..7e0a074 --- /dev/null +++ b/test/package/migrator/test/sqlite/sqlite-basic/migration/20250101000002-add-email/down.sql @@ -0,0 +1,12 @@ +-- SQLite doesn't support DROP COLUMN directly before 3.35.0 +-- We need to recreate the table +CREATE TABLE users_new ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + name TEXT NOT NULL +); + +INSERT INTO users_new (id, name) SELECT id, name FROM users; +DROP TABLE users; +ALTER TABLE users_new RENAME TO users; + + diff --git a/test/package/migrator/test/sqlite/sqlite-basic/migration/20250101000002-add-email/up.sql b/test/package/migrator/test/sqlite/sqlite-basic/migration/20250101000002-add-email/up.sql new file mode 100644 index 0000000..b0e962c --- /dev/null +++ b/test/package/migrator/test/sqlite/sqlite-basic/migration/20250101000002-add-email/up.sql @@ -0,0 +1,3 @@ +ALTER TABLE users ADD COLUMN email TEXT; + + diff --git a/test/package/migrator/test/sqlite/sqlite-basic/run.sh b/test/package/migrator/test/sqlite/sqlite-basic/run.sh new file mode 100644 index 0000000..74bff99 --- /dev/null +++ b/test/package/migrator/test/sqlite/sqlite-basic/run.sh @@ -0,0 +1,86 @@ +#!/bin/dash + +HECTIC_NAMESPACE=test-sqlite-basic + +log notice "test case: ${WHITE}SQLite basic migration" + +# Create SQLite database +SQLITE_DB="$PWD/test.db" +export DB_URL="sqlite://$SQLITE_DB" + +log info "using SQLite database: $SQLITE_DB" + +# Initialize migrator with SQLite +if ! migrator --db-url "$DB_URL" init; then + log error "test failed: ${WHITE}init failed for SQLite" + exit 1 +fi + +# Verify tables were created +if ! sqlite3 "$SQLITE_DB" "SELECT name FROM hectic_version WHERE name = 'migrator'" >/dev/null 2>&1; then + log error "test failed: ${WHITE}hectic_version table not created" + exit 1 +fi + +if ! sqlite3 "$SQLITE_DB" "SELECT COUNT(*) FROM hectic_migration" >/dev/null 2>&1; then + log error "test failed: ${WHITE}hectic_migration table not created" + exit 1 +fi + +log info "migrator tables created successfully" + +# Apply first migration +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 users" >/dev/null 2>&1; then + log error "test failed: ${WHITE}users 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 email column exists +if ! sqlite3 "$SQLITE_DB" "SELECT email FROM users LIMIT 0" >/dev/null 2>&1; then + log error "test failed: ${WHITE}email column not added" + exit 1 +fi + +# Migrate down +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 email column removed +if sqlite3 "$SQLITE_DB" "SELECT email FROM users LIMIT 0" >/dev/null 2>&1; then + log error "test failed: ${WHITE}email column should be removed" + exit 1 +fi + +log notice "test passed: SQLite support works correctly" + +