|
| 1 | +#!/usr/bin/env bats |
| 2 | + |
| 3 | +# Bats is a testing framework for Bash |
| 4 | +# Documentation https://bats-core.readthedocs.io/en/stable/ |
| 5 | +# Bats libraries documentation https://github.com/ztombol/bats-docs |
| 6 | + |
| 7 | +# For local tests, install bats-core, bats-assert, bats-file, bats-support |
| 8 | +# And run this in the add-on root directory: |
| 9 | +# bats ./tests/test.bats |
| 10 | +# To exclude release tests: |
| 11 | +# bats ./tests/test.bats --filter-tags '!release' |
| 12 | +# For debugging: |
| 13 | +# bats ./tests/test.bats --show-output-of-passing-tests --verbose-run --print-output-on-failure |
| 14 | + |
1 | 15 | setup() {
|
2 | 16 | set -eu -o pipefail
|
3 | 17 |
|
4 |
| - # Fail early if old ddev is installed |
5 |
| - ddev debug capabilities | grep multiple-dockerfiles >/dev/null || exit 3 |
| 18 | + # Override this variable for your add-on: |
| 19 | + export GITHUB_REPO=ddev/ddev-browsersync |
| 20 | + |
| 21 | + TEST_BREW_PREFIX="$(brew --prefix 2>/dev/null || true)" |
| 22 | + export BATS_LIB_PATH="${BATS_LIB_PATH}:${TEST_BREW_PREFIX}/lib:/usr/lib/bats" |
| 23 | + bats_load_library bats-assert |
| 24 | + bats_load_library bats-file |
| 25 | + bats_load_library bats-support |
| 26 | + |
| 27 | + export DIR="$(cd "$(dirname "${BATS_TEST_FILENAME}")/.." >/dev/null 2>&1 && pwd)" |
| 28 | + export PROJNAME="test-$(basename "${GITHUB_REPO}")" |
| 29 | + mkdir -p ~/tmp |
| 30 | + export TESTDIR=$(mktemp -d ~/tmp/${PROJNAME}.XXXXXX) |
| 31 | + export DDEV_NONINTERACTIVE=true |
| 32 | + export DDEV_NO_INSTRUMENTATION=true |
| 33 | + ddev delete -Oy "${PROJNAME}" >/dev/null 2>&1 || true |
6 | 34 |
|
7 |
| - export DIR="$( cd "$( dirname "$BATS_TEST_FILENAME" )" >/dev/null 2>&1 && pwd )/.." |
8 |
| - export TESTDIR=~/tmp/test-browsersync |
9 |
| - mkdir -p "${TESTDIR}" |
10 |
| - export PROJNAME=test-browsersync |
11 |
| - export DDEV_NON_INTERACTIVE=true |
12 |
| - ddev delete -Oy ${PROJNAME} >/dev/null || true |
| 35 | + # Copy script |
13 | 36 | cp tests/run-ddev-browsersync "${TESTDIR}"
|
| 37 | + |
14 | 38 | cd "${TESTDIR}"
|
15 |
| - ddev config --project-name=${PROJNAME} |
| 39 | + run ddev config --project-name="${PROJNAME}" --project-tld=ddev.site |
| 40 | + assert_success |
16 | 41 |
|
17 | 42 | # Add simple page to test against.
|
18 | 43 | echo "<html><head></head><body>this is a test</body>" >index.html
|
19 | 44 |
|
20 |
| - ddev start -y |
| 45 | + run ddev start -y |
| 46 | + assert_success |
| 47 | +} |
| 48 | + |
| 49 | +health_checks() { |
| 50 | + run curl -sfI https://${PROJNAME}.ddev.site:3000 |
| 51 | + assert_success |
| 52 | + assert_output --partial "HTTP/2 200" |
21 | 53 |
|
22 |
| - CURLCMD="curl -s --fail" |
23 |
| - # I can't currently get curl to trust mkcert CA on macOS |
24 |
| - if [[ "$OSTYPE" == "darwin"* ]]; then CURLCMD="curl -s -k --fail"; fi |
| 54 | + run curl -sf https://${PROJNAME}.ddev.site:3000 |
| 55 | + assert_success |
| 56 | + assert_output --partial "this is a test" |
25 | 57 | }
|
26 | 58 |
|
27 | 59 | teardown() {
|
28 | 60 | set -eu -o pipefail
|
29 |
| - cd ${TESTDIR} || ( printf "unable to cd to ${TESTDIR}\n" && exit 1 ) |
30 |
| - ddev delete -Oy ${PROJNAME} |
| 61 | + ddev delete -Oy ${PROJNAME} >/dev/null 2>&1 |
31 | 62 | [ "${TESTDIR}" != "" ] && rm -rf ${TESTDIR}
|
32 | 63 | }
|
33 | 64 |
|
34 |
| -healthcheck() { |
35 |
| - ${CURLCMD} https://${PROJNAME}.ddev.site:3000 | grep "this is a test" |
36 |
| -} |
37 |
| - |
38 | 65 | @test "install from directory" {
|
39 | 66 | set -eu -o pipefail
|
40 |
| - cd ${TESTDIR} |
41 |
| - echo "# ddev addon get ${DIR} with project ${PROJNAME} in ${TESTDIR} ($(pwd))" >&3 |
42 |
| - ddev addon get ${DIR} |
43 |
| - ddev restart |
| 67 | + |
| 68 | + echo "# ddev add-on get ${DIR} with project ${PROJNAME} in $(pwd)" >&3 |
| 69 | + run ddev add-on get "${DIR}" |
| 70 | + assert_success |
| 71 | + |
| 72 | + run ddev restart -y |
| 73 | + assert_success |
| 74 | + |
44 | 75 | ./run-ddev-browsersync &
|
45 | 76 | sleep 5
|
46 | 77 |
|
47 |
| - # Check service works |
48 |
| - healthcheck |
| 78 | + health_checks |
49 | 79 | }
|
50 | 80 |
|
| 81 | +# bats test_tags=release |
51 | 82 | @test "install from release" {
|
52 | 83 | set -eu -o pipefail
|
53 |
| - cd ${TESTDIR} || ( printf "unable to cd to ${TESTDIR}\n" && exit 1 ) |
54 |
| - echo "# ddev addon get ddev/ddev-browsersync with project ${PROJNAME} in ${TESTDIR} ($(pwd))" >&3 |
55 |
| - ddev addon get ddev/ddev-browsersync |
56 |
| - ddev restart |
| 84 | + |
| 85 | + echo "# ddev add-on get ${GITHUB_REPO} with project ${PROJNAME} in $(pwd)" >&3 |
| 86 | + run ddev add-on get "${GITHUB_REPO}" |
| 87 | + assert_success |
| 88 | + |
| 89 | + run ddev restart -y |
| 90 | + assert_success |
| 91 | + |
57 | 92 | ./run-ddev-browsersync &
|
58 | 93 | sleep 5
|
59 | 94 |
|
60 |
| - # Check service works |
61 |
| - healthcheck |
| 95 | + health_checks |
62 | 96 | }
|
63 | 97 |
|
64 | 98 | @test "ES module environment" {
|
65 | 99 | set -eu -o pipefail
|
66 |
| - cd ${TESTDIR} || ( printf "unable to cd to ${TESTDIR}\n" && exit 1 ) |
67 | 100 |
|
68 | 101 | # Setup NPM environment
|
69 | 102 | cp "${DIR}/tests/package.json" "${TESTDIR}"
|
70 | 103 |
|
71 |
| - echo "# ddev get ${DIR} with project ${PROJNAME} in ${TESTDIR} ($(pwd))" >&3 |
72 |
| - ddev addon get ${DIR} |
| 104 | + echo "# ddev add-on get ${DIR} with project ${PROJNAME} in $(pwd)" >&3 |
| 105 | + run ddev add-on get "${DIR}" |
| 106 | + assert_success |
| 107 | + |
| 108 | + run ddev restart -y |
| 109 | + assert_success |
73 | 110 |
|
74 |
| - ddev restart |
75 | 111 | ./run-ddev-browsersync &
|
76 | 112 | sleep 5
|
77 | 113 |
|
78 |
| - # Check service works |
79 |
| - healthcheck |
| 114 | + health_checks |
80 | 115 | }
|
0 commit comments