;; ;; Author: David Krentzlin ;; ;; Created: Do Nov 11 16:25:19 2010 (CET) ;; Last-Updated: Do Mär 29 12:31:08 2012 (CEST) ;; By: (use test sql-de-lite) (use nomads nomads-sql-de-lite) (include "test-helper.scm") ;;basic tests (test-group "Utils" (test "extract version from file" '(1 . "test-migration") ((filename-partitioner) "01-test-migration")) (test "extract version from file without version" '( #f . "file-without-version") ((filename-partitioner) "file-without-version"))) (test-group "Database-Binding" (test "connect" #t (handle-exceptions exn #f ((db-with-connection) test-db (lambda (con) #t)))) (test "create version table" (db-schema-version-table) (begin (wipe-table (db-schema-version-table)) ((db-with-connection) test-db (lambda (con) ((db-initialize-schema-information) con (db-schema-version-table)) (first-column (query fetch (sql con "SELECT name FROM sqlite_master WHERE name=?") (db-schema-version-table))))))) (test "first-migration? detects first run" #t (begin (wipe-table (db-schema-version-table)) ((db-with-connection) test-db (lambda (db) (not ((db-schema-information-exists?) db (db-schema-version-table))))))) (test "first-migration? detects existing migrations" #t ((db-with-connection) test-db (lambda (db) ((db-initialize-schema-information) db (db-schema-version-table)) ((db-schema-information-exists?) db (db-schema-version-table)))))) (test-group "System" (test "migrates from earliest to latest" `(3 1 2 3) (test-migration 'latest reset: #t)) (test "migrates from latest to earliest" `(#f) (begin (test-migration 'latest reset: #t) (test-migration 'earliest))) (test "migrates from earliest to specific" '(2 1 2) (test-migration 2 reset: #t)) (test "migrates from specific to earliest" '(#f) (begin (test-migration 2 reset: #t) (test-migration 'earliest))) (test "migrates from specific to latest" '(3 1 2 3) (begin (test-migration 1 reset: #t) (test-migration 'latest))) (test "migrates from latest to specific" '(1 1) (begin (test-migration 'latest reset: #t) (test-migration 1))) (test "doesn't migrate if up to date" '(1 1) (begin (test-migration 1 reset: #t) (test-migration 1))) (test "doesn't migrate from earliest to earliest" '(#f) (begin (test-migration 'earliest reset: #t) (test-migration 'earliest))) (test "doesn't migrate from latest to latest" '(3 1 2 3) (begin (test-migration 'latest reset: #t) (test-migration 'latest))) (test "irreversable migrations" '(4 1 2 3 4) (parameterize ((migration-directory "./migrations/with-irreversible")) (test-migration 'latest reset: #t) (test-migration 'earliest))) (test "irreversible migrations with message" "Testmessage" (parameterize ((migration-directory "./migrations/with-irreversible")) (test-migration 'latest reset: #t) (let* ((msg "") (cb (lambda (checkpoint irreversible? #!key (error #f) (message #f)) (when irreversible? (set! msg message))))) (migrate version:'earliest callback: cb) msg))) (test "detect dublicate migrations" 'duplicate-migrations (parameterize ((migration-directory "./migrations/with-duplicates") (error-on-duplicate-migrations #t)) (condition-case (test-migration 'latest reset: #t) ((nomads-error duplicate-version) 'duplicate-migrations)))) (test "detect non-existent versions" 'non-existent-version (parameterize ((error-on-non-existent-version #t)) (condition-case (test-migration 100 reset: #t) ((nomads-error non-existent-version) 'non-existent-version)))) ) ;; (test "detect duplicate migrations-versions" #t #f) (unless (zero? (test-failure-count)) (exit 1))