Loading...
No commits yet
Not committed History
Blame
test_template_clone_readiness.sh • 6.7 KB
#!/bin/bash
# -*- coding: utf-8 -*-
# Test: Template Clone Readiness (Issue #12, #13, #14)
# Timestamp: "$(date +"%Y-%m-%d %H:%M:%S") ($(whoami))"
# File: ./tests/scripts/test_template_clone_readiness.sh

# shellcheck disable=SC1091

# Colors
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m'

# Test results
TESTS_PASSED=0
TESTS_FAILED=0

# Resolve project root
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"
cd "$PROJECT_ROOT" || exit 1

print_test() {
    echo -e "${YELLOW}TEST: $1${NC}"
}

assert_file_exists() {
    local test_name="$1"
    local file_path="$2"

    if [ -f "$file_path" ]; then
        echo -e "${GREEN}✓ PASS: $test_name${NC}"
        ((TESTS_PASSED++))
        return 0
    else
        echo -e "${RED}✗ FAIL: $test_name - File not found: $file_path${NC}"
        ((TESTS_FAILED++))
        return 1
    fi
}

assert_file_tracked() {
    local test_name="$1"
    local file_path="$2"

    if git ls-files --error-unmatch "$file_path" >/dev/null 2>&1; then
        echo -e "${GREEN}✓ PASS: $test_name${NC}"
        ((TESTS_PASSED++))
        return 0
    else
        echo -e "${RED}✗ FAIL: $test_name - Not tracked by git: $file_path${NC}"
        ((TESTS_FAILED++))
        return 1
    fi
}

assert_success() {
    local test_name="$1"
    local exit_code="$2"

    if [ "$exit_code" -eq 0 ]; then
        echo -e "${GREEN}✓ PASS: $test_name${NC}"
        ((TESTS_PASSED++))
        return 0
    else
        echo -e "${RED}✗ FAIL: $test_name (exit code: $exit_code)${NC}"
        ((TESTS_FAILED++))
        return 1
    fi
}

# Main tests
echo "========================================"
echo "Testing Template Clone Readiness"
echo "========================================"
echo ""

# ==========================================
# Issue #12: Wordcount placeholder files
# ==========================================
print_test "Issue #12: Wordcount placeholder files exist"

WORDCOUNT_FILES=(
    "01_manuscript/contents/wordcounts/figure_count.txt"
    "01_manuscript/contents/wordcounts/table_count.txt"
    "01_manuscript/contents/wordcounts/abstract_count.txt"
    "01_manuscript/contents/wordcounts/introduction_count.txt"
    "01_manuscript/contents/wordcounts/methods_count.txt"
    "01_manuscript/contents/wordcounts/results_count.txt"
    "01_manuscript/contents/wordcounts/discussion_count.txt"
    "01_manuscript/contents/wordcounts/imrd_count.txt"
)

for file in "${WORDCOUNT_FILES[@]}"; do
    assert_file_exists "wordcount file exists: $(basename "$file")" "$file"
done
echo ""

print_test "Issue #12: Wordcount files tracked by git"
for file in "${WORDCOUNT_FILES[@]}"; do
    assert_file_tracked "git tracks: $(basename "$file")" "$file"
done
echo ""

print_test "Issue #12: .gitignore allows wordcount files"
if grep -q '!.*/contents/wordcounts/\*.txt' .gitignore 2>/dev/null; then
    echo -e "${GREEN}✓ PASS: .gitignore has wordcount exception${NC}"
    ((TESTS_PASSED++))
else
    echo -e "${RED}✗ FAIL: .gitignore missing wordcount exception${NC}"
    ((TESTS_FAILED++))
fi
echo ""

# ==========================================
# Issue #13: Working directory independence
# ==========================================
print_test "Issue #13: compile.sh resolves PROJECT_ROOT"
if grep -q 'PROJECT_ROOT' ./compile.sh; then
    echo -e "${GREEN}✓ PASS: compile.sh has PROJECT_ROOT${NC}"
    ((TESTS_PASSED++))
else
    echo -e "${RED}✗ FAIL: compile.sh missing PROJECT_ROOT${NC}"
    ((TESTS_FAILED++))
fi

