asdf/test/update_command.bats
Jochen Schalanda 609e41e276 Use different exit code if updates are disabled
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
2020-03-13 10:14:28 +01:00

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 ]
}