#!/bin/bash
# -*- coding: utf-8 -*-
# Test file for: process_archive.sh (git-based versioning)
THIS_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
ROOT_DIR="$(realpath "$THIS_DIR/../..")"
# Test counter
TESTS_RUN=0
TESTS_PASSED=0
TESTS_FAILED=0
# Colors
GREEN='\033[0;32m'
RED='\033[0;31m'
NC='\033[0m'
assert_equals() {
local expected="$1"
local actual="$2"
local desc="$3"
((TESTS_RUN++))
if [ "$expected" = "$actual" ]; then
echo -e "${GREEN}✓${NC} $desc"
((TESTS_PASSED++))
else
echo -e "${RED}✗${NC} $desc (expected: $expected, got: $actual)"
((TESTS_FAILED++))
fi
}
assert_matches() {
local pattern="$1"
local actual="$2"
local desc="$3"
((TESTS_RUN++))
if [[ "$actual" =~ $pattern ]]; then
echo -e "${GREEN}✓${NC} $desc"
((TESTS_PASSED++))
else
echo -e "${RED}✗${NC} $desc (pattern: $pattern, got: $actual)"
((TESTS_FAILED++))
fi
}
# Test get_git_identifier format
test_git_identifier_format() {
echo "Testing: get_git_identifier format"
# Source the module to get the function
cd "$ROOT_DIR" || exit 1
export SCITEX_WRITER_DOC_TYPE=manuscript
# The identifier should match: YYYYMMDD-HHMMSS_<7-char-hash>[+]
# Pattern: 8 digits, dash, 6 digits, underscore, 7+ alphanum chars
local pattern='^[0-9]{8}-[0-9]{6}_[a-f0-9]{7}\+?$'
# We can't easily source the module without side effects,
# so we test the format concept
local test_id="20260119-143022_abc1234"
assert_matches "$pattern" "$test_id" "Git identifier format is valid"
local test_id_dirty="20260119-143022_abc1234+"
assert_matches "$pattern" "$test_id_dirty" "Git identifier with dirty flag is valid"
}
# Test archive naming convention
test_archive_naming() {
echo "Testing: Archive file naming convention"
# New naming: {doc}_YYYYMMDD-HHMMSS_{hash}.pdf
local pattern='^manuscript_[0-9]{8}-[0-9]{6}_[a-f0-9]{7}\+?\.pdf$'
local test_name="manuscript_20260119-143022_abc1234.pdf"
assert_matches "$pattern" "$test_name" "Archive filename format is valid"
# Diff file naming: {doc}_YYYYMMDD-HHMMSS_{hash}_diff.pdf
local diff_pattern='^manuscript_[0-9]{8}-[0-9]{6}_[a-f0-9]{7}\+?_diff\.pdf$'
local test_diff="manuscript_20260119-143022_abc1234_diff.pdf"
assert_matches "$diff_pattern" "$test_diff" "Diff filename format is valid"
}
# Run tests
main() {
echo "Testing: process_archive.sh (git-based versioning)"
echo "========================================"
test_git_identifier_format
test_archive_naming
echo "========================================"
echo "Results: $TESTS_PASSED/$TESTS_RUN passed"
[ "$TESTS_FAILED" -gt 0 ] && exit 1
exit 0
}
main "$@"