94 lines
2.4 KiB
Bash
94 lines
2.4 KiB
Bash
#!/bin/bash
|
|
# Coverage rate report generator for gochat project
|
|
# Generates per-package and overall coverage metrics aligned with Chatwoot test patterns.
|
|
set -e
|
|
|
|
cd "$(dirname "$0")/.."
|
|
export GOPROXY=https://goproxy.cn,direct
|
|
export GONOSUMCHECK=*
|
|
export GONOSUMDB=*
|
|
export GOFLAGS=-mod=mod
|
|
|
|
REPORT_DIR="coverage_reports"
|
|
mkdir -p "$REPORT_DIR"
|
|
|
|
echo "=== GoChat Test Coverage Report ==="
|
|
echo "Generated: $(date)"
|
|
echo ""
|
|
|
|
# Packages to test (only those that compile cleanly)
|
|
TESTABLE_PKGS=(
|
|
"./internal/model"
|
|
"./internal/model/channel"
|
|
"./internal/auth"
|
|
"./internal/config"
|
|
"./pkg/testutil"
|
|
"./pkg/crypto"
|
|
"./internal/repository"
|
|
"./internal/pubsub"
|
|
)
|
|
|
|
TOTAL_COVERAGE=0
|
|
PKG_COUNT=0
|
|
PASS_COUNT=0
|
|
FAIL_COUNT=0
|
|
TOTAL_TESTS=0
|
|
TOTAL_ASSERTIONS=0
|
|
|
|
echo "| Package | Tests | Coverage | Status |"
|
|
echo "|---------|-------|----------|--------|"
|
|
|
|
for pkg in "${TESTABLE_PKGS[@]}"; do
|
|
COVERAGE_FILE="$REPORT_DIR/coverage_$(echo $pkg | tr '/' '_').out"
|
|
|
|
# Run tests with coverage
|
|
RESULT=$(go test -v -cover -coverprofile="$COVERAGE_FILE" "$pkg" 2>&1)
|
|
EXIT_CODE=$?
|
|
|
|
# Extract coverage percentage
|
|
COVERAGE=$(echo "$RESULT" | grep "coverage:" | awk '{print $2}' | sed 's/%//')
|
|
if [ -z "$COVERAGE" ]; then
|
|
COVERAGE="0.0"
|
|
fi
|
|
|
|
# Count tests
|
|
TEST_COUNT=$(echo "$RESULT" | grep -c "^--- PASS\|^--- FAIL" || echo 0)
|
|
|
|
# Determine status
|
|
if [ $EXIT_CODE -eq 0 ]; then
|
|
STATUS="PASS"
|
|
PASS_COUNT=$((PASS_COUNT+1))
|
|
else
|
|
STATUS="FAIL"
|
|
FAIL_COUNT=$((FAIL_COUNT+1))
|
|
fi
|
|
|
|
echo "| $pkg | $TEST_COUNT | ${COVERAGE}% | $STATUS |"
|
|
|
|
TOTAL_TESTS=$((TOTAL_TESTS+TEST_COUNT))
|
|
TOTAL_COVERAGE=$(echo "$TOTAL_COVERAGE + $COVERAGE" | bc)
|
|
PKG_COUNT=$((PKG_COUNT+1))
|
|
done
|
|
|
|
echo ""
|
|
echo "=== Summary ==="
|
|
echo "Total packages tested: $PKG_COUNT"
|
|
echo "Passed: $PASS_COUNT, Failed: $FAIL_COUNT"
|
|
echo "Total test functions: $TOTAL_TESTS"
|
|
|
|
if [ $PKG_COUNT -gt 0 ]; then
|
|
AVG_COVERAGE=$(echo "$TOTAL_COVERAGE / $PKG_COUNT" | bc -l)
|
|
echo "Average coverage: ${AVG_COVERAGE}%"
|
|
fi
|
|
|
|
echo ""
|
|
echo "=== Test File Inventory ==="
|
|
find . -name "*_test.go" -not -path "./vendor/*" | while read f; do
|
|
LINES=$(wc -l < "$f")
|
|
FUNCTIONS=$(grep -c "func Test" "$f" 2>/dev/null || echo 0)
|
|
echo " $f: ${LINES} lines, ${FUNCTIONS} test functions"
|
|
done
|
|
|
|
echo ""
|
|
echo "Coverage profiles saved to $REPORT_DIR/"
|
|
echo "To view HTML coverage: go tool cover -html=$REPORT_DIR/coverage_*.out" |