Newer
Older
# def docker-compose-ps [] {
# docker compose ps --format=json | split row "\n" | each { |l| $l | from json }
# }
# def docker-compose-all-up [] {
# let results = docker-compose-ps
# (($results | all { |row| $row.Status | str starts-with 'Up' }) and
# (($results | length) > 0))
# }
$env.POSTGRES_CONTAINER_NAME = "postgres"
$env.BACKUP_SERVICE_CONTAINER_NAME = "backup-service"
$env.POSTGRES_USER = "postgres"
$env.POSTGRES_PASSWORD = "secret"
(
docker exec -i $env.POSTGRES_CONTAINER_NAME psql
--csv
--username $env.POSTGRES_USER
--dbname (if $database != null { $database } else { $env.SEED_DATABASE })
def create-services [] {
log info "Creating services"
docker compose --progress=plain up --build --detach
}
def delete-services [] {
log info "Deleting services"
docker compose --progress=plain down
}
def create-test-db [] {
log info "Creating empty test database"
$'CREATE DATABASE ($env.SEED_DATABASE);' | exec-sql --database $DEFAULT_DATABASE
}
def drop-test-db [] {
log info "Dropping test database"
$'DROP DATABASE IF EXISTS ($env.SEED_DATABASE);' | exec-sql --database $DEFAULT_DATABASE
def populate-test-db [] {
log info "Populating test database"
open ./seed-data/pagila/pagila-schema.sql | exec-sql
open ./seed-data/pagila/pagila-data.sql | exec-sql
}
def backup [] {
docker compose exec backup-service sh backup.sh
def assert-test-db-populated [] {
let rows = 'SELECT count(1) FROM public.customer;' | exec-sql
assert (not ($rows | is-empty)) 'Not populated: failed to select from table'
assert ($rows.count.0 > 0) 'Not populated: table is empty'
}
def assert-test-db-dne [] {
# note may log a psql error (database pagila dne)
let rows = 'SELECT count(1) FROM public.customer;' | exec-sql
assert (($rows | is-empty) or ($rows.count.0 == 0))
}
with-env { POSTGRES_VERSION: "15", ALPINE_VERSION: "3.17" } {
timeit {
delete-services
create-services
create-test-db
populate-test-db
assert-test-db-populated
backup
drop-test-db
assert-test-db-dne
create-test-db # restore needs it to already exist
restore
assert-test-db-populated # asserts there's actually data in the table
delete-services
}