mirror of
https://github.com/frappe/frappe_docker.git
synced 2026-06-18 14:15:09 +00:00
106 lines
3.4 KiB
Bash
Executable file
106 lines
3.4 KiB
Bash
Executable file
#!/usr/bin/env bats
|
|
|
|
setup() {
|
|
ROOT_DIR="$(cd "${BATS_TEST_DIRNAME}/../.." && pwd)"
|
|
MAIN_SCRIPT="${ROOT_DIR}/scripts/easy-docker/main.sh"
|
|
|
|
SYSTEM_BASH="$(command -v bash)"
|
|
SYSTEM_CAT="$(command -v cat)"
|
|
SYSTEM_CHMOD="$(command -v chmod)"
|
|
SYSTEM_DIRNAME="$(command -v dirname)"
|
|
SYSTEM_ENV="$(command -v env)"
|
|
SYSTEM_MKDIR="$(command -v mkdir)"
|
|
SYSTEM_MKTEMP="$(command -v mktemp)"
|
|
SYSTEM_RM="$(command -v rm)"
|
|
|
|
TEST_TMPDIR="$("${SYSTEM_MKTEMP}" -d)"
|
|
STUB_BIN="${TEST_TMPDIR}/bin"
|
|
"${SYSTEM_MKDIR}" -p "${STUB_BIN}"
|
|
|
|
write_passthrough_stub cat "${SYSTEM_CAT}"
|
|
write_passthrough_stub dirname "${SYSTEM_DIRNAME}"
|
|
}
|
|
|
|
teardown() {
|
|
if [ -n "${TEST_TMPDIR:-}" ] && [ -d "${TEST_TMPDIR}" ]; then
|
|
"${SYSTEM_RM}" -rf "${TEST_TMPDIR}"
|
|
fi
|
|
}
|
|
|
|
write_stub() {
|
|
local name="$1"
|
|
shift
|
|
|
|
{
|
|
printf '#!%s\n' "${SYSTEM_BASH}"
|
|
printf '%s\n' "$@"
|
|
} >"${STUB_BIN}/${name}"
|
|
"${SYSTEM_CHMOD}" +x "${STUB_BIN}/${name}"
|
|
}
|
|
|
|
write_passthrough_stub() {
|
|
local name="$1"
|
|
local target="$2"
|
|
|
|
{
|
|
printf '#!%s\n' "${SYSTEM_BASH}"
|
|
printf 'exec "%s" "$@"\n' "${target}"
|
|
} >"${STUB_BIN}/${name}"
|
|
"${SYSTEM_CHMOD}" +x "${STUB_BIN}/${name}"
|
|
}
|
|
|
|
@test "help prints usage and exits cleanly" {
|
|
run "${SYSTEM_ENV}" "PATH=${STUB_BIN}" "${SYSTEM_BASH}" "${MAIN_SCRIPT}" --help
|
|
|
|
[ "${status}" -eq 0 ]
|
|
[[ "${output}" == *"Usage: bash easy-docker.sh [options]"* ]]
|
|
[[ "${output}" == *"--no-installation-fallback"* ]]
|
|
}
|
|
|
|
@test "unknown option is rejected before startup" {
|
|
run "${SYSTEM_ENV}" "PATH=${STUB_BIN}" "${SYSTEM_BASH}" "${MAIN_SCRIPT}" --definitely-unknown
|
|
|
|
[ "${status}" -eq 1 ]
|
|
[[ "${output}" == *"Unknown option: --definitely-unknown"* ]]
|
|
[[ "${output}" == *"Usage: bash easy-docker.sh [options]"* ]]
|
|
}
|
|
|
|
@test "missing gum fails without interactive fallback when disabled" {
|
|
run "${SYSTEM_ENV}" "PATH=${STUB_BIN}" "${SYSTEM_BASH}" "${MAIN_SCRIPT}" --no-installation-fallback
|
|
|
|
[ "${status}" -eq 1 ]
|
|
[[ "${output}" == *"gum is not installed. Trying package manager installation..."* ]]
|
|
[[ "${output}" == *"No supported package manager was found."* ]]
|
|
[[ "${output}" == *"Installation fallback is disabled."* ]]
|
|
[[ "${output}" == *"Install gum manually:"* ]]
|
|
}
|
|
|
|
@test "missing docker stops after gum dependency succeeds" {
|
|
write_stub gum 'exit 0'
|
|
|
|
run "${SYSTEM_ENV}" "PATH=${STUB_BIN}" "${SYSTEM_BASH}" "${MAIN_SCRIPT}" --no-installation-fallback
|
|
|
|
[ "${status}" -eq 1 ]
|
|
[[ "${output}" == *"docker is not installed."* ]]
|
|
[[ "${output}" == *"Install Docker first:"* ]]
|
|
}
|
|
|
|
@test "missing jq stops after gum and docker dependencies succeed" {
|
|
write_stub gum 'exit 0'
|
|
# shellcheck disable=SC2016
|
|
write_stub docker \
|
|
'if [ "${1:-}" = "compose" ] && [ "${2:-}" = "version" ]; then exit 0; fi' \
|
|
'if [ "${1:-}" = "info" ]; then exit 0; fi' \
|
|
'case "$*" in' \
|
|
' "ps --help"| "exec --help"| "inspect --help"| "cp --help"| "build --help"| "compose config --help"| "compose up --help"| "compose down --help"| "compose logs --help"| "compose exec --help"| "compose pull --help"| "compose ps --help") exit 0 ;;' \
|
|
'esac' \
|
|
'exit 0'
|
|
|
|
run "${SYSTEM_ENV}" "PATH=${STUB_BIN}" "${SYSTEM_BASH}" "${MAIN_SCRIPT}" --no-installation-fallback
|
|
|
|
[ "${status}" -eq 1 ]
|
|
[[ "${output}" == *"jq is not installed. Trying package manager installation..."* ]]
|
|
[[ "${output}" == *"No supported package manager was found."* ]]
|
|
[[ "${output}" == *"Installation fallback is disabled."* ]]
|
|
[[ "${output}" == *"Install jq first:"* ]]
|
|
}
|