Initial commit
This commit is contained in:
199
scripts/check-testing.sh
Executable file
199
scripts/check-testing.sh
Executable file
@@ -0,0 +1,199 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
#
|
||||
# TYPO3 Testing Standards Conformance Checker
|
||||
#
|
||||
# Validates testing infrastructure and test coverage
|
||||
#
|
||||
|
||||
set -e
|
||||
|
||||
PROJECT_DIR="${1:-.}"
|
||||
cd "${PROJECT_DIR}"
|
||||
|
||||
echo "## 4. Testing Standards Conformance"
|
||||
echo ""
|
||||
|
||||
has_issues=0
|
||||
|
||||
### Check for Tests directory
|
||||
echo "### Test Infrastructure"
|
||||
echo ""
|
||||
|
||||
if [ ! -d "Tests" ]; then
|
||||
echo "- ❌ Tests/ directory missing (CRITICAL)"
|
||||
has_issues=1
|
||||
echo ""
|
||||
echo "---"
|
||||
echo ""
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "- ✅ Tests/ directory present"
|
||||
|
||||
### Check for PHPUnit configuration
|
||||
echo ""
|
||||
echo "### PHPUnit Configuration"
|
||||
echo ""
|
||||
|
||||
if [ -f "Build/phpunit/UnitTests.xml" ] || [ -f "phpunit.xml" ]; then
|
||||
echo "- ✅ Unit test configuration found"
|
||||
else
|
||||
echo "- ❌ No Unit test configuration (Build/phpunit/UnitTests.xml or phpunit.xml)"
|
||||
has_issues=1
|
||||
fi
|
||||
|
||||
if [ -f "Build/phpunit/FunctionalTests.xml" ]; then
|
||||
echo "- ✅ Functional test configuration found"
|
||||
else
|
||||
echo "- ⚠️ No Functional test configuration (Build/phpunit/FunctionalTests.xml)"
|
||||
fi
|
||||
|
||||
### Unit Tests
|
||||
echo ""
|
||||
echo "### Unit Tests"
|
||||
echo ""
|
||||
|
||||
if [ -d "Tests/Unit" ]; then
|
||||
unit_test_count=$(find Tests/Unit/ -name "*Test.php" 2>/dev/null | wc -l)
|
||||
echo "- ✅ Tests/Unit/ directory present"
|
||||
echo " - **${unit_test_count} unit test files found**"
|
||||
|
||||
if [ $unit_test_count -eq 0 ]; then
|
||||
echo " - ⚠️ No unit tests found"
|
||||
fi
|
||||
|
||||
# Check if tests mirror Classes structure
|
||||
if [ -d "Classes/Controller" ] && [ ! -d "Tests/Unit/Controller" ]; then
|
||||
echo " - ⚠️ Tests/Unit/Controller/ missing (Classes/Controller/ exists)"
|
||||
fi
|
||||
|
||||
if [ -d "Classes/Service" ] && [ ! -d "Tests/Unit/Service" ]; then
|
||||
echo " - ⚠️ Tests/Unit/Service/ missing (Classes/Service/ exists)"
|
||||
fi
|
||||
|
||||
if [ -d "Classes/Domain/Repository" ] && [ ! -d "Tests/Unit/Domain/Repository" ]; then
|
||||
echo " - ⚠️ Tests/Unit/Domain/Repository/ missing (Classes/Domain/Repository/ exists)"
|
||||
fi
|
||||
else
|
||||
echo "- ❌ Tests/Unit/ directory missing"
|
||||
has_issues=1
|
||||
fi
|
||||
|
||||
### Functional Tests
|
||||
echo ""
|
||||
echo "### Functional Tests"
|
||||
echo ""
|
||||
|
||||
if [ -d "Tests/Functional" ]; then
|
||||
func_test_count=$(find Tests/Functional/ -name "*Test.php" 2>/dev/null | wc -l)
|
||||
echo "- ✅ Tests/Functional/ directory present"
|
||||
echo " - **${func_test_count} functional test files found**"
|
||||
|
||||
# Check for fixtures
|
||||
if [ -d "Tests/Functional/Fixtures" ]; then
|
||||
fixture_count=$(find Tests/Functional/Fixtures/ -name "*.csv" -o -name "*.xml" 2>/dev/null | wc -l)
|
||||
echo " - ✅ Tests/Functional/Fixtures/ found (${fixture_count} fixture files)"
|
||||
else
|
||||
if [ $func_test_count -gt 0 ]; then
|
||||
echo " - ⚠️ No Tests/Functional/Fixtures/ (functional tests may need fixtures)"
|
||||
fi
|
||||
fi
|
||||
else
|
||||
echo "- ⚠️ Tests/Functional/ directory missing"
|
||||
echo " - Functional tests recommended for repository and database operations"
|
||||
fi
|
||||
|
||||
### Acceptance Tests
|
||||
echo ""
|
||||
echo "### Acceptance Tests"
|
||||
echo ""
|
||||
|
||||
if [ -d "Tests/Acceptance" ]; then
|
||||
accept_test_count=$(find Tests/Acceptance/ -name "*Cest.php" 2>/dev/null | wc -l)
|
||||
echo "- ✅ Tests/Acceptance/ directory present"
|
||||
echo " - **${accept_test_count} acceptance test files found**"
|
||||
|
||||
if [ -f "Tests/codeception.yml" ]; then
|
||||
echo " - ✅ codeception.yml configuration found"
|
||||
else
|
||||
echo " - ⚠️ codeception.yml configuration missing"
|
||||
fi
|
||||
else
|
||||
echo "- ℹ️ Tests/Acceptance/ not found (optional for most extensions)"
|
||||
fi
|
||||
|
||||
### Test Coverage Estimate
|
||||
echo ""
|
||||
echo "### Test Coverage Estimate"
|
||||
echo ""
|
||||
|
||||
if [ -d "Classes" ]; then
|
||||
class_count=$(find Classes/ -name "*.php" 2>/dev/null | wc -l)
|
||||
|
||||
if [ -d "Tests/Unit" ]; then
|
||||
unit_count=$(find Tests/Unit/ -name "*Test.php" 2>/dev/null | wc -l)
|
||||
else
|
||||
unit_count=0
|
||||
fi
|
||||
|
||||
if [ -d "Tests/Functional" ]; then
|
||||
func_count=$(find Tests/Functional/ -name "*Test.php" 2>/dev/null | wc -l)
|
||||
else
|
||||
func_count=0
|
||||
fi
|
||||
|
||||
total_tests=$((unit_count + func_count))
|
||||
|
||||
echo "- **Total Classes:** $class_count"
|
||||
echo "- **Total Tests:** $total_tests"
|
||||
|
||||
if [ $class_count -gt 0 ]; then
|
||||
coverage_ratio=$((total_tests * 100 / class_count))
|
||||
echo "- **Test Ratio:** ${coverage_ratio}%"
|
||||
|
||||
if [ $coverage_ratio -ge 70 ]; then
|
||||
echo " - ✅ Good test coverage (≥70%)"
|
||||
elif [ $coverage_ratio -ge 50 ]; then
|
||||
echo " - ⚠️ Moderate test coverage (50-70%)"
|
||||
else
|
||||
echo " - ❌ Low test coverage (<50%)"
|
||||
has_issues=1
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
### Check for testing framework dependency
|
||||
echo ""
|
||||
echo "### Testing Framework Dependency"
|
||||
echo ""
|
||||
|
||||
if [ -f "composer.json" ]; then
|
||||
if grep -q "typo3/testing-framework" composer.json; then
|
||||
echo "- ✅ typo3/testing-framework in composer.json"
|
||||
else
|
||||
echo "- ⚠️ typo3/testing-framework not found in composer.json"
|
||||
fi
|
||||
|
||||
if grep -q "phpunit/phpunit" composer.json; then
|
||||
echo "- ✅ phpunit/phpunit in composer.json"
|
||||
else
|
||||
echo "- ⚠️ phpunit/phpunit not found in composer.json"
|
||||
fi
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo "### Summary"
|
||||
echo ""
|
||||
|
||||
if [ $has_issues -eq 0 ]; then
|
||||
echo "- ✅ **Testing Standards: PASSED**"
|
||||
else
|
||||
echo "- ⚠️ **Testing Standards: ISSUES FOUND**"
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo "---"
|
||||
echo ""
|
||||
|
||||
exit $has_issues
|
||||
Reference in New Issue
Block a user