print_test "Issue #13: compile_manuscript.sh resolves PROJECT_ROOT"
if grep -q 'PROJECT_ROOT' ./scripts/shell/compile_manuscript.sh; then
    echo -e "${GREEN}✓ PASS: compile_manuscript.sh has PROJECT_ROOT${NC}"
    ((TESTS_PASSED++))
else
    echo -e "${RED}✗ FAIL: compile_manuscript.sh missing PROJECT_ROOT${NC}"
    ((TESTS_FAILED++))
fi

print_test "Issue #13: process_figures.sh resolves PROJECT_ROOT"
if grep -q 'PROJECT_ROOT' ./scripts/shell/modules/process_figures.sh; then
    echo -e "${GREEN}✓ PASS: process_figures.sh has PROJECT_ROOT${NC}"
    ((TESTS_PASSED++))
else
    echo -e "${RED}✗ FAIL: process_figures.sh missing PROJECT_ROOT${NC}"
    ((TESTS_FAILED++))
fi

print_test "Issue #13: Scripts cd to PROJECT_ROOT before sourcing config"
# Check that scripts cd to PROJECT_ROOT
# shellcheck disable=SC2016  # Intentionally searching for literal $PROJECT_ROOT
if grep -q 'cd "\$PROJECT_ROOT"' ./scripts/shell/compile_manuscript.sh &&
    grep -q 'cd "\$PROJECT_ROOT"' ./compile.sh; then
    echo -e "${GREEN}✓ PASS: Scripts cd to PROJECT_ROOT${NC}"
    ((TESTS_PASSED++))
else
    echo -e "${RED}✗ FAIL: Scripts don't cd to PROJECT_ROOT${NC}"
    ((TESTS_FAILED++))
fi
echo ""

# ==========================================
# Issue #14: Strip example content script
# ==========================================
print_test "Issue #14: strip_example_content.sh exists"
assert_file_exists "strip_example_content.sh exists" "./scripts/maintenance/strip_example_content.sh"

print_test "Issue #14: strip_example_content.sh is executable"
if [ -x "./scripts/maintenance/strip_example_content.sh" ]; then
    echo -e "${GREEN}✓ PASS: strip_example_content.sh is executable${NC}"
    ((TESTS_PASSED++))
else
    echo -e "${RED}✗ FAIL: strip_example_content.sh not executable${NC}"
    ((TESTS_FAILED++))
fi

print_test "Issue #14: strip_example_content.sh has correct PROJECT_ROOT path"
# shellcheck disable=SC2016  # Intentionally searching for literal $THIS_DIR
if grep -q 'PROJECT_ROOT="\$(cd "\$THIS_DIR/../.."' ./scripts/maintenance/strip_example_content.sh; then
    echo -e "${GREEN}✓ PASS: Correct PROJECT_ROOT path (../../)${NC}"
    ((TESTS_PASSED++))
else
    echo -e "${RED}✗ FAIL: Incorrect PROJECT_ROOT path${NC}"
    ((TESTS_FAILED++))
fi
echo ""

# ==========================================
# Integration: Fresh clone simulation
# ==========================================
print_test "Integration: LaTeX can read wordcount files"
# Check that manuscript.tex references wordcount files correctly
if grep -q 'readwordcount' ./01_manuscript/manuscript.tex 2>/dev/null ||
    grep -q 'wordcounts' ./01_manuscript/manuscript.tex 2>/dev/null; then
    echo -e "${GREEN}✓ PASS: manuscript.tex references wordcount files${NC}"
    ((TESTS_PASSED++))
else
    echo -e "${YELLOW}⚠ SKIP: manuscript.tex wordcount reference check${NC}"
    ((TESTS_PASSED++))
fi
echo ""

# Summary
echo "========================================"
echo "Test Summary"
echo "========================================"
echo -e "${GREEN}Passed: $TESTS_PASSED${NC}"
echo -e "${RED}Failed: $TESTS_FAILED${NC}"
echo ""

if [ "$TESTS_FAILED" -eq 0 ]; then
    echo -e "${GREEN}All template clone readiness tests passed!${NC}"
    exit 0
else
    echo -e "${RED}Some tests failed!${NC}"
    exit 1
fi

# EOF