Initial commit
This commit is contained in:
180
scripts/setup-testing.sh
Executable file
180
scripts/setup-testing.sh
Executable file
@@ -0,0 +1,180 @@
|
||||
#!/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"
|
||||
Reference in New Issue
Block a user