#!/usr/bin/env bats # Unit tests for run.sh main entry point # Add bats library to BATS_LIB_PATH export BATS_LIB_PATH="/usr/lib/bats-core" load 'bats-support/load' load 'bats-assert/load' load '../test_helper/common.bash' # Setup test environment setup() { # Source the main script export SCRIPT_DIR="${PROJECT_ROOT}" export DOCKER_IMAGE="knel-football-dev:latest" export OUTPUT_DIR="${TEST_TEMP_DIR}/output" export BUILD_DIR="${TEST_TEMP_DIR}/build" mkdir -p "${OUTPUT_DIR}" "${BUILD_DIR}" # Mock docker command docker() { echo "docker $@" } export -f docker } @test "run.sh exists and is executable" { assert_file_exists "${PROJECT_ROOT}/run.sh" assert [ -x "${PROJECT_ROOT}/run.sh" ] } @test "run.sh shows usage with help command" { run bash "${PROJECT_ROOT}/run.sh" help assert_success assert_line --partial "Usage:" assert_line --partial "build" assert_line --partial "test" assert_line --partial "iso" } @test "run.sh creates output and build directories" { rm -rf "${OUTPUT_DIR}" "${BUILD_DIR}" run bash "${PROJECT_ROOT}/run.sh" build assert [ -d "${OUTPUT_DIR}" ] assert [ -d "${BUILD_DIR}" ] } @test "run.sh test command runs bats tests" { skip "Requires full Docker environment - run with ./run.sh test" } @test "run.sh lint command runs shellcheck" { skip "Requires full Docker environment - run with ./run.sh lint" } @test "run.sh clean command removes artifacts" { # Create test artifacts touch "${OUTPUT_DIR}/test.iso" touch "${BUILD_DIR}/test.log" run bash "${PROJECT_ROOT}/run.sh" clean assert_success refute_file_exists "${OUTPUT_DIR}/test.iso" refute_file_exists "${BUILD_DIR}/test.log" } @test "run.sh test:iso command delegates to test-iso.sh" { assert_file_exists "${PROJECT_ROOT}/test-iso.sh" assert [ -x "${PROJECT_ROOT}/test-iso.sh" ] }