#!/usr/bin/env bats setup() { source tests/helpers/mock-api.sh export GITEA_API_URL="http://localhost:18080" export GITEA_TOKEN="test-token-abc123" export PAGES_HOST="reports.example.com" export GITHUB_REPOSITORY="test-owner/test-repo" export GITHUB_SHA="abc123def456789012345678901234567890abcd" export GITHUB_RUN_ID="42" } teardown() { mock_stop } @test "pending status is POSTed with correct payload" { mock_start run bash scripts/report-status.sh pending "Building project" [ "$status" -eq 0 ] path=$(mock_get_request_path) [[ "$path" == "/api/v1/repos/test-owner/test-repo/statuses/abc123def456789012345678901234567890abcd" ]] body=$(mock_get_request_body) [[ "$body" == *'"state":"pending"'* ]] [[ "$body" == *'"description":"Building project"'* ]] [[ "$body" == *'"target_url":"http://localhost:18080/test-owner/test-repo/actions/runs/42"'* ]] method=$(mock_get_request_method) [[ "$method" == "POST" ]] } @test "success status with custom key and suite builds report URL" { mock_start run bash scripts/report-status.sh success "Unit tests OK" unit-test cucumber [ "$status" -eq 0 ] body=$(mock_get_request_body) [[ "$body" == *'"state":"success"'* ]] [[ "$body" == *'"context":"unit-test"'* ]] [[ "$body" == *'"target_url":"https://reports.example.com/test-owner/test-repo/reports/abc123de/cucumber/"'* ]] } @test "failure status constructs run URL when no suite" { mock_start run bash scripts/report-status.sh failure "Tests failed: 3 of 10" [ "$status" -eq 0 ] body=$(mock_get_request_body) [[ "$body" == *'"state":"failure"'* ]] [[ "$body" == *'"target_url":"http://localhost:18080/test-owner/test-repo/actions/runs/42"'* ]] } @test "default key when not provided" { mock_start run bash scripts/report-status.sh pending "Build started" [ "$status" -eq 0 ] body=$(mock_get_request_body) [[ "$body" == *'"context":"commit-abc123de"'* ]] } @test "API returns 500 causes exit 1" { mock_set_response 500 mock_start run bash scripts/report-status.sh success "Should fail" [ "$status" -eq 1 ] } @test "cross-repo: ROOT_COMMIT and ROOT_REPO override target" { export ROOT_COMMIT="rootabc123" export ROOT_REPO="services/temperature-store" mock_start run bash scripts/report-status.sh success "Deployed to staging" deploy-staging [ "$status" -eq 0 ] path=$(mock_get_request_path) [[ "$path" == "/api/v1/repos/services/temperature-store/statuses/rootabc123" ]] body=$(mock_get_request_body) [[ "$body" == *'"state":"success"'* ]] [[ "$body" == *'"context":"deploy-staging"'* ]] unset ROOT_COMMIT ROOT_REPO } @test "missing GITEA_API_URL causes exit 1 with error message" { unset GITEA_API_URL run bash scripts/report-status.sh pending "Test" [ "$status" -eq 1 ] [[ "$output" == *"ERROR"* || "$output" == *"GITEA_API_URL"* ]] } @test "missing GITEA_TOKEN causes exit 1 with error message" { unset GITEA_TOKEN run bash scripts/report-status.sh pending "Test" [ "$status" -eq 1 ] [[ "$output" == *"ERROR"* || "$output" == *"GITEA_TOKEN"* ]] } @test "missing required state argument causes exit 1" { mock_start run bash scripts/report-status.sh "" "desc" [ "$status" -eq 1 ] } @test "missing required description argument causes exit 1" { mock_start run bash scripts/report-status.sh pending "" [ "$status" -eq 1 ] }