From ed446d7791f97f831563f00a8dc65781a94e4447 Mon Sep 17 00:00:00 2001 From: tyler36 <7234392+tyler36@users.noreply.github.com> Date: Fri, 19 Sep 2025 09:47:57 +0900 Subject: [PATCH] refactor: refresh tests --- tests/test.bats | 118 ++++++++++++++++++++++++++++++++++-------------- 1 file changed, 83 insertions(+), 35 deletions(-) diff --git a/tests/test.bats b/tests/test.bats index fa5a268..ca0ac25 100644 --- a/tests/test.bats +++ b/tests/test.bats @@ -1,20 +1,53 @@ +#!/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-laravel-queue - mkdir -p $TESTDIR - export PROJNAME=test-laravel-queue - export DDEV_NON_INTERACTIVE=true - ddev delete -Oy ${PROJNAME} >/dev/null 2>&1 || true + # Override this variable for your add-on: + export GITHUB_REPO=tyler36/ddev-laravel-queue + + 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 + export DDEV_NO_INSTRUMENTATION=true + ddev delete -Oy "${PROJNAME}" >/dev/null 2>&1 || true cd "${TESTDIR}" + run ddev config --project-name="${PROJNAME}" --project-tld=ddev.site + assert_success + run ddev start -y + assert_success } teardown() { set -eu -o pipefail - cd ${TESTDIR} || ( printf "unable to cd to ${TESTDIR}\n" && exit 1 ) - ddev delete -Oy ${PROJNAME} - [ "${TESTDIR}" != "" ] && rm -rf ${TESTDIR} + ddev delete -Oy ${PROJNAME} >/dev/null 2>&1 + # Persist TESTDIR if running inside GitHub Actions. Useful for uploading test result artifacts + # See example at https://github.com/ddev/github-action-add-on-test#preserving-artifacts + if [ -n "${GITHUB_ENV:-}" ]; then + [ -e "${GITHUB_ENV:-}" ] && echo "TESTDIR=${HOME}/tmp/${PROJNAME}" >> "${GITHUB_ENV}" + else + [ "${TESTDIR}" != "" ] && rm -rf "${TESTDIR}" + fi } health_checks() { @@ -46,35 +79,44 @@ queue_checks() { @test "install from directory" { set -eu -o pipefail cd ${TESTDIR} - echo "# ddev add-on get ${DIR} with project ${PROJNAME} in ${TESTDIR} ($(pwd))" >&3 - ddev config --project-name=${PROJNAME} - ddev start -y >/dev/null - 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 } -@test "it processes jobs in Lavarel 11" { +@test "it processes jobs in Laravel" { set -eu -o pipefail cd ${TESTDIR} echo "# ddev add-on get ${DIR} with project ${PROJNAME} in ${TESTDIR} ($(pwd))" >&3 + # Setup a Laravel project - ddev config --project-type=laravel --docroot=public - ddev composer create --prefer-dist laravel/laravel:^11 - ddev exec "php artisan key:generate" - # Get addon and test - ddev add-on get ${DIR} - ddev restart - - queue_checks + run ddev config --project-type=laravel --docroot=public + assert_success + run ddev composer create --prefer-dist laravel/laravel + assert_success + run ddev exec "php artisan key:generate" + assert_success + + run ddev add-on get "${DIR}" + assert_success + + run ddev restart -y + assert_success + + health_checks } @test "it cleans up files from pre-release versions" { set -eu -o pipefail cd ${TESTDIR} - # echo "# ddev add-on get ${DIR} with project ${PROJNAME} in ${TESTDIR} ($(pwd))" >&3 - ddev config --project-name=${PROJNAME} - ddev start -y >/dev/null + + echo "# ddev add-on get ${DIR} with project ${PROJNAME} in ${TESTDIR} ($(pwd))" >&3 # Create fake pre-release files files=" @@ -84,20 +126,24 @@ queue_checks() { for file in $files; do echo '#ddev-generated' > $file if grep -q -v '#ddev-generated' $file; then - echo 'Fake prelease file should exist but does NOT.' + echo 'Fake pre-release file should exist but does NOT.' exit 1 fi done # Install the current release of the addon, which should remove the pre-release files. - ddev add-on get ${DIR} - ddev restart + run ddev add-on get "${DIR}" + assert_success + + run ddev restart -y + assert_success + health_checks # Check pre-release files were removed for file in $files; do if grep -q '#ddev-generated' $file; then - echo 'Fake prelease file exists but should NOT.' + echo 'Fake pre-release file exists but should NOT.' exit 1 fi done @@ -107,10 +153,12 @@ queue_checks() { @test "install from release" { set -eu -o pipefail cd ${TESTDIR} || ( printf "unable to cd to ${TESTDIR}\n" && exit 1 ) - echo "# ddev add-on get tyler36/ddev-laravel-queue with project ${PROJNAME} in ${TESTDIR} ($(pwd))" >&3 - ddev config --project-name=${PROJNAME} - ddev start -y >/dev/null - ddev add-on get tyler36/ddev-laravel-queue - 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 }