Files
dokku/tests/unit/builder.bats
Jose Diaz-Gonzalez cdcf1fc669 test: backfill raw/global/computed report triplet coverage across plugins
The bats coverage for plugin :report keys has been uneven since the raw/global/computed split landed in PR #8640. This commit adds a single combined triplet test per settable property across app-json, builder, builder-dockerfile, builder-herokuish, builder-lambda, builder-nixpacks, builder-pack, builder-railpack, buildpacks, cron (maintenance), git (keep-git-dir, rev-env-var, source-image), logs (vector-sink, vector-global-image, vector-global-networks), network (attach-post-create, attach-post-deploy, initial-network), proxy (per-app type), ps (stop-timeout-seconds), registry (image-repo, push-on-release, push-extra-tags), storage (build/deploy/run mounts), and adds a new tests/unit/scheduler.bats and tests/unit/nginx-vhosts_properties.bats. Brings ps `procfile-path` and `stop-timeout-seconds` global getters in line with the #8640 convention (raw global, default resolved in computed). Documents the read-only and internal properties that surface in `:report` (or are written by Dokku) but cannot be managed by `:set` in a new `## Internal properties` section appended to each affected plugin's docs page.
2026-05-23 00:05:33 -04:00

348 lines
8.9 KiB
Bash

#!/usr/bin/env bats
load test_helper
setup() {
create_app
}
teardown() {
destroy_app
}
@test "(builder) builder-detect [set]" {
local TMP=$(mktemp -d "/tmp/${DOKKU_DOMAIN}.XXXXX")
trap 'popd &>/dev/null || true; rm -rf "$TMP"' INT TERM
# test project.toml
run touch "$TMP/project.toml"
echo "output: $output"
echo "status: $status"
assert_success
chown -R dokku:dokku "$TMP"
run /bin/bash -c "dokku builder:set --global selected pack"
echo "output: $output"
echo "status: $status"
assert_success
run /bin/bash -c "dokku plugin:trigger builder-detect $TEST_APP $TMP"
echo "output: $output"
echo "status: $status"
assert_success
assert_line 0 "pack"
run /bin/bash -c "dokku builder:set $TEST_APP selected pack"
echo "output: $output"
echo "status: $status"
assert_success
run /bin/bash -c "dokku plugin:trigger builder-detect $TEST_APP $TMP"
echo "output: $output"
echo "status: $status"
assert_success
assert_line 0 "pack"
run /bin/bash -c "dokku builder:set --global selected other"
echo "output: $output"
echo "status: $status"
assert_success
run /bin/bash -c "dokku plugin:trigger builder-detect $TEST_APP $TMP"
echo "output: $output"
echo "status: $status"
assert_success
assert_line 0 "pack"
run /bin/bash -c "dokku builder:set $TEST_APP selected"
echo "output: $output"
echo "status: $status"
assert_success
run /bin/bash -c "dokku plugin:trigger builder-detect $TEST_APP $TMP"
echo "output: $output"
echo "status: $status"
assert_success
assert_line 0 "other"
run /bin/bash -c "dokku builder:set --global selected"
echo "output: $output"
echo "status: $status"
assert_success
run /bin/bash -c "dokku plugin:trigger builder-detect $TEST_APP $TMP"
echo "output: $output"
echo "status: $status"
assert_success
assert_line 0 "pack"
}
@test "(builder) builder-detect [pack]" {
local TMP=$(mktemp -d "/tmp/${DOKKU_DOMAIN}.XXXXX")
trap 'popd &>/dev/null || true; rm -rf "$TMP"' INT TERM
# test project.toml
run touch "$TMP/project.toml"
echo "output: $output"
echo "status: $status"
assert_success
chown -R dokku:dokku "$TMP"
run /bin/bash -c "dokku plugin:trigger builder-detect $TEST_APP $TMP"
echo "output: $output"
echo "status: $status"
assert_success
assert_line 0 "pack"
sudo rm -rf $TMP/*
echo "output: $output"
echo "status: $status"
assert_success
}
@test "(builder) builder-detect [dockerfile]" {
local TMP=$(mktemp -d "/tmp/${DOKKU_DOMAIN}.XXXXX")
trap 'popd &>/dev/null || true; rm -rf "$TMP"' INT TERM
run touch "$TMP/Dockerfile"
echo "output: $output"
echo "status: $status"
assert_success
chown -R dokku:dokku "$TMP"
run /bin/bash -c "dokku plugin:trigger builder-detect $TEST_APP $TMP"
echo "output: $output"
echo "status: $status"
assert_success
assert_line 0 "dockerfile"
}
@test "(builder) builder-detect [herokuish]" {
local TMP=$(mktemp -d "/tmp/${DOKKU_DOMAIN}.XXXXX")
trap 'popd &>/dev/null || true; rm -rf "$TMP"' INT TERM
touch "$TMP/Dockerfile"
# test buildpacks
chown -R dokku:dokku "$TMP"
run /bin/bash -c "touch $TMP/.buildpacks"
echo "output: $output"
echo "status: $status"
assert_success
chown -R dokku:dokku "$TMP"
run /bin/bash -c "dokku plugin:trigger builder-detect $TEST_APP $TMP"
echo "output: $output"
echo "status: $status"
assert_success
assert_line 0 "herokuish"
sudo rm -rf $TMP/*
echo "output: $output"
echo "status: $status"
assert_success
# test .env
run /bin/bash -c "echo BUILDPACK_URL=null > $TMP/.env"
echo "output: $output"
echo "status: $status"
assert_success
chown -R dokku:dokku "$TMP"
run /bin/bash -c "dokku plugin:trigger builder-detect $TEST_APP $TMP"
echo "output: $output"
echo "status: $status"
assert_success
assert_line 0 "herokuish"
sudo rm -rf $TMP/*
echo "output: $output"
echo "status: $status"
assert_success
# test BUILDPACK_URL env var
run /bin/bash -c "dokku config:set $TEST_APP BUILDPACK_URL=null"
echo "output: $output"
echo "status: $status"
assert_success
chown -R dokku:dokku "$TMP"
run /bin/bash -c "dokku plugin:trigger builder-detect $TEST_APP $TMP"
echo "output: $output"
echo "status: $status"
assert_success
assert_line 0 "herokuish"
}
@test "(builder:report) --global --format json" {
run /bin/bash -c "dokku builder:set --global selected dockerfile"
echo "output: $output"
echo "status: $status"
assert_success
run /bin/bash -c "dokku builder:report --global --format json | jq -e ."
echo "output: $output"
echo "status: $status"
assert_success
run /bin/bash -c "dokku builder:report --global --format json | jq -r '.\"builder-global-selected\"'"
echo "output: $output"
echo "status: $status"
assert_success
assert_output "dockerfile"
run /bin/bash -c "dokku builder:report --global --format json | jq -r 'has(\"builder-selected\")'"
echo "output: $output"
echo "status: $status"
assert_success
assert_output "false"
run /bin/bash -c "dokku builder:report --global"
echo "output: $output"
echo "status: $status"
assert_success
run /bin/bash -c "dokku builder:set --global selected"
echo "output: $output"
echo "status: $status"
assert_success
}
@test "(builder:report) selected raw vs computed vs global" {
run /bin/bash -c "dokku builder:set --global selected"
assert_success
run /bin/bash -c "dokku builder:report $TEST_APP --builder-selected"
assert_success
assert_output_not_exists
run /bin/bash -c "dokku builder:report $TEST_APP --builder-global-selected"
assert_success
assert_output_not_exists
run /bin/bash -c "dokku builder:report $TEST_APP --builder-computed-selected"
assert_success
assert_output_not_exists
run /bin/bash -c "dokku builder:set --global selected dockerfile"
assert_success
run /bin/bash -c "dokku builder:report $TEST_APP --builder-global-selected"
assert_success
assert_output "dockerfile"
run /bin/bash -c "dokku builder:report $TEST_APP --builder-computed-selected"
assert_success
assert_output "dockerfile"
run /bin/bash -c "dokku builder:set $TEST_APP selected herokuish"
assert_success
run /bin/bash -c "dokku builder:report $TEST_APP --builder-selected"
assert_success
assert_output "herokuish"
run /bin/bash -c "dokku builder:report $TEST_APP --builder-global-selected"
assert_success
assert_output "dockerfile"
run /bin/bash -c "dokku builder:report $TEST_APP --builder-computed-selected"
assert_success
assert_output "herokuish"
run /bin/bash -c "dokku builder:set $TEST_APP selected"
assert_success
run /bin/bash -c "dokku builder:set --global selected"
assert_success
}
@test "(builder:report) build-dir raw vs computed vs global" {
run /bin/bash -c "dokku builder:set --global build-dir"
assert_success
run /bin/bash -c "dokku builder:report $TEST_APP --builder-build-dir"
assert_success
assert_output_not_exists
run /bin/bash -c "dokku builder:report $TEST_APP --builder-global-build-dir"
assert_success
assert_output_not_exists
run /bin/bash -c "dokku builder:report $TEST_APP --builder-computed-build-dir"
assert_success
assert_output_not_exists
run /bin/bash -c "dokku builder:set --global build-dir global/subdir"
assert_success
run /bin/bash -c "dokku builder:report $TEST_APP --builder-global-build-dir"
assert_success
assert_output "global/subdir"
run /bin/bash -c "dokku builder:report $TEST_APP --builder-computed-build-dir"
assert_success
assert_output "global/subdir"
run /bin/bash -c "dokku builder:set $TEST_APP build-dir app/subdir"
assert_success
run /bin/bash -c "dokku builder:report $TEST_APP --builder-build-dir"
assert_success
assert_output "app/subdir"
run /bin/bash -c "dokku builder:report $TEST_APP --builder-global-build-dir"
assert_success
assert_output "global/subdir"
run /bin/bash -c "dokku builder:report $TEST_APP --builder-computed-build-dir"
assert_success
assert_output "app/subdir"
run /bin/bash -c "dokku builder:set $TEST_APP build-dir"
assert_success
run /bin/bash -c "dokku builder:set --global build-dir"
assert_success
}
@test "(builder:set)" {
run deploy_app python
echo "output: $output"
echo "status: $status"
assert_success
run /bin/bash -c "dokku builder:set $TEST_APP build-dir nonexistent-app"
echo "output: $output"
echo "status: $status"
assert_success
run /bin/bash -c "dokku ps:rebuild $TEST_APP"
echo "output: $output"
echo "status: $status"
assert_failure
run /bin/bash -c "dokku builder:set $TEST_APP build-dir sub-app"
echo "output: $output"
echo "status: $status"
assert_success
run /bin/bash -c "dokku ps:rebuild $TEST_APP"
echo "output: $output"
echo "status: $status"
assert_success
assert_output_contains 'SECRET_KEYS:'
run /bin/bash -c "dokku builder:set $TEST_APP build-dir"
echo "output: $output"
echo "status: $status"
assert_success
run /bin/bash -c "dokku ps:rebuild $TEST_APP"
echo "output: $output"
echo "status: $status"
assert_success
assert_output_contains 'SECRET_KEY:'
}