yadm/test/113_accept_jinja_alt.bats

176 lines
4.3 KiB
Bash

load common
load_fixtures
status=;output=; #; populated by bats run()
IN_REPO=(alt* "dir one")
export TEST_TREE_WITH_ALT=1
setup() {
destroy_tmp
build_repo "${IN_REPO[@]}"
}
function test_alt() {
local alt_type="$1"
local test_overwrite="$2"
local auto_alt="$3"
#; detemine test parameters
case $alt_type in
base)
real_name="alt-jinja"
file_content_match="-${T_SYS}-${T_HOST}-${T_USER}-${T_DISTRO}"
;;
override_all)
real_name="alt-jinja"
file_content_match="custom_class-custom_system-custom_host-custom_user-${T_DISTRO}"
;;
esac
if [ "$test_overwrite" = "true" ] ; then
#; create incorrect links (to overwrite)
echo "BAD_CONTENT" "$T_DIR_WORK/$real_name"
else
#; verify real file doesn't already exist
if [ -e "$T_DIR_WORK/$real_name" ] ; then
echo "ERROR: real file already exists before running yadm"
return 1
fi
fi
#; configure yadm.auto_alt=false
if [ "$auto_alt" = "false" ]; then
git config --file="$T_YADM_CONFIG" yadm.auto-alt false
fi
#; run yadm (alt or status)
if [ -z "$auto_alt" ]; then
run "${T_YADM_Y[@]}" alt
#; validate status and output
if [ "$status" != 0 ] || [[ ! "$output" =~ Creating.+$real_name ]]; then
echo "OUTPUT:$output"
echo "ERROR: Could not confirm status and output of alt command"
return 1;
fi
else
#; running any passed through Git command should trigger auto-alt
run "${T_YADM_Y[@]}" status
if [ -n "$auto_alt" ] && [[ "$output" =~ Creating.+$real_name ]]; then
echo "ERROR: Reporting of jinja processing should not happen"
return 1
fi
fi
#; validate link content
if [[ "$alt_type" =~ none ]] || [ "$auto_alt" = "false" ]; then
#; no real file should be present
if [ -L "$T_DIR_WORK/$real_name" ] ; then
echo "ERROR: Real file should not exist"
return 1
fi
else
#; correct real file should be present
local file_content
file_content=$(cat "$T_DIR_WORK/$real_name")
if [ "$file_content" != "$file_content_match" ]; then
echo "file_content: ${file_content}"
echo "expected_content: ${file_content_match}"
echo "ERROR: Link content is not correct"
return 1
fi
fi
}
@test "Command 'alt' (envtpl missing)" {
echo "
When the command 'alt' is provided
and file matches ##yadm.j2
Report jinja template as unprocessed
Exit with 0
"
# shellcheck source=/dev/null
YADM_TEST=1 source "$T_YADM"
process_global_args -Y "$T_DIR_YADM"
set_operating_system
configure_paths
status=0
output=$( ENVTPL_PROGRAM='envtpl_missing' main alt ) || {
status=$?
true
}
[ $status -eq 0 ]
[[ "$output" =~ envtpl.not.available ]]
}
@test "Command 'alt' (select jinja)" {
echo "
When the command 'alt' is provided
and file matches ##yadm.j2
Report jinja template processing
Verify that the correct content is written
Exit with 0
"
test_alt 'base' 'false' ''
}
@test "Command 'auto-alt' (enabled)" {
echo "
When a command possibly changes the repo
and auto-alt is configured true
and file matches ##yadm.j2
automatically process alternates
report no linking (not loud)
Verify that the correct content is written
"
test_alt 'base' 'false' 'true'
}
@test "Command 'auto-alt' (disabled)" {
echo "
When a command possibly changes the repo
and auto-alt is configured false
and file matches ##yadm.j2
Report no jinja template processing
Verify no content
"
test_alt 'base' 'false' 'false'
}
@test "Command 'alt' (overwrite existing content)" {
echo "
When the command 'alt' is provided
and file matches ##yadm.j2
and the real file exists, and is wrong
Report jinja template processing
Verify that the correct content is written
Exit with 0
"
test_alt 'base' 'true' ''
}
@test "Command 'alt' (overwritten settings)" {
echo "
When the command 'alt' is provided
and file matches ##yadm.j2
after setting local.*
Report jinja template processing
Verify that the correct content is written
Exit with 0
"
GIT_DIR="$T_DIR_REPO" git config local.os custom_system
GIT_DIR="$T_DIR_REPO" git config local.user custom_user
GIT_DIR="$T_DIR_REPO" git config local.hostname custom_host
GIT_DIR="$T_DIR_REPO" git config local.class custom_class
test_alt 'override_all' 'false' ''
}