package providermemory import ( "context" "net/http" "net/http/httptest" "testing" "time" ) func TestHTTPClientUpsertAndDelete(t *testing.T) { requests := 0 server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { requests++ if r.Header.Get("Authorization") != "Bearer test-key" || r.Header.Get("Idempotency-Key") == "" { t.Fatalf("missing provider authentication or idempotency header") } switch { case r.Method == http.MethodPost && r.URL.Path == "/v1/memories:upsert": w.Header().Set("Content-Type", "application/json") _, _ = w.Write([]byte(`{"provider_ref":"provider-memory-1"}`)) case r.Method == http.MethodDelete && r.URL.Path == "/v1/memories/provider-memory-1": w.WriteHeader(http.StatusNoContent) default: http.NotFound(w, r) } })) defer server.Close() client, err := NewHTTPClient(server.URL, "test-key", time.Second) if err != nil { t.Fatal(err) } providerRef, err := client.Upsert(context.Background(), Memory{TenantID: "tenant", HouseholdID: "household", SubjectID: "subject", MemoryID: "memory", MemoryVersion: "version", VersionNo: 1, Content: "content", ContentDigest: "digest", IdempotencyKey: "upsert-1"}) if err != nil || providerRef != "provider-memory-1" { t.Fatalf("providerRef=%q err=%v", providerRef, err) } if err := client.Delete(context.Background(), providerRef, "delete-1"); err != nil { t.Fatal(err) } if requests != 2 { t.Fatalf("requests=%d", requests) } } func TestHTTPClientTreatsMissingDeleteAsSuccess(t *testing.T) { server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, _ *http.Request) { http.NotFound(w, nil) })) defer server.Close() client, err := NewHTTPClient(server.URL, "test-key", time.Second) if err != nil { t.Fatal(err) } if err := client.Delete(context.Background(), "missing", "delete-missing"); err != nil { t.Fatal(err) } }