asdf/test/uninstall_command.bats
Trevor Brown deef401fd3 feat(golang-rewrite): create asdf uninstall command
* Enable asdf uninstall BATS tests
* Create `toolversions.ParseFromCliArg` function
* Create `versions.Uninstall` function
* Update `ParseFromCliArg` function to handle latest version without optional filter value
* Create `asdf uninstall` command
* Comment out invalid test
* Address linter warnings
2024-12-18 10:21:42 -05:00

108 lines
2.9 KiB
Bash

#!/usr/bin/env bats
load test_helpers
setup() {
setup_asdf_dir
install_dummy_plugin
PROJECT_DIR="$HOME/project"
mkdir -p "$PROJECT_DIR"
}
teardown() {
clean_asdf_dir
}
@test "uninstall_command should fail when no such version is installed" {
run asdf uninstall dummy 3.14
[ "$output" = "No such version" ]
[ "$status" -eq 1 ]
}
@test "uninstall_command should remove the plugin with that version from asdf" {
run asdf install dummy 1.1.0
[ "$status" -eq 0 ]
[ "$(cat "$ASDF_DIR/installs/dummy/1.1.0/version")" = "1.1.0" ]
run asdf uninstall dummy 1.1.0
[ ! -f "$ASDF_DIR/installs/dummy/1.1.0/version" ]
}
@test "uninstall_command should invoke the plugin bin/uninstall if available" {
run asdf install dummy 1.1.0
[ "$status" -eq 0 ]
mkdir -p "$ASDF_DIR/plugins/dummy/bin"
printf '%s\n' "echo custom uninstall" >"$ASDF_DIR/plugins/dummy/bin/uninstall"
chmod 755 "$ASDF_DIR/plugins/dummy/bin/uninstall"
run asdf uninstall dummy 1.1.0
[ "$output" = "custom uninstall" ]
[ "$status" -eq 0 ]
}
@test "uninstall_command should remove the plugin shims if no other version is installed" {
run asdf install dummy 1.1.0
[ -f "$ASDF_DIR/shims/dummy" ]
run asdf uninstall dummy 1.1.0
[ ! -f "$ASDF_DIR/shims/dummy" ]
}
@test "uninstall_command should leave the plugin shims if other version is installed" {
run asdf install dummy 1.0.0
[ -f "$ASDF_DIR/installs/dummy/1.0.0/bin/dummy" ]
run asdf install dummy 1.1.0
[ -f "$ASDF_DIR/installs/dummy/1.1.0/bin/dummy" ]
[ -f "$ASDF_DIR/shims/dummy" ]
run asdf uninstall dummy 1.0.0
[ -f "$ASDF_DIR/shims/dummy" ]
}
@test "uninstall_command should remove relevant asdf-plugin metadata" {
run asdf install dummy 1.0.0
[ -f "$ASDF_DIR/installs/dummy/1.0.0/bin/dummy" ]
run asdf install dummy 1.1.0
[ -f "$ASDF_DIR/installs/dummy/1.1.0/bin/dummy" ]
run asdf uninstall dummy 1.0.0
run grep "asdf-plugin: dummy 1.1.0" "$ASDF_DIR/shims/dummy"
[ "$status" -eq 0 ]
run grep "asdf-plugin: dummy 1.0.0" "$ASDF_DIR/shims/dummy"
[ "$status" -eq 1 ]
}
# Disabled as this test represents an invalid state. A shim (`gummy`) should
# never exist unless it referenced an existing tool and version.
#
#@test "uninstall_command should not remove other unrelated shims" {
# run asdf install dummy 1.0.0
# [ -f "$ASDF_DIR/shims/dummy" ]
# touch "$ASDF_DIR/shims/gummy"
# [ -f "$ASDF_DIR/shims/gummy" ]
# run asdf uninstall dummy 1.0.0
# [ -f "$ASDF_DIR/shims/gummy" ]
#}
@test "uninstall command executes configured pre hook" {
cat >"$HOME/.asdfrc" <<-'EOM'
pre_asdf_uninstall_dummy = echo will uninstall dummy $1
EOM
run asdf install dummy 1.0.0
run asdf uninstall dummy 1.0.0
[ "$output" = "will uninstall dummy 1.0.0" ]
}
@test "uninstall command executes configured post hook" {
cat >"$HOME/.asdfrc" <<-'EOM'
post_asdf_uninstall_dummy = echo removed dummy $1
EOM
run asdf install dummy 1.0.0
run asdf uninstall dummy 1.0.0
[ "$output" = "removed dummy 1.0.0" ]
}