From 9ee3bb9007b921520a1e3ff6ddb40381bbdb8cc0 Mon Sep 17 00:00:00 2001 From: Lars Date: Wed, 24 Sep 2025 12:33:55 +0200 Subject: [PATCH] =?UTF-8?q?tests/run=5Fe2e=5Froundtrip.sh=20hinzugef=C3=BC?= =?UTF-8?q?gt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tests/run_e2e_roundtrip.sh | 93 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 93 insertions(+) create mode 100644 tests/run_e2e_roundtrip.sh diff --git a/tests/run_e2e_roundtrip.sh b/tests/run_e2e_roundtrip.sh new file mode 100644 index 0000000..9c423b0 --- /dev/null +++ b/tests/run_e2e_roundtrip.sh @@ -0,0 +1,93 @@ +#!/usr/bin/env bash +set -euo pipefail + +# tests/run_e2e_roundtrip.sh +# End-to-End Testpipeline für mindnet WP-03 +# +# Schritte: +# 1) Qdrant truncate (Prefix!) +# 2) Import (Apply + Purge) => Create-Fall +# 3) Import (Apply - ohne Änderungen) => Idempotenz +# 4) Hash-Reporter (Fehlende Hash-Varianten) +# 5) Export nach _exportVault +# 6) Vergleich Vault vs. Export (Body-Fokus) +# 7) Sync-Deletes: Eine Datei temporär „entfernen“, Dry-Run + Apply, dann zurückrollen +# +# Aufrufe: +# ./tests/run_e2e_roundtrip.sh [--vault ./test_vault] [--prefix mindnet] +# +# ENV: +# COLLECTION_PREFIX (Default mindnet) + +VAULT="./test_vault" +PREFIX="${COLLECTION_PREFIX:-mindnet}" +while [[ $# -gt 0 ]]; do + case "$1" in + --vault) VAULT="$2"; shift 2;; + --prefix) PREFIX="$2"; shift 2;; + *) echo "Unbekannte Option: $1" >&2; exit 2;; + esac +done + +echo "== E2E Roundtrip ==" +echo "Vault: $VAULT" +echo "Prefix: $PREFIX" +echo + +export COLLECTION_PREFIX="$PREFIX" + +echo "-- 1) Qdrant truncate" +python3 -m scripts.reset_qdrant --mode truncate --prefix "$PREFIX" +python3 -m scripts.debug_qdrant_state --prefix "$PREFIX" +echo + +echo "-- 2) Import (Create-Fall)" +python3 -m scripts.import_markdown --vault "$VAULT" --apply --purge-before-upsert --prefix "$PREFIX" +python3 -m scripts.debug_qdrant_state --prefix "$PREFIX" +echo + +echo "-- 3) Import (Idempotenz: keine Änderungen erwartet)" +python3 -m scripts.import_markdown --vault "$VAULT" --apply --prefix "$PREFIX" +python3 -m scripts.debug_qdrant_state --prefix "$PREFIX" +echo + +echo "-- 4) Hash-Reporter" +python3 -m scripts.report_hashes --prefix "$PREFIX" || true +echo + +echo "-- 5) Export nach _exportVault" +OUT_DIR="_exportVault" +rm -rf "$OUT_DIR" +python3 -m scripts.export_markdown --out "$OUT_DIR" --prefix "$PREFIX" +echo + +echo "-- 6) Vergleich Vault vs. Export (Body-Fokus)" +python3 tests/compare_vaults.py --src "$VAULT" --dst "$OUT_DIR" --focus body +echo + +echo "-- 7) Sync-Deletes (simuliert)" +# wähle eine Datei und verschiebe sie temporär weg +TMP_DIR="$(mktemp -d)" +SAMPLE_MD="$(find "$VAULT" -type f -name '*.md' | head -n 1 || true)" +if [[ -n "${SAMPLE_MD:-}" ]]; then + mv "$SAMPLE_MD" "$TMP_DIR/" + echo "Temporär entfernt: $(basename "$SAMPLE_MD")" + + echo " 7a) Dry-Run" + python3 -m scripts.import_markdown --vault "$VAULT" --sync-deletes --prefix "$PREFIX" + echo " 7b) Apply" + python3 -m scripts.import_markdown --vault "$VAULT" --sync-deletes --apply --prefix "$PREFIX" + + # zurückrollen + mv "$TMP_DIR/$(basename "$SAMPLE_MD")" "$SAMPLE_MD" + rm -rf "$TMP_DIR" + + echo " 7c) Re-Import (wieder anlegen)" + python3 -m scripts.import_markdown --vault "$VAULT" --apply --prefix "$PREFIX" + python3 -m scripts.debug_qdrant_state --prefix "$PREFIX" +else + echo "Hinweis: Keine MD-Datei im Vault gefunden – Sync-Deletes übersprungen." +fi + +echo +echo "== E2E Roundtrip abgeschlossen =="