@@ -301,6 +301,37 @@ func (s *Server) ownerByID(id string) (client.Owner, bool) {
301301 return client.Owner {}, false
302302}
303303
304+ // hydrateOwner returns the registered Owner for resources that store only an
305+ // owner ID. Real API detail responses include the expanded owner object; the
306+ // fake keeps fixtures lightweight by letting tests seed resource.Owner.Id and
307+ // server.Owners separately. Callers should assign the result to a response
308+ // copy, not the stored fixture, so GET handlers do not mutate seeded state.
309+ func (s * Server ) hydrateOwner (owner client.Owner ) client.Owner {
310+ if owner .Id == "" {
311+ return owner
312+ }
313+ hydrated , ok := s .ownerByID (owner .Id )
314+ if ! ok {
315+ return owner
316+ }
317+ if hydrated .Type == "" {
318+ hydrated .Type = owner .Type
319+ }
320+ return hydrated
321+ }
322+
323+ func (s * Server ) keyValueDetailResponse (kv * client.KeyValueDetail ) client.KeyValueDetail {
324+ detail := * kv
325+ detail .Owner = s .hydrateOwner (detail .Owner )
326+ return detail
327+ }
328+
329+ func (s * Server ) postgresDetailResponse (pg * client.PostgresDetail ) client.PostgresDetail {
330+ detail := * pg
331+ detail .Owner = s .hydrateOwner (detail .Owner )
332+ return detail
333+ }
334+
304335// URL returns the base URL of the fake server.
305336func (s * Server ) URL () string {
306337 return s .server .URL
@@ -614,7 +645,7 @@ func NewServer(t *testing.T) *Server {
614645 }
615646 s .KV .Instances = append (s .KV .Instances , kv )
616647
617- writeJSON (w , http .StatusCreated , kv )
648+ writeJSON (w , http .StatusCreated , s . keyValueDetailResponse ( kv ) )
618649 })
619650
620651 // GET /key-value/{id} — retrieve a KV instance
@@ -627,7 +658,7 @@ func NewServer(t *testing.T) *Server {
627658 }
628659 for _ , kv := range s .KV .Instances {
629660 if kv .Id == id {
630- writeJSON (w , http .StatusOK , kv )
661+ writeJSON (w , http .StatusOK , s . keyValueDetailResponse ( kv ) )
631662 return
632663 }
633664 }
@@ -683,7 +714,7 @@ func NewServer(t *testing.T) *Server {
683714 kv .IpAllowList = * body .IpAllowList
684715 }
685716 kv .UpdatedAt = time .Now ()
686- writeJSON (w , http .StatusOK , kv )
717+ writeJSON (w , http .StatusOK , s . keyValueDetailResponse ( kv ) )
687718 })
688719
689720 // POST /key-value/{id}/suspend — suspend a KV instance
@@ -833,7 +864,7 @@ func NewServer(t *testing.T) *Server {
833864 }
834865
835866 s .Postgres .Instances = append (s .Postgres .Instances , pg )
836- writeJSON (w , http .StatusCreated , pg )
867+ writeJSON (w , http .StatusCreated , s . postgresDetailResponse ( pg ) )
837868 })
838869
839870 // GET /postgres/{id} — retrieve a Postgres instance
@@ -846,7 +877,7 @@ func NewServer(t *testing.T) *Server {
846877 }
847878 for _ , pg := range s .Postgres .Instances {
848879 if pg .Id == id {
849- writeJSON (w , http .StatusOK , pg )
880+ writeJSON (w , http .StatusOK , s . postgresDetailResponse ( pg ) )
850881 return
851882 }
852883 }
@@ -970,7 +1001,7 @@ func NewServer(t *testing.T) *Server {
9701001 pg .IpAllowList = * body .IpAllowList
9711002 }
9721003 pg .UpdatedAt = time .Now ()
973- writeJSON (w , http .StatusOK , pg )
1004+ writeJSON (w , http .StatusOK , s . postgresDetailResponse ( pg ) )
9741005 })
9751006
9761007 registerServiceRoutes (mux , s , record )
0 commit comments