package reconciliation import ( "context" "testing" "gl/domain/ledger" ) func TestCompareEvidenceReportsMissingDuplicateAndBlockchainMismatch(t *testing.T) { journal := validJournal() journal.Blockchain = ledger.BlockchainReference{Network: "kuknos", TransactionHash: "hash-1"} matching := Evidence{SourceService: "wallet", SourceTransactionID: "t1", EventVersion: 1, BlockchainNetwork: "kuknos", TransactionHash: "hash-1"} evidence := []Evidence{ matching, matching, {SourceService: "wallet", SourceTransactionID: "missing", EventVersion: 1}, {SourceService: "wallet", SourceTransactionID: "t1", EventVersion: 1, BlockchainNetwork: "kuknos", TransactionHash: "wrong"}, } report, err := CompareEvidence(context.Background(), repositoryStub{pages: [][]ledger.Journal{{journal}}}, evidence, 10) if err != nil { t.Fatal(err) } if report.Compared != 4 || len(report.Missing) != 1 || len(report.Duplicates) != 2 || len(report.Mismatched) != 0 { t.Fatalf("unexpected report: %+v", report) } } func TestCompareEvidenceReportsHashMismatch(t *testing.T) { journal := validJournal() journal.Blockchain.TransactionHash = "actual" report, err := CompareEvidence(context.Background(), repositoryStub{pages: [][]ledger.Journal{{journal}}}, []Evidence{{SourceService: "wallet", SourceTransactionID: "t1", EventVersion: 1, TransactionHash: "expected"}}, 10) if err != nil { t.Fatal(err) } if len(report.Mismatched) != 1 || report.Mismatched[0].Field != "transaction_hash" { t.Fatalf("unexpected report: %+v", report) } }