import os
from pathlib import Path

from src.validators.mindmodel_validator import validate_manifest


def test_missing_files_reported(tmp_path):
    # create two paths that do not exist
    p1 = str(tmp_path / "missing_one.txt")
    p2 = str(tmp_path / "missing_two.txt")

    manifest = f"""
files:
  - path: {p1}
  - path: {p2}
"""

    mpath = tmp_path / "manifest_missing.yaml"
    mpath.write_text(manifest, encoding="utf-8")

    report = validate_manifest(str(mpath))
    assert "missing_files" in report
    # both missing paths should be reported
    assert p1 in report["missing_files"]
    assert p2 in report["missing_files"]


def test_truncated_evidence_and_secrets_reported(tmp_path):
    # entry with truncated evidence (ends with ...)
    trunc_path = str(tmp_path / "trunc.txt")
    trunc_evidence = "This output was cut off..."

    # entry with potential secret (contains PASSWORD)
    secret_path = str(tmp_path / "secret.txt")
    secret_evidence = "Found PASSWORD=sekret123 in the logs"

    manifest = f"""
files:
  - path: {trunc_path}
    evidence_excerpt: "{trunc_evidence}"
  - path: {secret_path}
    evidence_excerpt: "{secret_evidence}"
"""

    mpath = tmp_path / "manifest_edgecases.yaml"
    mpath.write_text(manifest, encoding="utf-8")

    report = validate_manifest(str(mpath))

    # truncated evidence should report the trunc_path
    assert "truncated_evidence" in report
    assert any(item.get("path") == trunc_path for item in report["truncated_evidence"])

    # potential secrets should report the secret_path
    assert "potential_secrets" in report
    assert any(item.get("path") == secret_path for item in report["potential_secrets"])
