tests: add functional tests for buildpacks plugin

This commit is contained in:
Jose Diaz-Gonzalez
2019-01-22 00:22:35 -05:00
parent 6cae92e1f1
commit d3d426a8d9
5 changed files with 221 additions and 3 deletions

View File

@@ -72,7 +72,7 @@ Buildpacks are executed in order, may be inserted at a specified index via the `
```shell
# will add the golang buildpack at the second position, bumping all proceeding ones by 1 position
dokku buildpacks:add node-js-app --index 2 https://github.com/heroku/heroku-buildpack-golang.git
dokku buildpacks:add --index 2 node-js-app https://github.com/heroku/heroku-buildpack-golang.git
```
### Overwriting a buildpack position

View File

@@ -35,7 +35,8 @@ func CommandClear(args []string) (err error) {
return
}
return common.PropertyDelete("buildpacks", appName, "buildpacks")
common.PropertyDelete("buildpacks", appName, "buildpacks")
return
}
// CommandList implements buildpacks:list

View File

@@ -114,7 +114,7 @@ func PropertyListAdd(pluginName string, appName string, property string, value s
lines = append(lines, line)
}
if index == 0 {
if index == 0 || index > len(scannedLines) {
lines = append(lines, value)
}

View File

@@ -0,0 +1,211 @@
#!/usr/bin/env bats
load test_helper
setup() {
global_setup
deploy_app
}
teardown() {
destroy_app
global_teardown
}
@test "(buildpacks) buildpacks:help" {
run /bin/bash -c "dokku buildpacks"
echo "output: $output"
echo "status: $status"
assert_output_contains "Manages buildpacks settings for an app"
help_output="$output"
run /bin/bash -c "dokku buildpacks:help"
echo "output: $output"
echo "status: $status"
assert_output_contains "Manages buildpacks settings for an app"
assert_output "$help_output"
}
@test "(buildpacks) buildpacks:add" {
run /bin/bash -c "dokku buildpacks:add $TEST_APP heroku/nodejs"
echo "output: $output"
echo "status: $status"
assert_success
run /bin/bash -c "dokku --quiet buildpacks:list $TEST_APP | xargs"
echo "output: $output"
echo "status: $status"
assert_output_contains "heroku/nodejs"
run /bin/bash -c "dokku buildpacks:add $TEST_APP heroku/ruby"
echo "output: $output"
echo "status: $status"
assert_success
run /bin/bash -c "dokku --quiet buildpacks:list $TEST_APP | xargs"
echo "output: $output"
echo "status: $status"
assert_output "heroku/nodejs heroku/ruby"
run /bin/bash -c "dokku buildpacks:add --index 1 $TEST_APP heroku/golang"
echo "output: $output"
echo "status: $status"
assert_success
run /bin/bash -c "dokku --quiet buildpacks:list $TEST_APP | xargs"
echo "output: $output"
echo "status: $status"
assert_output "heroku/golang heroku/nodejs heroku/ruby"
run /bin/bash -c "dokku buildpacks:add --index 2 $TEST_APP heroku/python"
echo "output: $output"
echo "status: $status"
assert_success
run /bin/bash -c "dokku --quiet buildpacks:list $TEST_APP | xargs"
echo "output: $output"
echo "status: $status"
assert_output "heroku/golang heroku/python heroku/nodejs heroku/ruby"
run /bin/bash -c "dokku buildpacks:add --index 100 $TEST_APP heroku/php"
echo "output: $output"
echo "status: $status"
assert_success
run /bin/bash -c "dokku --quiet buildpacks:list $TEST_APP | xargs"
echo "output: $output"
echo "status: $status"
assert_output "heroku/golang heroku/python heroku/nodejs heroku/ruby heroku/php"
}
@test "(buildpacks) buildpacks:set" {
run /bin/bash -c "dokku buildpacks:set $TEST_APP heroku/nodejs"
echo "output: $output"
echo "status: $status"
assert_success
run /bin/bash -c "dokku --quiet buildpacks:list $TEST_APP | xargs"
echo "output: $output"
echo "status: $status"
assert_output_contains "heroku/nodejs"
run /bin/bash -c "dokku buildpacks:set $TEST_APP heroku/ruby"
echo "output: $output"
echo "status: $status"
assert_success
run /bin/bash -c "dokku --quiet buildpacks:list $TEST_APP | xargs"
echo "output: $output"
echo "status: $status"
assert_output "heroku/ruby"
run /bin/bash -c "dokku buildpacks:set --index 1 $TEST_APP heroku/golang"
echo "output: $output"
echo "status: $status"
assert_success
run /bin/bash -c "dokku --quiet buildpacks:list $TEST_APP | xargs"
echo "output: $output"
echo "status: $status"
assert_output "heroku/golang"
run /bin/bash -c "dokku buildpacks:set --index 2 $TEST_APP heroku/python"
echo "output: $output"
echo "status: $status"
assert_success
run /bin/bash -c "dokku --quiet buildpacks:list $TEST_APP | xargs"
echo "output: $output"
echo "status: $status"
assert_output "heroku/golang heroku/python"
run /bin/bash -c "dokku buildpacks:set --index 100 $TEST_APP heroku/php"
echo "output: $output"
echo "status: $status"
assert_success
run /bin/bash -c "dokku --quiet buildpacks:list $TEST_APP | xargs"
echo "output: $output"
echo "status: $status"
assert_output "heroku/golang heroku/python heroku/php"
}
@test "(buildpacks) buildpacks:remove" {
run /bin/bash -c "dokku buildpacks:set $TEST_APP heroku/nodejs"
echo "output: $output"
echo "status: $status"
assert_success
run /bin/bash -c "dokku buildpacks:set --index 2 $TEST_APP heroku/ruby"
echo "output: $output"
echo "status: $status"
assert_success
run /bin/bash -c "dokku --quiet buildpacks:list $TEST_APP | xargs"
echo "output: $output"
echo "status: $status"
assert_output_contains "heroku/nodejs heroku/ruby"
run /bin/bash -c "dokku buildpacks:remove $TEST_APP heroku/nodejs"
echo "output: $output"
echo "status: $status"
assert_success
run /bin/bash -c "dokku --quiet buildpacks:list $TEST_APP | xargs"
echo "output: $output"
echo "status: $status"
assert_output_contains "heroku/ruby"
run /bin/bash -c "dokku buildpacks:remove $TEST_APP heroku/php"
echo "output: $output"
echo "status: $status"
assert_failure
run /bin/bash -c "dokku buildpacks:remove $TEST_APP heroku/ruby"
echo "output: $output"
echo "status: $status"
assert_success
run /bin/bash -c "dokku --quiet buildpacks:list $TEST_APP"
echo "output: $output"
echo "status: $status"
assert_output_not_exists
}
@test "(buildpacks) buildpacks:clear" {
run /bin/bash -c "dokku buildpacks:set $TEST_APP heroku/nodejs"
echo "output: $output"
echo "status: $status"
assert_success
run /bin/bash -c "dokku buildpacks:set --index 2 $TEST_APP heroku/ruby"
echo "output: $output"
echo "status: $status"
assert_success
run /bin/bash -c "dokku buildpacks:clear $TEST_APP"
echo "output: $output"
echo "status: $status"
assert_success
run /bin/bash -c "dokku --quiet buildpacks:list $TEST_APP"
echo "output: $output"
echo "status: $status"
assert_output_not_exists
run /bin/bash -c "dokku buildpacks:clear $TEST_APP"
echo "output: $output"
echo "status: $status"
assert_success
run /bin/bash -c "dokku buildpacks:clear $TEST_APP"
echo "output: $output"
echo "status: $status"
assert_success
run /bin/bash -c "dokku --quiet buildpacks:list $TEST_APP"
echo "output: $output"
echo "status: $status"
assert_output_not_exists
}

View File

@@ -82,6 +82,12 @@ assert_output_exists() {
[[ -n "$output" ]] || flunk "expected output, found none"
}
# ShellCheck doesn't know about $output from Bats
# shellcheck disable=SC2154
assert_output_not_exists() {
[[ -z "$output" ]] || flunk "expected no output, found some"
}
# ShellCheck doesn't know about $output from Bats
# shellcheck disable=SC2154
assert_output_contains() {