a
File size: 2,069 Bytes
dd7a3f0
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
094c13f
dd7a3f0
 
 
 
0b7bef2
dd7a3f0
094c13f
dd7a3f0
 
 
 
2f5b07b
 
 
 
 
 
 
 
 
dd7a3f0
 
 
 
 
2f5b07b
dd7a3f0
 
 
 
c1dd29e
094c13f
dd7a3f0
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
094c13f
 
 
 
 
 
2f5b07b
dd7a3f0
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
#!/usr/bin/env bash
set -euo pipefail

cd "$(dirname "$0")/.."

IMAGE_NAME="openposterdb-test"
CONTAINER_NAME="openposterdb-test"

if command -v podman &>/dev/null; then
    CTR=podman
elif command -v docker &>/dev/null; then
    CTR=docker
else
    echo "Error: neither podman nor docker found" >&2
    exit 1
fi

echo "=== Backend tests ==="
(cd api && cargo test)

echo ""
echo "=== Frontend unit tests ==="
(cd web && npx vitest run)

echo ""
echo "=== Container setup ==="

cleanup() {
    echo "=== Tearing down ==="
    $CTR rm -f "$CONTAINER_NAME" 2>/dev/null || true
    $CTR rmi -f "$IMAGE_NAME" 2>/dev/null || true
}
trap cleanup EXIT INT TERM

echo "Building container image..."
$CTR build -t "$IMAGE_NAME" --build-arg CARGO_FEATURES=test-support -f Containerfile .

ENV_ARGS=()
if [ -f api/.env ]; then
    echo "Loading API keys from api/.env"
    while IFS='=' read -r key value; do
        [[ -z "$key" || "$key" == \#* ]] && continue
        ENV_ARGS+=(-e "$key=$value")
    done < api/.env
fi

echo "Starting container..."
$CTR rm -f "$CONTAINER_NAME" 2>/dev/null || true
$CTR run -d --name "$CONTAINER_NAME" \
    -p 3333:3000 \
    --tmpfs /tmp/openposterdb-e2e \
    "${ENV_ARGS[@]}" \
    -e JWT_SECRET=abababababababababababababababababababababababababababababababab \
    -e LISTEN_ADDR=0.0.0.0:3000 \
    -e COOKIE_SECURE=false \
    -e CACHE_DIR=/tmp/openposterdb-e2e \
    -e DB_DIR=/tmp/openposterdb-e2e \
    -e FREE_KEY_ENABLED=true \
    "$IMAGE_NAME"

echo "Waiting for backend..."
for i in $(seq 1 60); do
    if curl -sf http://127.0.0.1:3333/api/auth/status > /dev/null 2>&1; then
        echo "Backend ready"
        break
    fi
    if [ "$i" -eq 60 ]; then
        echo "Backend did not start within 60 seconds"
        $CTR logs "$CONTAINER_NAME"
        exit 1
    fi
    sleep 1
done

echo ""
echo "=== Visual report ==="
scripts/visual-report.sh

echo ""
echo "=== E2E tests ==="
(cd web && npx playwright test --workers=1 --project=setup --project=settings --project=chromium --project=live)

echo ""
echo "All tests passed."