Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
118 changes: 83 additions & 35 deletions tests/test.bats
Original file line number Diff line number Diff line change
@@ -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() {
Expand Down Expand Up @@ -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="
Expand All @@ -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
Expand All @@ -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
}