mirror of
https://github.com/asdf-vm/asdf.git
synced 2024-11-15 09:38:16 -07:00
609e41e276
If asdf-vm was installed with a package manager and the user doesn't have the necessary permissions to update it with `asdf update`, asdf-vm emits an informational message and exits with exit code 1. This makes it hard to programmatically detect whether the update failed or wasn't even attempted because it's not possible. With this change, asdf-vm would exit with the exit code 42 if updates are disabled instead of exit code 1, which signals an error during update. Refs r-darwish/topgrade#367
108 lines
2.9 KiB
Bash
108 lines
2.9 KiB
Bash
#!/usr/bin/env bats
|
|
|
|
load test_helpers
|
|
|
|
setup() {
|
|
BASE_DIR=$(mktemp -dt asdf.XXXX)
|
|
HOME=$BASE_DIR/home
|
|
ASDF_DIR=$HOME/.asdf
|
|
git clone -o local "$(dirname "$BATS_TEST_DIRNAME")" "$ASDF_DIR"
|
|
git --git-dir "$ASDF_DIR/.git" remote add origin https://github.com/asdf-vm/asdf.git
|
|
mkdir -p "$ASDF_DIR/plugins"
|
|
mkdir -p "$ASDF_DIR/installs"
|
|
mkdir -p "$ASDF_DIR/shims"
|
|
mkdir -p "$ASDF_DIR/tmp"
|
|
ASDF_BIN="$ASDF_DIR/bin"
|
|
|
|
# shellcheck disable=SC2031
|
|
PATH=$ASDF_BIN:$ASDF_DIR/shims:$PATH
|
|
install_dummy_plugin
|
|
|
|
PROJECT_DIR=$HOME/project
|
|
mkdir $PROJECT_DIR
|
|
}
|
|
|
|
teardown() {
|
|
clean_asdf_dir
|
|
}
|
|
|
|
@test "asdf update --head should checkout the master branch" {
|
|
run asdf update --head
|
|
[ "$status" -eq 0 ]
|
|
cd $ASDF_DIR
|
|
[ $(git rev-parse --abbrev-ref HEAD) = "master" ]
|
|
}
|
|
|
|
@test "asdf update should checkout the latest non-RC tag" {
|
|
local tag=$(git tag | grep -vi "rc" | tail -1)
|
|
run asdf update
|
|
[ "$status" -eq 0 ]
|
|
cd $ASDF_DIR
|
|
git tag | grep $tag
|
|
[ "$?" -eq 0 ]
|
|
}
|
|
|
|
@test "asdf update should checkout the latest tag when configured with use_release_candidates = yes" {
|
|
local tag=$(git tag | tail -1)
|
|
export ASDF_CONFIG_DEFAULT_FILE=$BATS_TMPDIR/asdfrc_defaults
|
|
echo "use_release_candidates = yes" > $ASDF_CONFIG_DEFAULT_FILE
|
|
run asdf update
|
|
[ "$status" -eq 0 ]
|
|
cd $ASDF_DIR
|
|
git tag | grep $tag
|
|
[ "$?" -eq 0 ]
|
|
}
|
|
|
|
@test "asdf update is a noop for when updates are disabled" {
|
|
touch $ASDF_DIR/asdf_updates_disabled
|
|
run asdf update
|
|
[ "$status" -eq 42 ]
|
|
[ "$(echo -e "Update command disabled. Please use the package manager that you used to install asdf to upgrade asdf.")" == "$output" ]
|
|
}
|
|
|
|
@test "asdf update is a noop for non-git repos" {
|
|
rm -rf $ASDF_DIR/.git/
|
|
run asdf update
|
|
[ "$status" -eq 42 ]
|
|
[ "$(echo -e "Update command disabled. Please use the package manager that you used to install asdf to upgrade asdf.")" == "$output" ]
|
|
}
|
|
|
|
@test "asdf update fails with exit code 1" {
|
|
git --git-dir "$ASDF_DIR/.git" remote set-url origin https://this-host-does-not-exist.xyz
|
|
run asdf update
|
|
[ "$status" -eq 1 ]
|
|
}
|
|
|
|
@test "asdf update should not remove plugin versions" {
|
|
run asdf install dummy 1.1
|
|
[ "$status" -eq 0 ]
|
|
[ $(cat $ASDF_DIR/installs/dummy/1.1/version) = "1.1" ]
|
|
run asdf update
|
|
[ "$status" -eq 0 ]
|
|
[ -f $ASDF_DIR/installs/dummy/1.1/version ]
|
|
run asdf update --head
|
|
[ "$status" -eq 0 ]
|
|
[ -f $ASDF_DIR/installs/dummy/1.1/version ]
|
|
}
|
|
|
|
@test "asdf update should not remove plugins" {
|
|
# dummy plugin is already installed
|
|
run asdf update
|
|
[ "$status" -eq 0 ]
|
|
[ -d $ASDF_DIR/plugins/dummy ]
|
|
run asdf update --head
|
|
[ "$status" -eq 0 ]
|
|
[ -d $ASDF_DIR/plugins/dummy ]
|
|
}
|
|
|
|
@test "asdf update should not remove shims" {
|
|
run asdf install dummy 1.1
|
|
[ -f $ASDF_DIR/shims/dummy ]
|
|
run asdf update
|
|
[ "$status" -eq 0 ]
|
|
[ -f $ASDF_DIR/shims/dummy ]
|
|
run asdf update --head
|
|
[ "$status" -eq 0 ]
|
|
[ -f $ASDF_DIR/shims/dummy ]
|
|
}
|