diff --git a/test/common.bash b/test/common.bash new file mode 100644 index 0000000..d70826a --- /dev/null +++ b/test/common.bash @@ -0,0 +1,22 @@ +#!/usr/bin/env bats + +# bats setup function +setup() { + export XDG_CACHE_HOME="$(mktemp -d)" + export KUBECONFIG="${XDG_CACHE_HOME}/config" +} + +# bats teardown function +teardown() { + rm -rf "$XDG_CACHE_HOME" +} + +use_config() { + cp "$BATS_TEST_DIRNAME/testdata/$1" $KUBECONFIG +} + +# wrappers around "kubectl config" command + +get_context() { + kubectl config current-context +} diff --git a/test/kubectx.bats b/test/kubectx.bats index 42057fc..9bc8a6d 100644 --- a/test/kubectx.bats +++ b/test/kubectx.bats @@ -2,12 +2,88 @@ COMMAND="$BATS_TEST_DIRNAME/../kubectx" +load common + @test "--help should not fail" { run ${COMMAND} --help + echo "$output" [ "$status" -eq 0 ] } @test "-h should not fail" { run ${COMMAND} -h + echo "$output" [ "$status" -eq 0 ] } + +@test "switch to previous context when no one exists" { + use_config config1 + + run ${COMMAND} - + echo "$output" + [ "$status" -eq 1 ] + [[ "$output" = "error: No previous context found." ]] +} + +@test "create one context and list contexts" { + use_config config1 + + run ${COMMAND} + echo "$output" + [ "$status" -eq 0 ] + [[ "$output" = "user1@cluster1" ]] +} + +@test "create two contexts and list contexts" { + use_config config2 + + run ${COMMAND} + echo "$output" + [ "$status" -eq 0 ] + [[ "$output" = *"user1@cluster1"* ]] + [[ "$output" = *"user2@cluster1"* ]] +} + +@test "create two contexts and select contexts" { + use_config config2 + + run ${COMMAND} user1@cluster1 + echo "$output" + [ "$status" -eq 0 ] + echo "$(get_context)" + [[ "$(get_context)" = "user1@cluster1" ]] + + run ${COMMAND} user2@cluster1 + echo "$output" + [ "$status" -eq 0 ] + echo "$(get_context)" + [[ "$(get_context)" = "user2@cluster1" ]] +} + +@test "create two contexts and switch between contexts" { + use_config config2 + + run ${COMMAND} user1@cluster1 + echo "$output" + [ "$status" -eq 0 ] + echo "$(get_context)" + [[ "$(get_context)" = "user1@cluster1" ]] + + run ${COMMAND} user2@cluster1 + echo "$output" + [ "$status" -eq 0 ] + echo "$(get_context)" + [[ "$(get_context)" = "user2@cluster1" ]] + + run ${COMMAND} - + echo "$output" + [ "$status" -eq 0 ] + echo "$(get_context)" + [[ "$(get_context)" = "user1@cluster1" ]] + + run ${COMMAND} - + echo "$output" + [ "$status" -eq 0 ] + echo "$(get_context)" + [[ "$(get_context)" = "user2@cluster1" ]] +} diff --git a/test/testdata/config1 b/test/testdata/config1 new file mode 100644 index 0000000..31ff876 --- /dev/null +++ b/test/testdata/config1 @@ -0,0 +1,18 @@ +# config with one context + +apiVersion: v1 +clusters: +- cluster: + server: "" + name: cluster1 +contexts: +- context: + cluster: cluster1 + user: user1 + name: user1@cluster1 +current-context: "" +kind: Config +preferences: {} +users: +- name: user1 + user: {} diff --git a/test/testdata/config2 b/test/testdata/config2 new file mode 100644 index 0000000..05db93c --- /dev/null +++ b/test/testdata/config2 @@ -0,0 +1,24 @@ +# config with two contexts + +apiVersion: v1 +clusters: +- cluster: + server: "" + name: cluster1 +contexts: +- context: + cluster: cluster1 + user: user1 + name: user1@cluster1 +- context: + cluster: cluster1 + user: user2 + name: user2@cluster1 +current-context: "" +kind: Config +preferences: {} +users: +- name: user1 + user: {} +- name: user2 + user: {}