yadm/test/106_accept_config.bats

203 lines
4.5 KiB
Bash

load common
load_fixtures
status=;output=; #; populated by bats run()
T_SECTION="test"
T_ATTRIB="attribute"
T_KEY="$T_SECTION.$T_ATTRIB"
T_VALUE="testvalue"
T_EXPECTED="[$T_SECTION]\n\t$T_ATTRIB = $T_VALUE"
setup() {
destroy_tmp
}
@test "Command 'config' (no parameters)" {
echo "
When 'config' command is provided alone,
Produce instructions about supported configuration options
Exit with 1
"
#; run config
run "${T_YADM_Y[@]}" config
#; validate status and output
[ $status -eq 0 ]
[[ "$output" =~ Please\ read\ the\ CONFIGURATION\ section ]]
}
@test "Command 'config' (read missing)" {
echo "
When 'config' command is provided,
and an attribute is provided
and the attribute isn't configured
Report an empty value
Exit with 0
"
#; run config
run "${T_YADM_Y[@]}" config $T_KEY
#; validate status and output
[ $status -eq 0 ]
[ "$output" = "" ]
}
@test "Command 'config' (write)" {
echo "
When 'config' command is provided,
and an attribute is provided
and a value is provided
Report no output
Update configuration file
Exit with 0
"
#; run config
run "${T_YADM_Y[@]}" config "$T_KEY" "$T_VALUE"
#; validate status and output
[ $status -eq 0 ]
[ "$output" = "" ]
#; validate configuration
local config
config=$(cat "$T_YADM_CONFIG")
local expected
expected=$(echo -e "$T_EXPECTED")
if [ "$config" != "$expected" ]; then
echo "ERROR: Config does not match expected"
echo "$config"
return 1
fi
}
@test "Command 'config' (read)" {
echo "
When 'config' command is provided,
and an attribute is provided
and the attribute is configured
Report the requested value
Exit with 0
"
#; manually load a value into the configuration
make_parents "$T_YADM_CONFIG"
echo -e "$T_EXPECTED" > "$T_YADM_CONFIG"
#; run config
run "${T_YADM_Y[@]}" config "$T_KEY"
#; validate status and output
[ $status -eq 0 ]
if [ "$output" != "$T_VALUE" ]; then
echo "ERROR: Incorrect value returned. Expected '$T_VALUE', got '$output'"
return 1
fi
}
@test "Command 'config' (update)" {
echo "
When 'config' command is provided,
and an attribute is provided
and the attribute is already configured
Report no output
Update configuration file
Exit with 0
"
#; manually load a value into the configuration
make_parents "$T_YADM_CONFIG"
echo -e "${T_EXPECTED}_with_extra_data" > "$T_YADM_CONFIG"
#; run config
run "${T_YADM_Y[@]}" config "$T_KEY" "$T_VALUE"
#; validate status and output
[ $status -eq 0 ]
[ "$output" = "" ]
#; validate configuration
local config
config=$(cat "$T_YADM_CONFIG")
local expected
expected=$(echo -e "$T_EXPECTED")
if [ "$config" != "$expected" ]; then
echo "ERROR: Config does not match expected"
echo "$config"
return 1
fi
}
@test "Command 'config' (local read)" {
echo "
When 'config' command is provided,
and an attribute is provided
and the attribute is configured
and the attribute is local.*
Fetch the value from the repo config
Report the requested value
Exit with 0
"
#; write local attributes
build_repo
for loption in class os host user; do
GIT_DIR="$T_DIR_REPO" git config "local.$loption" "custom_$loption"
done
#; run config
for loption in class os host user; do
run "${T_YADM_Y[@]}" config "local.$loption"
#; validate status and output
[ $status -eq 0 ]
if [ "$output" != "custom_$loption" ]; then
echo "ERROR: Incorrect value returned. Expected 'custom_$loption', got '$output'"
return 1
fi
done
}
@test "Command 'config' (local write)" {
echo "
When 'config' command is provided,
and an attribute is provided
and a value is provided
and the attribute is local.*
Report no output
Write the value to the repo config
Exit with 0
"
build_repo
local expected
local linecount
expected="[local]\n"
linecount=1
for loption in class os host user; do
#; update expected
expected="$expected\t$loption = custom_$loption\n"
((linecount+=1))
#; write local attributes
run "${T_YADM_Y[@]}" config "local.$loption" "custom_$loption"
#; validate status and output
[ $status -eq 0 ]
[ "$output" = "" ]
done
#; validate data
local config
config=$(tail "-$linecount" "$T_DIR_REPO/config")
expected=$(echo -ne "$expected")
if [ "$config" != "$expected" ]; then
echo "ERROR: Config does not match expected"
echo -e "$config"
echo -e "EXPECTED:\n$expected"
return 1
fi
}