From 29f5d42ab5990d423b086268fc909b74cd4bf44e Mon Sep 17 00:00:00 2001 From: Stanislav Zhuk Date: Mon, 28 Apr 2025 16:24:25 +0300 Subject: [PATCH] test: update bats --- .github/workflows/tests.yml | 3 +- tests/test.bats | 70 +++++++++++++++++++++++++++---------- 2 files changed, 52 insertions(+), 21 deletions(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 54604ea..67a5936 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -19,9 +19,8 @@ concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true -# This is required for "gautamkrishnar/keepalive-workflow", see "ddev/github-action-add-on-test" permissions: - actions: write + contents: read jobs: tests: diff --git a/tests/test.bats b/tests/test.bats index 027a199..7b7d09e 100644 --- a/tests/test.bats +++ b/tests/test.bats @@ -1,44 +1,76 @@ +#!/usr/bin/env bats + +# Bats is a testing framework for Bash +# Documentation https://bats-core.readthedocs.io/en/stable/ +# Bats libraries documentation https://github.com/ztombol/bats-docs + +# For local tests, install bats-core, bats-assert, bats-file, bats-support +# And run this in the add-on root directory: +# bats ./tests/test.bats +# To exclude release tests: +# bats ./tests/test.bats --filter-tags '!release' +# For debugging: +# bats ./tests/test.bats --show-output-of-passing-tests --verbose-run --print-output-on-failure + setup() { set -eu -o pipefail - export DIR="$( cd "$( dirname "$BATS_TEST_FILENAME" )" >/dev/null 2>&1 && pwd )/.." - export TESTDIR=~/tmp/test-python2 - mkdir -p $TESTDIR - export PROJNAME=test-python2 + + # Override this variable for your add-on: + export GITHUB_REPO=stasadev/ddev-python2 + + TEST_BREW_PREFIX="$(brew --prefix 2>/dev/null || true)" + export BATS_LIB_PATH="${BATS_LIB_PATH}:${TEST_BREW_PREFIX}/lib:/usr/lib/bats" + bats_load_library bats-assert + bats_load_library bats-file + bats_load_library bats-support + + export DIR="$(cd "$(dirname "${BATS_TEST_FILENAME}")/.." >/dev/null 2>&1 && pwd)" + export PROJNAME="test-$(basename "${GITHUB_REPO}")" + mkdir -p ~/tmp + export TESTDIR=$(mktemp -d ~/tmp/${PROJNAME}.XXXXXX) export DDEV_NONINTERACTIVE=true - ddev delete -Oy ${PROJNAME} >/dev/null 2>&1 || true + export DDEV_NO_INSTRUMENTATION=true + ddev delete -Oy "${PROJNAME}" >/dev/null 2>&1 || true cd "${TESTDIR}" - ddev config --project-name=${PROJNAME} - ddev start -y >/dev/null + run ddev config --project-name="${PROJNAME}" --project-tld=ddev.site + assert_success + run ddev start -y + assert_success } health_checks() { - ddev exec "python -V 2>&1 | grep 'Python 2.7.18'" - ddev exec "python2.7 -V 2>&1 | grep 'Python 2.7.18'" + run ddev exec python -V + assert_success + assert_output "Python 2.7.18" + + run ddev exec python2.7 -V + assert_success + assert_output "Python 2.7.18" } teardown() { set -eu -o pipefail - cd ${TESTDIR} || ( printf "unable to cd to ${TESTDIR}\n" && exit 1 ) ddev delete -Oy ${PROJNAME} >/dev/null 2>&1 [ "${TESTDIR}" != "" ] && rm -rf ${TESTDIR} } @test "install from directory" { set -eu -o pipefail - cd ${TESTDIR} - echo "# ddev add-on get ${DIR} with project ${PROJNAME} in ${TESTDIR} ($(pwd))" >&3 - ddev add-on get ${DIR} - ddev restart + echo "# ddev add-on get ${DIR} with project ${PROJNAME} in $(pwd)" >&3 + run ddev add-on get "${DIR}" + assert_success + run ddev restart -y + assert_success health_checks } # bats test_tags=release @test "install from release" { set -eu -o pipefail - cd ${TESTDIR} || ( printf "unable to cd to ${TESTDIR}\n" && exit 1 ) - echo "# ddev add-on get stasadev/ddev-python2 with project ${PROJNAME} in ${TESTDIR} ($(pwd))" >&3 - ddev add-on get stasadev/ddev-python2 - ddev restart >/dev/null + echo "# ddev add-on get ${GITHUB_REPO} with project ${PROJNAME} in $(pwd)" >&3 + run ddev add-on get "${GITHUB_REPO}" + assert_success + run ddev restart -y + assert_success health_checks } -