#!/usr/bin/env bash # append_diary_entry — Añade una entrada al diario del dia en docs/diary/YYYY-MM-DD.md append_diary_entry() { local titulo="$1" local cuerpo="${2:-}" if [[ -z "$titulo" ]]; then echo "append_diary_entry: titulo requerido" >&2 return 2 fi local date time diary_dir diary_file date=$(date +%Y-%m-%d) time=$(date +%H:%M) diary_dir="${DIARY_DIR:-docs/diary}" diary_file="${diary_dir}/${date}.md" # Crear directorio y cabecera del dia si el archivo no existe if [[ ! -f "$diary_file" ]]; then mkdir -p "$diary_dir" printf '# %s\n' "$date" > "$diary_file" fi # Componer bloque de entrada if [[ -n "$cuerpo" ]]; then printf '\n## %s — %s\n\n%s\n' "$time" "$titulo" "$cuerpo" >> "$diary_file" else printf '\n## %s — %s\n' "$time" "$titulo" >> "$diary_file" fi echo "$diary_file" } # --------------------------------------------------------------------------- # Self-test: bash bash/functions/infra/append_diary_entry.sh --test # --------------------------------------------------------------------------- if [ "${BASH_SOURCE[0]}" = "$0" ] && [ "${1:-}" = "--test" ]; then set -euo pipefail declare -i PASS=0 FAIL=0 assert_contains() { local test_name="$1" pattern="$2" file="$3" if grep -qF "$pattern" "$file"; then echo "PASS: $test_name" PASS+=1 else echo "FAIL: $test_name — patron '$pattern' no encontrado en $file" FAIL+=1 fi } # Setup: directorio temporal tmpdir=$(mktemp -d) export DIARY_DIR="$tmpdir/diary" # Test 1: crear archivo nuevo con titulo y cuerpo diary_file=$(append_diary_entry "primer bloque" "Hecho algo importante hoy.") assert_contains "crear archivo nuevo con titulo y cuerpo" "primer bloque" "$diary_file" assert_contains "crear archivo nuevo con titulo y cuerpo" "# $(date +%Y-%m-%d)" "$diary_file" assert_contains "crear archivo nuevo con titulo y cuerpo" "Hecho algo importante hoy." "$diary_file" # Test 2: append en el mismo dia sin reescribir contenido previo append_diary_entry "segundo bloque" "Otro parrafo de trabajo." > /dev/null assert_contains "append mismo dia conserva primera entrada" "primer bloque" "$diary_file" assert_contains "append mismo dia anade segunda entrada" "segundo bloque" "$diary_file" # Test 3: entrada sin cuerpo (solo header) append_diary_entry "solo titulo sin cuerpo" "" > /dev/null assert_contains "entrada sin cuerpo escribe header" "solo titulo sin cuerpo" "$diary_file" # Cleanup rm -rf "$tmpdir" echo "---" echo "Results: $PASS passed, $FAIL failed" [[ $FAIL -eq 0 ]] || exit 1 fi