baktainer/app/bin/test
James Paterni 8db5004eea
Some checks are pending
Test and Build Docker Image / test (push) Waiting to run
Test and Build Docker Image / build (push) Blocked by required conditions
Add comprehensive RSpec testing infrastructure and enhance CI/CD pipeline
- Implement complete test suite with 63 examples (49 unit + 14 integration tests)
- Add RSpec, FactoryBot, WebMock, and SimpleCov testing dependencies
- Create mocked integration tests eliminating need for real Docker containers
- Fix SQLite method signature to accept login/password parameters
- Enhance container discovery to handle nil labels gracefully
- Add test coverage reporting and JUnit XML output for CI
- Update GitHub Actions workflow to run tests before Docker builds
- Add Ruby 3.3 setup with gem caching for faster CI execution
- Create CI test script and comprehensive testing documentation
- Ensure Docker builds only proceed when all tests pass

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-13 23:12:59 -04:00

168 lines
No EOL
4.9 KiB
Bash
Executable file

#!/usr/bin/env bash
# Baktainer Test Runner Script
set -e
# Colors for output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color
# Function to print colored output
print_status() {
echo -e "${GREEN}[INFO]${NC} $1"
}
print_warning() {
echo -e "${YELLOW}[WARN]${NC} $1"
}
print_error() {
echo -e "${RED}[ERROR]${NC} $1"
}
# Default values
RUN_UNIT=true
RUN_INTEGRATION=false
RUN_COVERAGE=false
SETUP_CONTAINERS=false
CLEANUP_CONTAINERS=false
# Parse command line arguments
while [[ $# -gt 0 ]]; do
case $1 in
-u|--unit)
RUN_UNIT=true
RUN_INTEGRATION=false
shift
;;
-i|--integration)
RUN_INTEGRATION=true
RUN_UNIT=false
shift
;;
-a|--all)
RUN_UNIT=true
RUN_INTEGRATION=true
shift
;;
-c|--coverage)
RUN_COVERAGE=true
shift
;;
-s|--setup)
SETUP_CONTAINERS=true
shift
;;
--cleanup)
CLEANUP_CONTAINERS=true
shift
;;
-h|--help)
echo "Baktainer Test Runner"
echo ""
echo "Usage: $0 [OPTIONS]"
echo ""
echo "Options:"
echo " -u, --unit Run unit tests only (default)"
echo " -i, --integration Run integration tests only"
echo " -a, --all Run all tests"
echo " -c, --coverage Enable test coverage reporting"
echo " -s, --setup Setup test containers before running"
echo " --cleanup Cleanup test containers after running"
echo " -h, --help Show this help message"
echo ""
echo "Examples:"
echo " $0 # Run unit tests"
echo " $0 -a -c # Run all tests with coverage"
echo " $0 -i -s --cleanup # Run integration tests with container setup/cleanup"
exit 0
;;
*)
print_error "Unknown option: $1"
echo "Use -h or --help for usage information"
exit 1
;;
esac
done
# Check if we're in the correct directory
if [[ ! -f "Gemfile" ]] || [[ ! -d "spec" ]]; then
print_error "This script must be run from the app directory containing Gemfile and spec/"
exit 1
fi
# Check if bundle is available
if ! command -v bundle &> /dev/null; then
print_error "Bundler is not installed. Please install with: gem install bundler"
exit 1
fi
# Install dependencies if needed
if [[ ! -d "vendor/bundle" ]] && [[ ! -f "Gemfile.lock" ]]; then
print_status "Installing dependencies..."
bundle install
fi
# Setup test containers if requested
if [[ "$SETUP_CONTAINERS" = true ]] || [[ "$RUN_INTEGRATION" = true ]]; then
print_status "Setting up test containers..."
if [[ -f "spec/fixtures/docker-compose.test.yml" ]]; then
docker-compose -f spec/fixtures/docker-compose.test.yml up -d
print_status "Waiting for containers to be ready..."
sleep 15
print_status "Test containers are ready"
else
print_warning "Test compose file not found, skipping container setup"
fi
fi
# Function to cleanup containers
cleanup_containers() {
if [[ "$CLEANUP_CONTAINERS" = true ]] || [[ "$RUN_INTEGRATION" = true ]]; then
print_status "Cleaning up test containers..."
if [[ -f "spec/fixtures/docker-compose.test.yml" ]]; then
docker-compose -f spec/fixtures/docker-compose.test.yml down -v
print_status "Test containers cleaned up"
fi
fi
}
# Setup trap to cleanup on exit
trap cleanup_containers EXIT
# Set coverage environment variable if requested
if [[ "$RUN_COVERAGE" = true ]]; then
export COVERAGE=true
print_status "Test coverage enabled"
fi
# Run tests based on options
if [[ "$RUN_UNIT" = true ]] && [[ "$RUN_INTEGRATION" = true ]]; then
print_status "Running all tests..."
bundle exec rspec spec/ --format documentation --color
elif [[ "$RUN_INTEGRATION" = true ]]; then
print_status "Running integration tests..."
bundle exec rspec spec/integration/ --format documentation --color --tag integration
elif [[ "$RUN_UNIT" = true ]]; then
print_status "Running unit tests..."
bundle exec rspec spec/unit/ --format documentation --color
fi
# Show coverage report if enabled
if [[ "$RUN_COVERAGE" = true ]] && [[ -f "coverage/index.html" ]]; then
print_status "Test coverage report generated at: coverage/index.html"
# Try to open coverage report
if command -v xdg-open &> /dev/null; then
print_status "Opening coverage report..."
xdg-open coverage/index.html &
elif command -v open &> /dev/null; then
print_status "Opening coverage report..."
open coverage/index.html &
fi
fi
print_status "Tests completed successfully!"