package main

import (
	"encoding/json"
	"reflect"
	"sort"
	"testing"
)

// TestEscrowUploadContract pins the agent→hub escrow wire shape. It MUST match the hub's ingest
// struct (felhom-hub api.escrowUploadRequest). Cross-repo, no shared module — this is the agent
// half of the contract guard; the hub has the mirror in its own test.
func TestEscrowUploadContract(t *testing.T) {
	b, _ := json.Marshal(escrowUploadRequest{BlobB64: "x", KeyFingerprint: "y", Posture: "z", CreatedAt: "t"})
	var m map[string]any
	if err := json.Unmarshal(b, &m); err != nil {
		t.Fatal(err)
	}
	got := make([]string, 0, len(m))
	for k := range m {
		got = append(got, k)
	}
	sort.Strings(got)
	want := []string{"blob_b64", "created_at", "key_fingerprint", "posture"}
	if !reflect.DeepEqual(got, want) {
		t.Fatalf("escrow wire contract drift: got %v want %v (must match the hub ingest struct)", got, want)
	}
}
