Files
omarchy/test/shell.d/nvim-transparent-lines-migration-test.sh
T

85 lines
3.0 KiB
Bash
Executable File

#!/bin/bash
set -euo pipefail
source "$(dirname "$0")/base-test.sh"
test_dir=$(mktemp -d)
trap 'rm -rf "$test_dir"' EXIT
config="$test_dir/.config/nvim"
package="$test_dir/package"
transparency="plugin/after/transparency.lua"
lualine="lua/plugins/lualine-transparent.lua"
mkdir -p "$package/plugin/after" "$package/lua/plugins"
printf -- '-- new transparency\n' >"$package/$transparency"
printf -- '-- lualine\n' >"$package/$lualine"
printf -- '-- shipped transparency\n' >"$test_dir/shipped.lua"
# The real package and shipped files live outside this repo, so the migration
# reads a stand-in package and knows the stand-in shipped file by its hash.
shipped_hash=$(sha256sum <"$test_dir/shipped.lua" | cut -c1-64)
sed -e "s@/usr/share/omarchy-nvim/config@$package@" \
-e "s@6e31b917f13e16514ac94ff9270d47f24e76509a3e559ca85116a5aa2d61306a@$shipped_hash@" \
"$ROOT/migrations/1791723398.sh" >"$test_dir/migration.sh"
run_migration() {
HOME="$test_dir" bash -euo pipefail "$test_dir/migration.sh" >/dev/null 2>&1
}
reset_config() {
rm -rf "$config"
mkdir -p "$config/plugin/after" "$config/lua/plugins"
cp "$test_dir/shipped.lua" "$config/$transparency"
}
reset_config
run_migration
run_migration
cmp -s "$config/$transparency" "$package/$transparency" && cmp -s "$config/$lualine" "$package/$lualine" ||
fail "a shipped config takes the package's transparency file and lualine spec"
[[ -z $(find "$config" -name '*.new.*') ]] || fail "no staged files are left behind"
pass "a shipped config takes the package's transparency file and lualine spec"
reset_config
printf -- '-- mine\n' >"$config/$transparency"
printf -- '-- my lualine\n' >"$config/$lualine"
run_migration
[[ $(<"$config/$transparency") == "-- mine" && $(<"$config/$lualine") == "-- my lualine" ]] ||
fail "files the user changed or added are kept"
pass "files the user changed or added are kept"
reset_config
mkdir -p "$test_dir/dotfiles"
mv "$config/plugin" "$test_dir/dotfiles/plugin"
ln -s "$test_dir/dotfiles/plugin" "$config/plugin"
run_migration
cmp -s "$config/$transparency" "$test_dir/shipped.lua" && [[ ! -e $config/$lualine ]] ||
fail "a config a dotfile manager links in is left alone"
pass "a config a dotfile manager links in is left alone"
# An older package leaves the migration pending to run again after the update.
reset_config
mv "$package/$lualine" "$test_dir/lualine.lua"
if run_migration; then
fail "an older package leaves the migration pending"
fi
mv "$test_dir/lualine.lua" "$package/$lualine"
pass "an older package leaves the migration pending"
reset_config
chmod a-w "$config/plugin/after"
if run_migration; then
chmod u+w "$config/plugin/after"
fail "a write that fails leaves the migration pending"
fi
chmod u+w "$config/plugin/after"
cmp -s "$config/$transparency" "$test_dir/shipped.lua" || fail "a write that fails leaves the file as it was"
pass "a write that fails leaves the migration pending and the file as it was"
rm -rf "$config"
run_migration
[[ ! -e $config ]] || fail "a missing Neovim config is not created"
pass "a missing Neovim config is not created"