Files
gh-netresearch-claude-code-…/scripts/setup-testing.sh
2025-11-30 08:43:33 +08:00

181 lines
5.9 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/usr/bin/env bash
#
# Setup TYPO3 testing infrastructure
#
# This script initializes testing infrastructure for TYPO3 extensions:
# - Composer dependencies
# - PHPUnit configurations
# - Directory structure
# - Optional: Docker Compose for acceptance tests
#
set -e
# Colors
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color
# Script configuration
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
SKILL_DIR="$(cd "${SCRIPT_DIR}/.." && pwd)"
PROJECT_DIR="$(pwd)"
WITH_ACCEPTANCE=false
# Parse arguments
while getopts ":a" opt; do
case ${opt} in
a)
WITH_ACCEPTANCE=true
;;
\?)
echo "Usage: $0 [-a]"
echo " -a Include acceptance testing setup (Docker Compose, Codeception)"
exit 1
;;
esac
done
echo -e "${GREEN}=== TYPO3 Testing Infrastructure Setup ===${NC}"
echo
# Check if composer.json exists
if [ ! -f "${PROJECT_DIR}/composer.json" ]; then
echo -e "${RED}Error: composer.json not found in current directory${NC}"
echo "Please run this script from your TYPO3 extension root directory"
exit 1
fi
# 1. Install testing framework dependencies
echo -e "${YELLOW}[1/6] Installing testing framework dependencies...${NC}"
if ! grep -q "typo3/testing-framework" "${PROJECT_DIR}/composer.json"; then
composer require --dev "typo3/testing-framework:^8.0 || ^9.0" --no-update
echo -e "${GREEN}✓ Added typo3/testing-framework${NC}"
else
echo -e "${GREEN}✓ typo3/testing-framework already present${NC}"
fi
# Install PHPUnit if not present
if ! grep -q "phpunit/phpunit" "${PROJECT_DIR}/composer.json"; then
composer require --dev "phpunit/phpunit:^10.5 || ^11.0" --no-update
echo -e "${GREEN}✓ Added phpunit/phpunit${NC}"
fi
composer update --no-progress
# 2. Create directory structure
echo -e "${YELLOW}[2/6] Creating directory structure...${NC}"
mkdir -p "${PROJECT_DIR}/Tests/Unit"
mkdir -p "${PROJECT_DIR}/Tests/Functional/Fixtures"
mkdir -p "${PROJECT_DIR}/Build/phpunit"
mkdir -p "${PROJECT_DIR}/Build/Scripts"
echo -e "${GREEN}✓ Directories created${NC}"
# 3. Copy PHPUnit configurations
echo -e "${YELLOW}[3/6] Installing PHPUnit configurations...${NC}"
if [ ! -f "${PROJECT_DIR}/Build/phpunit/UnitTests.xml" ]; then
cp "${SKILL_DIR}/templates/UnitTests.xml" "${PROJECT_DIR}/Build/phpunit/"
echo -e "${GREEN}✓ Created UnitTests.xml${NC}"
else
echo -e "${YELLOW}⚠ UnitTests.xml already exists (skipped)${NC}"
fi
if [ ! -f "${PROJECT_DIR}/Build/phpunit/FunctionalTests.xml" ]; then
cp "${SKILL_DIR}/templates/FunctionalTests.xml" "${PROJECT_DIR}/Build/phpunit/"
echo -e "${GREEN}✓ Created FunctionalTests.xml${NC}"
else
echo -e "${YELLOW}⚠ FunctionalTests.xml already exists (skipped)${NC}"
fi
if [ ! -f "${PROJECT_DIR}/Build/phpunit/FunctionalTestsBootstrap.php" ]; then
cp "${SKILL_DIR}/templates/FunctionalTestsBootstrap.php" "${PROJECT_DIR}/Build/phpunit/"
echo -e "${GREEN}✓ Created FunctionalTestsBootstrap.php${NC}"
else
echo -e "${YELLOW}⚠ FunctionalTestsBootstrap.php already exists (skipped)${NC}"
fi
# 4. Create AGENTS.md templates
echo -e "${YELLOW}[4/6] Creating AGENTS.md templates...${NC}"
for dir in "${PROJECT_DIR}/Tests/Unit" "${PROJECT_DIR}/Tests/Functional"; do
if [ ! -f "${dir}/AGENTS.md" ]; then
cp "${SKILL_DIR}/templates/AGENTS.md" "${dir}/"
echo -e "${GREEN}✓ Created ${dir}/AGENTS.md${NC}"
else
echo -e "${YELLOW}${dir}/AGENTS.md already exists (skipped)${NC}"
fi
done
# 5. Setup composer scripts
echo -e "${YELLOW}[5/6] Adding composer test scripts...${NC}"
if ! grep -q "ci:test:php:unit" "${PROJECT_DIR}/composer.json"; then
echo -e "${GREEN} Add these scripts to your composer.json:${NC}"
cat << 'EOF'
"scripts": {
"ci:test": [
"@ci:test:php:lint",
"@ci:test:php:phpstan",
"@ci:test:php:unit",
"@ci:test:php:functional"
],
"ci:test:php:lint": "phplint",
"ci:test:php:phpstan": "phpstan analyze --configuration Build/phpstan.neon --no-progress",
"ci:test:php:unit": "phpunit -c Build/phpunit/UnitTests.xml",
"ci:test:php:functional": "phpunit -c Build/phpunit/FunctionalTests.xml"
}
EOF
else
echo -e "${GREEN}✓ Test scripts already configured${NC}"
fi
# 6. Setup acceptance testing if requested
if [ "${WITH_ACCEPTANCE}" = true ]; then
echo -e "${YELLOW}[6/6] Setting up acceptance testing...${NC}"
# Install Codeception
if ! grep -q "codeception/codeception" "${PROJECT_DIR}/composer.json"; then
composer require --dev codeception/codeception codeception/module-webdriver --no-update
composer update --no-progress
echo -e "${GREEN}✓ Installed Codeception${NC}"
fi
# Create acceptance test directory
mkdir -p "${PROJECT_DIR}/Tests/Acceptance"
# Copy Docker Compose and Codeception config
if [ ! -f "${PROJECT_DIR}/Build/docker-compose.yml" ]; then
cp "${SKILL_DIR}/templates/docker/docker-compose.yml" "${PROJECT_DIR}/Build/"
echo -e "${GREEN}✓ Created docker-compose.yml${NC}"
fi
if [ ! -f "${PROJECT_DIR}/codeception.yml" ]; then
cp "${SKILL_DIR}/templates/docker/codeception.yml" "${PROJECT_DIR}/"
echo -e "${GREEN}✓ Created codeception.yml${NC}"
fi
# Initialize Codeception
if [ ! -d "${PROJECT_DIR}/Tests/Acceptance/_support" ]; then
vendor/bin/codecept bootstrap
echo -e "${GREEN}✓ Initialized Codeception${NC}"
fi
else
echo -e "${YELLOW}[6/6] Skipping acceptance testing setup (use -a flag to include)${NC}"
fi
echo
echo -e "${GREEN}=== Setup Complete ===${NC}"
echo
echo "Next steps:"
echo "1. Generate your first test:"
echo " ${SKILL_DIR}/scripts/generate-test.sh unit MyClass"
echo
echo "2. Run tests:"
echo " composer ci:test:php:unit"
echo " composer ci:test:php:functional"
echo
echo "3. Add CI/CD workflow (optional):"
echo " cp ${SKILL_DIR}/templates/github-actions-tests.yml .github/workflows/tests.yml"