bash-it/test/lib/helpers.bats

409 lines
15 KiB
Bash

#!/usr/bin/env bats
load ../test_helper
load ../../lib/composure
load ../../plugins/available/base.plugin
cite _about _param _example _group _author _version
load ../../lib/helpers
function local_setup {
mkdir -p "$BASH_IT"
lib_directory="$(cd "$(dirname "$0")" && pwd)"
# Use rsync to copy Bash-it to the temp folder
# rsync is faster than cp, since we can exclude the large ".git" folder
rsync -qavrKL -d --delete-excluded --exclude=.git $lib_directory/../.. "$BASH_IT"
rm -rf "$BASH_IT"/enabled
rm -rf "$BASH_IT"/aliases/enabled
rm -rf "$BASH_IT"/completion/enabled
rm -rf "$BASH_IT"/plugins/enabled
mkdir -p "$BASH_IT"/enabled
mkdir -p "$BASH_IT"/aliases/enabled
mkdir -p "$BASH_IT"/completion/enabled
mkdir -p "$BASH_IT"/plugins/enabled
}
# TODO Create global __is_enabled function
# TODO Create global __get_base_name function
# TODO Create global __get_enabled_name function
@test "helpers: enable the todo.txt-cli aliases through the bash-it function" {
run bash-it enable alias "todo.txt-cli"
assert_line "0" 'todo.txt-cli enabled with priority 150.'
assert [ -L "$BASH_IT/enabled/150---todo.txt-cli.aliases.bash" ]
}
@test "helpers: enable the curl aliases" {
run _enable-alias "curl"
assert_line "0" 'curl enabled with priority 150.'
assert [ -L "$BASH_IT/enabled/150---curl.aliases.bash" ]
}
@test "helpers: enable the apm completion through the bash-it function" {
run bash-it enable completion "apm"
assert_line "0" 'apm enabled with priority 350.'
assert [ -L "$BASH_IT/enabled/350---apm.completion.bash" ]
}
@test "helpers: enable the brew completion" {
run _enable-completion "brew"
assert_line "0" 'brew enabled with priority 350.'
assert [ -L "$BASH_IT/enabled/350---brew.completion.bash" ]
}
@test "helpers: enable the node plugin" {
run _enable-plugin "node"
assert_line "0" 'node enabled with priority 250.'
assert [ -L "$BASH_IT/enabled/250---node.plugin.bash" ]
assert_equal "../plugins/available/node.plugin.bash" "`readlink $BASH_IT/enabled/250---node.plugin.bash`"
}
@test "helpers: enable the node plugin through the bash-it function" {
run bash-it enable plugin "node"
assert_line "0" 'node enabled with priority 250.'
assert [ -L "$BASH_IT/enabled/250---node.plugin.bash" ]
}
@test "helpers: enable the node and nvm plugins through the bash-it function" {
run bash-it enable plugin "node" "nvm"
assert_line "0" 'node enabled with priority 250.'
assert_line "1" 'nvm enabled with priority 225.'
assert [ -L "$BASH_IT/enabled/250---node.plugin.bash" ]
assert [ -L "$BASH_IT/enabled/225---nvm.plugin.bash" ]
}
@test "helpers: enable the foo-unkown and nvm plugins through the bash-it function" {
run bash-it enable plugin "foo-unknown" "nvm"
assert_line "0" 'sorry, foo-unknown does not appear to be an available plugin.'
assert_line "1" 'nvm enabled with priority 225.'
assert [ -L "$BASH_IT/enabled/225---nvm.plugin.bash" ]
}
@test "helpers: enable the nvm plugin" {
run _enable-plugin "nvm"
assert_line "0" 'nvm enabled with priority 225.'
assert [ -L "$BASH_IT/enabled/225---nvm.plugin.bash" ]
}
@test "helpers: enable an unknown plugin" {
run _enable-plugin "unknown-foo"
assert_line "0" 'sorry, unknown-foo does not appear to be an available plugin.'
# Check for both old an new structure
assert [ ! -L "$BASH_IT/plugins/enabled/250---unknown-foo.plugin.bash" ]
assert [ ! -L "$BASH_IT/plugins/enabled/unknown-foo.plugin.bash" ]
assert [ ! -L "$BASH_IT/enabled/250---unknown-foo.plugin.bash" ]
assert [ ! -L "$BASH_IT/enabled/unknown-foo.plugin.bash" ]
}
@test "helpers: enable an unknown plugin through the bash-it function" {
run bash-it enable plugin "unknown-foo"
echo "${lines[@]}"
assert_line "0" 'sorry, unknown-foo does not appear to be an available plugin.'
# Check for both old an new structure
assert [ ! -L "$BASH_IT/plugins/enabled/250---unknown-foo.plugin.bash" ]
assert [ ! -L "$BASH_IT/plugins/enabled/unknown-foo.plugin.bash" ]
assert [ ! -L "$BASH_IT/enabled/250---unknown-foo.plugin.bash" ]
assert [ ! -L "$BASH_IT/enabled/unknown-foo.plugin.bash" ]
}
@test "helpers: disable a plugin that is not enabled" {
run _disable-plugin "sdkman"
assert_line "0" 'sorry, sdkman does not appear to be an enabled plugin.'
}
@test "helpers: enable and disable the nvm plugin" {
run _enable-plugin "nvm"
assert_line "0" 'nvm enabled with priority 225.'
assert [ -L "$BASH_IT/enabled/225---nvm.plugin.bash" ]
assert [ ! -L "$BASH_IT/plugins/enabled/225---nvm.plugin.bash" ]
run _disable-plugin "nvm"
assert_line "0" 'nvm disabled.'
assert [ ! -L "$BASH_IT/enabled/225---nvm.plugin.bash" ]
}
@test "helpers: disable the nvm plugin if it was enabled with a priority, but in the component-specific directory" {
ln -s $BASH_IT/plugins/available/nvm.plugin.bash $BASH_IT/plugins/enabled/225---nvm.plugin.bash
assert [ -L "$BASH_IT/plugins/enabled/225---nvm.plugin.bash" ]
assert [ ! -L "$BASH_IT/enabled/225---nvm.plugin.bash" ]
run _disable-plugin "nvm"
assert_line "0" 'nvm disabled.'
assert [ ! -L "$BASH_IT/plugins/enabled/225---nvm.plugin.bash" ]
assert [ ! -L "$BASH_IT/enabled/225---nvm.plugin.bash" ]
}
@test "helpers: disable the nvm plugin if it was enabled without a priority" {
ln -s $BASH_IT/plugins/available/nvm.plugin.bash $BASH_IT/plugins/enabled/nvm.plugin.bash
assert [ -L "$BASH_IT/plugins/enabled/nvm.plugin.bash" ]
run _disable-plugin "nvm"
assert_line "0" 'nvm disabled.'
assert [ ! -L "$BASH_IT/plugins/enabled/nvm.plugin.bash" ]
}
@test "helpers: enable the nvm plugin if it was enabled without a priority" {
ln -s $BASH_IT/plugins/available/nvm.plugin.bash $BASH_IT/plugins/enabled/nvm.plugin.bash
assert [ -L "$BASH_IT/plugins/enabled/nvm.plugin.bash" ]
run _enable-plugin "nvm"
assert_line "0" 'nvm is already enabled.'
assert [ -L "$BASH_IT/plugins/enabled/nvm.plugin.bash" ]
assert [ ! -L "$BASH_IT/plugins/enabled/225---nvm.plugin.bash" ]
assert [ ! -L "$BASH_IT/enabled/225---nvm.plugin.bash" ]
}
@test "helpers: enable the nvm plugin if it was enabled with a priority, but in the component-specific directory" {
ln -s $BASH_IT/plugins/available/nvm.plugin.bash $BASH_IT/plugins/enabled/225---nvm.plugin.bash
assert [ -L "$BASH_IT/plugins/enabled/225---nvm.plugin.bash" ]
run _enable-plugin "nvm"
assert_line "0" 'nvm is already enabled.'
assert [ ! -L "$BASH_IT/plugins/enabled/nvm.plugin.bash" ]
assert [ -L "$BASH_IT/plugins/enabled/225---nvm.plugin.bash" ]
assert [ ! -L "$BASH_IT/enabled/225---nvm.plugin.bash" ]
}
@test "helpers: enable the nvm plugin twice" {
run _enable-plugin "nvm"
assert_line "0" 'nvm enabled with priority 225.'
assert [ -L "$BASH_IT/enabled/225---nvm.plugin.bash" ]
run _enable-plugin "nvm"
assert_line "0" 'nvm is already enabled.'
assert [ -L "$BASH_IT/enabled/225---nvm.plugin.bash" ]
}
@test "helpers: migrate enabled plugins that don't use the new priority-based configuration" {
ln -s $BASH_IT/plugins/available/nvm.plugin.bash $BASH_IT/plugins/enabled/nvm.plugin.bash
assert [ -L "$BASH_IT/plugins/enabled/nvm.plugin.bash" ]
ln -s $BASH_IT/plugins/available/node.plugin.bash $BASH_IT/plugins/enabled/node.plugin.bash
assert [ -L "$BASH_IT/plugins/enabled/node.plugin.bash" ]
ln -s $BASH_IT/aliases/available/todo.txt-cli.aliases.bash $BASH_IT/aliases/enabled/todo.txt-cli.aliases.bash
assert [ -L "$BASH_IT/aliases/enabled/todo.txt-cli.aliases.bash" ]
run _enable-plugin "ssh"
assert [ -L "$BASH_IT/enabled/250---ssh.plugin.bash" ]
run _bash-it-migrate
assert [ -L "$BASH_IT/enabled/225---nvm.plugin.bash" ]
assert [ -L "$BASH_IT/enabled/250---node.plugin.bash" ]
assert [ -L "$BASH_IT/enabled/250---ssh.plugin.bash" ]
assert [ -L "$BASH_IT/enabled/150---todo.txt-cli.aliases.bash" ]
assert [ ! -L "$BASH_IT/plugins/enabled/node.plugin.bash" ]
assert [ ! -L "$BASH_IT/plugins/enabled/nvm.plugin.bash" ]
assert [ ! -L "$BASH_IT/aliases/enabled/todo.txt-cli.aliases.bash" ]
}
@test "helpers: migrate enabled plugins that use the new priority-based configuration in the individual directories" {
ln -s $BASH_IT/plugins/available/nvm.plugin.bash $BASH_IT/plugins/enabled/225---nvm.plugin.bash
assert [ -L "$BASH_IT/plugins/enabled/225---nvm.plugin.bash" ]
ln -s $BASH_IT/plugins/available/node.plugin.bash $BASH_IT/plugins/enabled/250---node.plugin.bash
assert [ -L "$BASH_IT/plugins/enabled/250---node.plugin.bash" ]
ln -s $BASH_IT/aliases/available/todo.txt-cli.aliases.bash $BASH_IT/aliases/enabled/250---todo.txt-cli.aliases.bash
assert [ -L "$BASH_IT/aliases/enabled/250---todo.txt-cli.aliases.bash" ]
run _enable-plugin "ssh"
assert [ -L "$BASH_IT/enabled/250---ssh.plugin.bash" ]
run _bash-it-migrate
assert [ -L "$BASH_IT/enabled/225---nvm.plugin.bash" ]
assert [ -L "$BASH_IT/enabled/250---node.plugin.bash" ]
assert [ -L "$BASH_IT/enabled/250---ssh.plugin.bash" ]
assert [ -L "$BASH_IT/enabled/150---todo.txt-cli.aliases.bash" ]
assert [ ! -L "$BASH_IT/plugins/enabled/225----node.plugin.bash" ]
assert [ ! -L "$BASH_IT/plugins/enabled/250----nvm.plugin.bash" ]
assert [ ! -L "$BASH_IT/aliases/enabled/250----todo.txt-cli.aliases.bash" ]
}
@test "helpers: run the migrate command without anything to migrate and nothing enabled" {
run _bash-it-migrate
}
@test "helpers: run the migrate command without anything to migrate" {
run _enable-plugin "ssh"
assert [ -L "$BASH_IT/enabled/250---ssh.plugin.bash" ]
run _bash-it-migrate
assert [ -L "$BASH_IT/enabled/250---ssh.plugin.bash" ]
}
function __migrate_all_components() {
subdirectory="$1"
one_type="$2"
priority="$3"
for f in "${BASH_IT}/$subdirectory/available/"*.bash
do
to_enable=$(basename $f)
if [ -z "$priority" ]; then
ln -s "../available/$to_enable" "${BASH_IT}/${subdirectory}/enabled/$to_enable"
else
ln -s "../available/$to_enable" "${BASH_IT}/${subdirectory}/enabled/$priority---$to_enable"
fi
done
ls ${BASH_IT}/${subdirectory}/enabled
all_available=$(compgen -G "${BASH_IT}/${subdirectory}/available/*.$one_type.bash" | wc -l | xargs)
all_enabled_old=$(compgen -G "${BASH_IT}/${subdirectory}/enabled/*.$one_type.bash" | wc -l | xargs)
assert_equal "$all_available" "$all_enabled_old"
run bash-it migrate
all_enabled_old_after=$(compgen -G "${BASH_IT}/${subdirectory}/enabled/*.$one_type.bash" | wc -l | xargs)
assert_equal "0" "$all_enabled_old_after"
all_enabled_new_after=$(compgen -G "${BASH_IT}/enabled/*.$one_type.bash" | wc -l | xargs)
assert_equal "$all_enabled_old" "$all_enabled_new_after"
}
@test "helpers: migrate all plugins" {
subdirectory="plugins"
one_type="plugin"
__migrate_all_components "$subdirectory" "$one_type"
}
@test "helpers: migrate all aliases" {
subdirectory="aliases"
one_type="aliases"
__migrate_all_components "$subdirectory" "$one_type"
}
@test "helpers: migrate all completions" {
subdirectory="completion"
one_type="completion"
__migrate_all_components "$subdirectory" "$one_type"
}
@test "helpers: migrate all plugins with previous priority" {
subdirectory="plugins"
one_type="plugin"
__migrate_all_components "$subdirectory" "$one_type" "100"
}
@test "helpers: migrate all aliases with previous priority" {
subdirectory="aliases"
one_type="aliases"
__migrate_all_components "$subdirectory" "$one_type" "100"
}
@test "helpers: migrate all completions with previous priority" {
subdirectory="completion"
one_type="completion"
__migrate_all_components "$subdirectory" "$one_type" "100"
}
@test "helpers: verify that existing components are automatically migrated when something is enabled" {
ln -s $BASH_IT/plugins/available/nvm.plugin.bash $BASH_IT/plugins/enabled/nvm.plugin.bash
assert [ -L "$BASH_IT/plugins/enabled/nvm.plugin.bash" ]
run bash-it enable plugin "node"
assert_line "0" 'Migrating plugin nvm.'
assert_line "1" 'nvm disabled.'
assert_line "2" 'nvm enabled with priority 225.'
assert_line "3" 'node enabled with priority 250.'
assert [ ! -L "$BASH_IT/plugins/enabled/nvm.plugin.bash" ]
assert [ -L "$BASH_IT/enabled/225---nvm.plugin.bash" ]
assert [ -L "$BASH_IT/enabled/250---node.plugin.bash" ]
}
@test "helpers: verify that existing components are automatically migrated when something is disabled" {
ln -s $BASH_IT/plugins/available/nvm.plugin.bash $BASH_IT/plugins/enabled/nvm.plugin.bash
assert [ -L "$BASH_IT/plugins/enabled/nvm.plugin.bash" ]
ln -s $BASH_IT/plugins/available/node.plugin.bash $BASH_IT/plugins/enabled/250---node.plugin.bash
assert [ -L "$BASH_IT/plugins/enabled/250---node.plugin.bash" ]
run bash-it disable plugin "node"
assert_line "0" 'Migrating plugin node.'
assert_line "1" 'node disabled.'
assert_line "2" 'node enabled with priority 250.'
assert_line "3" 'Migrating plugin nvm.'
assert_line "4" 'nvm disabled.'
assert_line "5" 'nvm enabled with priority 225.'
assert_line "6" 'node disabled.'
assert [ ! -L "$BASH_IT/plugins/enabled/nvm.plugin.bash" ]
assert [ -L "$BASH_IT/enabled/225---nvm.plugin.bash" ]
assert [ ! -L "$BASH_IT/plugins/enabled/250---node.plugin.bash" ]
assert [ ! -L "$BASH_IT/enabled/250---node.plugin.bash" ]
}
@test "helpers: enable all plugins" {
run _enable-plugin "all"
local available=$(find $BASH_IT/plugins/available -name *.plugin.bash | wc -l | xargs)
local enabled=$(find $BASH_IT/enabled -name [0-9]*.plugin.bash | wc -l | xargs)
assert_equal "$available" "$enabled"
}
@test "helpers: disable all plugins" {
run _enable-plugin "all"
local available=$(find $BASH_IT/plugins/available -name *.plugin.bash | wc -l | xargs)
local enabled=$(find $BASH_IT/enabled -name [0-9]*.plugin.bash | wc -l | xargs)
assert_equal "$available" "$enabled"
run _enable-alias "ag"
assert [ -L "$BASH_IT/enabled/150---ag.aliases.bash" ]
run _disable-plugin "all"
local enabled2=$(find $BASH_IT/enabled -name [0-9]*.plugin.bash | wc -l | xargs)
assert_equal "0" "$enabled2"
assert [ -L "$BASH_IT/enabled/150---ag.aliases.bash" ]
}
@test "helpers: enable the ansible aliases through the bash-it function" {
run bash-it enable alias "ansible"
assert_line "0" 'ansible enabled with priority 150.'
assert [ -L "$BASH_IT/enabled/150---ansible.aliases.bash" ]
}
@test "helpers: describe the nvm plugin without enabling it" {
_bash-it-plugins | grep "nvm" | grep "\[ \]"
}
@test "helpers: describe the nvm plugin after enabling it" {
run _enable-plugin "nvm"
assert_line "0" 'nvm enabled with priority 225.'
assert [ -L "$BASH_IT/enabled/225---nvm.plugin.bash" ]
_bash-it-plugins | grep "nvm" | grep "\[x\]"
}
@test "helpers: describe the nvm plugin after enabling it in the old directory" {
ln -s $BASH_IT/plugins/available/nvm.plugin.bash $BASH_IT/plugins/enabled/nvm.plugin.bash
assert [ -L "$BASH_IT/plugins/enabled/nvm.plugin.bash" ]
_bash-it-plugins | grep "nvm" | grep "\[x\]"
}
@test "helpers: describe the nvm plugin after enabling it in the old directory with priority" {
ln -s $BASH_IT/plugins/available/nvm.plugin.bash $BASH_IT/plugins/enabled/225---nvm.plugin.bash
assert [ -L "$BASH_IT/plugins/enabled/225---nvm.plugin.bash" ]
_bash-it-plugins | grep "nvm" | grep "\[x\]"
}
@test "helpers: describe the todo.txt-cli aliases without enabling them" {
run _bash-it-aliases
assert_line "todo.txt-cli [ ] todo.txt-cli abbreviations"
}