package dsms import ( "encoding/json" "io" "net/http" "net/http/httptest" "strings" "testing" ) func TestArchive_Success_ReturnsCID(t *testing.T) { server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { if r.Method != "POST" || r.URL.Path != "/api/v1/documents" { http.Error(w, "wrong route", http.StatusNotFound) return } if !strings.HasPrefix(r.Header.Get("Content-Type"), "multipart/form-data") { http.Error(w, "wrong content-type", http.StatusBadRequest) return } if r.Header.Get("Authorization") == "" { http.Error(w, "missing auth", http.StatusUnauthorized) return } io.ReadAll(r.Body) w.Header().Set("Content-Type", "application/json") _ = json.NewEncoder(w).Encode(ArchiveResult{ CID: "bafytest123", Size: 42, GatewayURL: "/ipfs/bafytest123", }) })) defer server.Close() old := gatewayURL defer func() { gatewayURL = old }() gatewayURL = server.URL got := Archive([]byte("hello"), "test.pdf", "ce_techfile", "proj-1", "1") if got == nil { t.Fatal("expected non-nil result on 200 OK") } if got.CID != "bafytest123" { t.Errorf("expected CID bafytest123, got %q", got.CID) } if got.Size != 42 { t.Errorf("expected Size 42, got %d", got.Size) } } func TestArchive_GatewayDown_ReturnsNil(t *testing.T) { old := gatewayURL defer func() { gatewayURL = old }() gatewayURL = "http://127.0.0.1:1" // unreachable got := Archive([]byte("hello"), "test.pdf", "ce_techfile", "proj-1", "1") if got != nil { t.Errorf("expected nil when gateway unreachable, got %+v", got) } } func TestArchive_GatewayReturnsError_ReturnsNil(t *testing.T) { server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { http.Error(w, "internal error", http.StatusInternalServerError) })) defer server.Close() old := gatewayURL defer func() { gatewayURL = old }() gatewayURL = server.URL got := Archive([]byte("hello"), "test.pdf", "ce_techfile", "proj-1", "1") if got != nil { t.Errorf("expected nil on 500 response, got %+v", got) } }