Files
dokku/tests/unit/apps_1.bats
Jose Diaz-Gonzalez 21c27e99cc feat: add --format json support to apps:list
The `apps:list` command now accepts a `--format` flag that defaults to `stdout` and can be set to `json` to emit the app names as a JSON array, matching the JSON output the `:report` subcommands already provide. When no apps exist, the JSON output is an empty array.
2026-07-06 11:50:56 -04:00

492 lines
13 KiB
Bash

#!/usr/bin/env bats
load test_helper
setup() {
global_setup
}
teardown() {
global_teardown
}
@test "(apps) apps:help" {
run /bin/bash -c "dokku apps --help"
echo "output: $output"
echo "status: $status"
assert_output_contains "Manage apps"
help_output="$output"
run /bin/bash -c "dokku apps:help"
echo "output: $output"
echo "status: $status"
assert_output_contains "Manage apps"
assert_output "$help_output"
}
@test "(apps) apps:list" {
run /bin/bash -c "dokku apps:list 2>&1"
echo "output: $output"
echo "status: $status"
assert_success
assert_output_contains "You haven't deployed any applications yet"
assert_output_contains "$TEST_APP" 0
run /bin/bash -c "dokku apps:create $TEST_APP"
echo "output: $output"
echo "status: $status"
assert_success
run /bin/bash -c "dokku apps:list 2>&1"
echo "output: $output"
echo "status: $status"
assert_success
assert_output_contains "You haven't deployed any applications yet" 0
assert_output_contains "$TEST_APP"
run /bin/bash -c "dokku --force apps:destroy $TEST_APP"
echo "output: $output"
echo "status: $status"
assert_success
}
@test "(apps) apps:list --format json" {
run /bin/bash -c "dokku apps:list --format json"
echo "output: $output"
echo "status: $status"
assert_success
assert_output "[]"
run /bin/bash -c "dokku apps:create $TEST_APP"
echo "output: $output"
echo "status: $status"
assert_success
run /bin/bash -c "dokku apps:list --format json | jq '. | length'"
echo "output: $output"
echo "status: $status"
assert_success
assert_output "1"
run /bin/bash -c "dokku apps:list --format json | jq -r '.[0]'"
echo "output: $output"
echo "status: $status"
assert_success
assert_output "$TEST_APP"
run /bin/bash -c "dokku --force apps:destroy $TEST_APP"
echo "output: $output"
echo "status: $status"
assert_success
}
@test "(apps) apps:create" {
run /bin/bash -c "dokku apps:create $TEST_APP"
echo "output: $output"
echo "status: $status"
assert_success
run /bin/bash -c "dokku apps:list | grep $TEST_APP"
echo "output: $output"
echo "status: $status"
assert_output $TEST_APP
run destroy_app
echo "output: $output"
echo "status: $status"
assert_success
run /bin/bash -c "dokku apps:create 1994testapp"
echo "output: $output"
echo "status: $status"
assert_success
run /bin/bash -c "dokku apps:create testapp:latest"
echo "output: $output"
echo "status: $status"
assert_failure
run /bin/bash -c "dokku apps:create testApp:latest"
echo "output: $output"
echo "status: $status"
assert_failure
run /bin/bash -c "dokku apps:create TestApp"
echo "output: $output"
echo "status: $status"
assert_failure
run /bin/bash -c "dokku apps:create test/app"
echo "output: $output"
echo "status: $status"
assert_failure
run /bin/bash -c "dokku apps:create test_app"
echo "output: $output"
echo "status: $status"
assert_failure
run /bin/bash -c "dokku apps:create 'test;id'"
echo "output: $output"
echo "status: $status"
assert_failure
run /bin/bash -c "dokku apps:create 'test\$cmd'"
echo "output: $output"
echo "status: $status"
assert_failure
run /bin/bash -c "dokku apps:create 'test|cmd'"
echo "output: $output"
echo "status: $status"
assert_failure
run /bin/bash -c "dokku apps:create 'test&cmd'"
echo "output: $output"
echo "status: $status"
assert_failure
run /bin/bash -c "dokku --app $TEST_APP apps:create"
echo "output: $output"
echo "status: $status"
assert_success
run /bin/bash -c "dokku apps:list | grep $TEST_APP"
echo "output: $output"
echo "status: $status"
assert_output $TEST_APP
run destroy_app
echo "output: $output"
echo "status: $status"
assert_success
}
@test "(apps) app autocreate disabled" {
run /bin/bash -c "dokku apps:set --global disable-autocreation true"
echo "output: $output"
echo "status: $status"
assert_success
run deploy_app
echo "output: $output"
echo "status: $status"
assert_failure
run /bin/bash -c "dokku apps:set --global disable-autocreation"
}
@test "(apps) apps:destroy" {
run create_app
echo "output: $output"
echo "status: $status"
assert_success
run /bin/bash -c "dokku --force apps:destroy $TEST_APP"
echo "output: $output"
echo "status: $status"
assert_success
run create_app
echo "output: $output"
echo "status: $status"
assert_success
run /bin/bash -c "dokku --force --app $TEST_APP apps:destroy"
echo "output: $output"
echo "status: $status"
assert_success
}
@test "(apps) apps:rename" {
run deploy_app
echo "output: $output"
echo "status: $status"
assert_success
run /bin/bash -c "cat $DOKKU_ROOT/$TEST_APP/hooks/pre-receive"
echo "output: $output"
echo "status: $status"
assert_success
assert_output_contains "git-hook \"$TEST_APP\""
run /bin/bash -c "dokku apps:rename $TEST_APP great-test-name"
echo "output: $output"
echo "status: $status"
assert_success
run /bin/bash -c "cat $DOKKU_ROOT/great-test-name/hooks/pre-receive"
echo "output: $output"
echo "status: $status"
assert_success
assert_output_contains "git-hook \"great-test-name\""
run /bin/bash -c "dokku apps:list | grep $TEST_APP"
echo "output: $output"
echo "status: $status"
assert_output_not_exists
run /bin/bash -c "curl --silent --write-out '%{http_code}\n' $(dokku url great-test-name) | grep 404"
echo "output: $output"
echo "status: $status"
assert_output_not_exists
run /bin/bash -c "dokku --force apps:destroy great-test-name"
echo "output: $output"
echo "status: $status"
assert_success
run /bin/bash -c "dokku apps:create $TEST_APP"
echo "output: $output"
echo "status: $status"
assert_success
run /bin/bash -c "dokku buildpacks:add $TEST_APP https://github.com/heroku/heroku-buildpack-ruby.git"
echo "output: $output"
echo "status: $status"
assert_success
run /bin/bash -c "dokku config:set --no-restart $TEST_APP KEY=VALUE-$TEST_APP"
echo "output: $output"
echo "status: $status"
assert_success
run /bin/bash -c "dokku docker-options:add $TEST_APP deploy --no-healthcheck"
echo "output: $output"
echo "status: $status"
assert_success
run /bin/bash -c "dokku git:set $TEST_APP deploy-branch SOME_BRANCH_NAME"
echo "output: $output"
echo "status: $status"
assert_success
run /bin/bash -c "dokku network:set $TEST_APP attach-post-create test-network"
echo "output: $output"
echo "status: $status"
assert_success
run /bin/bash -c "dokku nginx:set $TEST_APP bind-address-ipv4 127.0.0.1"
echo "output: $output"
echo "status: $status"
assert_success
run /bin/bash -c "dokku resource:limit --memory 100 $TEST_APP"
echo "output: $output"
echo "status: $status"
assert_success
run /bin/bash -c "dokku apps:rename $TEST_APP great-test-name"
echo "output: $output"
echo "status: $status"
assert_success
run /bin/bash -c "dokku buildpacks:report great-test-name --buildpacks-list"
echo "output: $output"
echo "status: $status"
assert_success
assert_output "https://github.com/heroku/heroku-buildpack-ruby.git"
run /bin/bash -c "dokku config:get great-test-name KEY"
echo "output: $output"
echo "status: $status"
assert_success
assert_output "VALUE-$TEST_APP"
run /bin/bash -c "dokku docker-options:report great-test-name --docker-options-deploy"
echo "output: $output"
echo "status: $status"
assert_success
assert_output_contains "--no-healthcheck"
run /bin/bash -c "dokku git:report great-test-name --git-deploy-branch"
echo "output: $output"
echo "status: $status"
assert_success
assert_output "SOME_BRANCH_NAME"
run /bin/bash -c "dokku network:report great-test-name --network-attach-post-create"
echo "output: $output"
echo "status: $status"
assert_success
assert_output "test-network"
run /bin/bash -c "dokku nginx:report great-test-name --nginx-bind-address-ipv4"
echo "output: $output"
echo "status: $status"
assert_success
assert_output "127.0.0.1"
run /bin/bash -c "dokku resource:report great-test-name --resource-_default_.limit.memory"
echo "output: $output"
echo "status: $status"
assert_success
assert_output "100"
run /bin/bash -c "dokku --force apps:destroy great-test-name"
echo "output: $output"
echo "status: $status"
assert_success
}
@test "(apps) apps:rename with tls" {
run setup_test_tls
echo "output: $output"
echo "status: $status"
assert_success
run deploy_app
echo "output: $output"
echo "status: $status"
assert_success
run /bin/bash -c "dokku apps:rename $TEST_APP great-test-name"
echo "output: $output"
echo "status: $status"
assert_success
run /bin/bash -c "dokku --force apps:destroy great-test-name"
echo "output: $output"
echo "status: $status"
assert_success
}
@test "(apps) apps:exists" {
run /bin/bash -c "dokku apps:exists $TEST_APP"
echo "output: $output"
echo "status: $status"
assert_failure
run create_app
echo "output: $output"
echo "status: $status"
assert_success
run /bin/bash -c "dokku apps:exists $TEST_APP"
echo "output: $output"
echo "status: $status"
assert_success
run /bin/bash -c "dokku --force apps:destroy $TEST_APP"
echo "output: $output"
echo "status: $status"
assert_success
}
@test "(apps) apps:lock/locked/unlock" {
run create_app
echo "output: $output"
echo "status: $status"
assert_success
run /bin/bash -c "dokku apps:report $TEST_APP --app-locked"
echo "output: $output"
echo "status: $status"
assert_output "false"
run /bin/bash -c "dokku apps:locked $TEST_APP"
echo "output: $output"
echo "status: $status"
assert_failure
run /bin/bash -c "dokku apps:lock $TEST_APP"
echo "output: $output"
echo "status: $status"
assert_success
run /bin/bash -c "dokku apps:report $TEST_APP --app-locked"
echo "output: $output"
echo "status: $status"
assert_output "true"
run /bin/bash -c "dokku apps:locked $TEST_APP"
echo "output: $output"
echo "status: $status"
assert_success
run /bin/bash -c "dokku apps:unlock $TEST_APP"
echo "output: $output"
echo "status: $status"
assert_success
run /bin/bash -c "dokku apps:report $TEST_APP --app-locked"
echo "output: $output"
echo "status: $status"
assert_output "false"
destroy_app
}
@test "(apps:report) emits new stripped JSON keys alongside legacy" {
create_app
run /bin/bash -c "dokku apps:report $TEST_APP --format json | jq -r 'has(\"dir\") and has(\"app-dir\")'"
assert_success
assert_output "true"
run /bin/bash -c "dokku apps:report $TEST_APP --format json | jq -r 'has(\"locked\") and has(\"app-locked\")'"
assert_success
assert_output "true"
run /bin/bash -c "dokku apps:report $TEST_APP --format json | jq -r 'has(\"deploy-source\") and has(\"app-deploy-source\")'"
assert_success
assert_output "true"
run /bin/bash -c "dokku apps:report $TEST_APP --format json | jq -r 'has(\"global-disable-autocreation\") and has(\"app-global-disable-autocreation\")'"
assert_success
assert_output "true"
destroy_app
}
@test "(apps:report --global) emits global-disable-autocreation" {
run /bin/bash -c "dokku apps:report --global --app-global-disable-autocreation"
echo "output: $output"
echo "status: $status"
assert_success
assert_output ""
run /bin/bash -c "dokku apps:set --global disable-autocreation true"
echo "output: $output"
echo "status: $status"
assert_success
run /bin/bash -c "dokku apps:report --global --app-global-disable-autocreation"
echo "output: $output"
echo "status: $status"
assert_success
assert_output "true"
run /bin/bash -c "dokku apps:report --global --format json | jq -r '.\"global-disable-autocreation\"'"
echo "output: $output"
echo "status: $status"
assert_success
assert_output "true"
run /bin/bash -c "dokku apps:report --global --format json | jq -r '.\"app-global-disable-autocreation\"'"
echo "output: $output"
echo "status: $status"
assert_success
assert_output "true"
create_app
run /bin/bash -c "dokku apps:report $TEST_APP --format json | jq -r '.\"global-disable-autocreation\"'"
echo "output: $output"
echo "status: $status"
assert_success
assert_output "true"
destroy_app
run /bin/bash -c "dokku apps:set --global disable-autocreation"
echo "output: $output"
echo "status: $status"
assert_success
}
@test "(apps:set) rejects dead writes" {
run /bin/bash -c "dokku apps:set --global deploy-source git"
echo "output: $output"
echo "status: $status"
assert_failure
assert_output_contains "Property cannot be specified globally"
run /bin/bash -c "dokku apps:set --global deploy-source-metadata foo"
echo "output: $output"
echo "status: $status"
assert_failure
assert_output_contains "Property cannot be specified globally"
create_app
run /bin/bash -c "dokku apps:set $TEST_APP disable-autocreation true"
echo "output: $output"
echo "status: $status"
assert_failure
assert_output_contains "Property can only be specified globally"
destroy_app
}