frappe_docker/tests/easy-docker/20_core_render.bats

179 lines
4.6 KiB
Bash
Executable file

#!/usr/bin/env bats
load 'test_helper.bash'
setup() {
easy_docker_test_begin
easy_docker_test_source_core_render_modules
unset ERPNEXT_VERSION
unset FRAPPE_BRANCH
}
teardown() {
easy_docker_test_end
}
@test "is_valid_stack_name accepts safe names" {
local name=""
for name in alpha alpha-1 alpha_1 alpha.1; do
run is_valid_stack_name "${name}"
[ "${status}" -eq 0 ]
done
}
@test "is_valid_stack_name rejects empty and unsafe names" {
local name=""
for name in "" "bad name" "bad/name" "bad:name" "bad*name"; do
run is_valid_stack_name "${name}"
[ "${status}" -eq 1 ]
done
}
@test "get_env_file_key_value parses exported and quoted values" {
local sandbox_root=""
local stack_dir=""
local env_file=""
sandbox_root="$(easy_docker_test_create_repo_sandbox "env-parse")"
easy_docker_test_override_repo_root "${sandbox_root}"
stack_dir="$(easy_docker_test_stack_dir "env-parse")"
mkdir -p "${stack_dir}"
env_file="${stack_dir}/stack.env"
cat >"${env_file}" <<'EOF'
# comment
export ERPNEXT_VERSION=15.9.0-test
STACK_NAME="My Stack"
IGNORED=value
EOF
run get_env_file_key_value "${env_file}" ERPNEXT_VERSION
[ "${status}" -eq 0 ]
[ "${output}" = "15.9.0-test" ]
run get_env_file_key_value "${env_file}" STACK_NAME
[ "${status}" -eq 0 ]
[ "${output}" = "My Stack" ]
}
@test "get_stack_compose_project_name normalizes metadata stack names" {
local sandbox_root=""
local stack_dir=""
sandbox_root="$(easy_docker_test_create_repo_sandbox "project-name")"
easy_docker_test_override_repo_root "${sandbox_root}"
stack_dir="$(easy_docker_test_stack_dir "project-name")"
mkdir -p "${stack_dir}"
cat >"${stack_dir}/metadata.json" <<'EOF'
{
"stack_name": "My Stack! 01"
}
EOF
run get_stack_compose_project_name "${stack_dir}"
[ "${status}" -eq 0 ]
[ "${output}" = "easydocker-my-stack-01" ]
}
@test "get_metadata_compose_files_lines returns compose file entries" {
local sandbox_root=""
local stack_dir=""
local expected=""
sandbox_root="$(easy_docker_test_create_repo_sandbox "compose-lines")"
easy_docker_test_override_repo_root "${sandbox_root}"
stack_dir="$(easy_docker_test_stack_dir "compose-lines")"
mkdir -p "${stack_dir}"
cat >"${stack_dir}/metadata.json" <<'EOF'
{
"stack_name": "compose-lines",
"compose_files": [
"compose.yaml",
"overrides/compose.proxy.yaml",
"overrides/compose.redis.yaml"
]
}
EOF
expected=$'compose.yaml\noverrides/compose.proxy.yaml\noverrides/compose.redis.yaml'
run get_metadata_compose_files_lines "${stack_dir}/metadata.json"
[ "${status}" -eq 0 ]
[ "${output}" = "${expected}" ]
}
@test "render_stack_compose_from_metadata writes generated compose with stubbed docker config" {
local sandbox_root=""
local stack_dir=""
local env_path=""
local generated_compose_path=""
local invocation_log=""
easy_docker_test_install_docker_stub
sandbox_root="$(easy_docker_test_create_repo_sandbox "render-smoke")"
easy_docker_test_override_repo_root "${sandbox_root}"
stack_dir="$(easy_docker_test_stack_dir "render-smoke")"
mkdir -p "${stack_dir}"
cat >"${sandbox_root}/compose.yaml" <<'EOF'
services:
backend:
image: frappe/backend
EOF
cat >"${sandbox_root}/overrides/compose.proxy.yaml" <<'EOF'
services:
frontend:
image: frappe/frontend
EOF
cat >"${sandbox_root}/overrides/compose.redis.yaml" <<'EOF'
services:
redis-cache:
image: redis:7
EOF
cat >"${stack_dir}/metadata.json" <<'EOF'
{
"stack_name": "My Stack! 01",
"compose_files": [
"compose.yaml",
"overrides/compose.proxy.yaml",
"overrides/compose.redis.yaml"
]
}
EOF
env_path="${stack_dir}/My Stack! 01.env"
cat >"${env_path}" <<'EOF'
DB_HOST=localhost
EOF
generated_compose_path="${stack_dir}/compose.generated.yaml"
invocation_log="${EASY_DOCKER_TEST_TMPDIR}/docker.invocations"
export ERPNEXT_VERSION="15.9.0-test"
run render_stack_compose_from_metadata "${stack_dir}"
[ "${status}" -eq 0 ]
[ -f "${generated_compose_path}" ]
[ ! -f "${generated_compose_path}.tmp" ]
run cat "${generated_compose_path}"
[ "${status}" -eq 0 ]
[[ "${output}" == *"invocation=docker compose --project-name easydocker-my-stack-01 --env-file ${env_path}"* ]]
[[ "${output}" == *"-f ${sandbox_root}/compose.yaml"* ]]
[[ "${output}" == *"-f ${sandbox_root}/overrides/compose.proxy.yaml"* ]]
[[ "${output}" == *"-f ${sandbox_root}/overrides/compose.redis.yaml"* ]]
[[ "${output}" == *"erpnext=15.9.0-test"* ]]
run cat "${invocation_log}"
[ "${status}" -eq 0 ]
[[ "${output}" == *"docker compose --project-name easydocker-my-stack-01 --env-file ${env_path} -f "* ]]
[[ "${output}" == *"config"* ]]
}