Add integration + Playwright smoke suite for post-deploy QA validation
Existing coverage was one integration test and zero e2e tests. Adds the thin, high-value integration/e2e layer unit tests can't reach (real Postgres wire contract, real browser flows) and wires it as a post-deploy smoke gate. - Seed a deterministic dev/QA admin user and fixed Development env key so HTTP-only tests can authenticate without per-run registration. - Expand the API integration suite: disabled-flag, unauthorized access, environment-document bootstrap, identity-override precedence, and auth login scenarios, reusing the existing black-box HTTP+Npgsql harness. - Add a Playwright suite for the admin SPA: login, nav, project/environment context selection, and feature create/toggle, against the real API. - Bind QA Postgres to 127.0.0.1 for direct seeding, add smoke-qa.sh and an ensure_node() bootstrap (the qa runner has no Node today), and wire a new smoke-qa CI job after deploy-qa.
This commit is contained in:
@@ -54,6 +54,28 @@ ensure_dotnet() {
|
||||
export DOTNET_ROOT="$install_dir"
|
||||
}
|
||||
|
||||
# Installs Node.js into $CI_ROOT/.node from the official prebuilt tarball if
|
||||
# `npm` isn't already on PATH, then prepends it to PATH for this process.
|
||||
# Mirrors ensure_dotnet() above - keeps bare runners (no Node preinstalled,
|
||||
# e.g. the self-hosted qa runner) working the same as a dev machine.
|
||||
ensure_node() {
|
||||
if command -v npm > /dev/null 2>&1; then
|
||||
return 0
|
||||
fi
|
||||
|
||||
local node_version="22.14.0"
|
||||
local install_dir="$CI_ROOT/.node"
|
||||
if [[ ! -x "$install_dir/bin/node" ]]; then
|
||||
log "node not found on PATH; installing Node.js v$node_version"
|
||||
local tarball="node-v${node_version}-linux-x64"
|
||||
curl -fsSL "https://nodejs.org/dist/v${node_version}/${tarball}.tar.xz" -o "/tmp/${tarball}.tar.xz"
|
||||
mkdir -p "$install_dir"
|
||||
tar -xJf "/tmp/${tarball}.tar.xz" -C "$install_dir" --strip-components=1
|
||||
rm -f "/tmp/${tarball}.tar.xz"
|
||||
fi
|
||||
export PATH="$install_dir/bin:$PATH"
|
||||
}
|
||||
|
||||
registry_login() {
|
||||
require_registry_vars
|
||||
[[ -n "$REGISTRY_USER" ]] || fail "REGISTRY_USER env var is required to push images"
|
||||
|
||||
30
scripts/ci/smoke-qa.sh
Executable file
30
scripts/ci/smoke-qa.sh
Executable file
@@ -0,0 +1,30 @@
|
||||
#!/usr/bin/env bash
|
||||
# Post-deploy validation for the QA environment: runs the API integration
|
||||
# suite (real HTTP + real Postgres, seeding/cleaning up its own data) and the
|
||||
# Playwright admin e2e suite against the just-deployed QA stack. Intended to
|
||||
# run immediately after deploy-qa.sh, on the same self-hosted qa runner, so
|
||||
# `localhost` resolves to the deployed containers.
|
||||
set -euo pipefail
|
||||
cd "$(dirname "${BASH_SOURCE[0]}")" && source ./lib.sh
|
||||
cd "$CI_ROOT"
|
||||
|
||||
ensure_dotnet
|
||||
ensure_node
|
||||
|
||||
QA_ADMIN_PORT="${QA_ADMIN_PORT:-3001}"
|
||||
BASE_URL="http://localhost:${QA_ADMIN_PORT}"
|
||||
|
||||
export MICCHECK_API_BASE_URL="$BASE_URL"
|
||||
export MICCHECK_DB_CONNECTION_STRING="${MICCHECK_DB_CONNECTION_STRING:-Host=localhost;Port=55432;Database=miccheck;Username=miccheck;Password=password}"
|
||||
|
||||
log "Running API integration suite against $BASE_URL"
|
||||
dotnet test tests/api/MicCheck.Api.Tests.Integration/MicCheck.Api.Tests.Integration.csproj -c Release --logger trx
|
||||
|
||||
log "Installing admin e2e dependencies"
|
||||
npm --prefix src/admin ci
|
||||
npm --prefix src/admin run e2e:install
|
||||
|
||||
log "Running Playwright admin e2e suite against $BASE_URL"
|
||||
E2E_BASE_URL="$BASE_URL" npm --prefix src/admin run e2e
|
||||
|
||||
log "smoke-qa.sh complete - QA environment validated end to end"
|
||||
Reference in New Issue
Block a user