package testserver import ( "fmt" "io" "net/http" "strings" ) type Client struct { server *Server lastResp *http.Response lastBody []byte } func NewClient(server *Server) *Client { return &Client{ server: server, } } func (c *Client) Request(method, path string, body []byte) error { url := c.server.GetBaseURL() + path req, err := http.NewRequest(method, url, nil) if err != nil { return fmt.Errorf("failed to create request: %w", err) } resp, err := http.DefaultClient.Do(req) if err != nil { return fmt.Errorf("request failed: %w", err) } defer resp.Body.Close() c.lastResp = resp c.lastBody, err = io.ReadAll(resp.Body) if err != nil { return fmt.Errorf("failed to read response body: %w", err) } return nil } func (c *Client) ExpectResponseBody(expected string) error { if c.lastResp == nil { return fmt.Errorf("no response received") } actual := string(c.lastBody) // Trim trailing newline if present (common in JSON responses) actual = strings.TrimSuffix(actual, "\n") if actual != expected { return fmt.Errorf("expected response body %q, got %q", expected, actual) } return nil } // Helper methods for debugging func (c *Client) GetLastResponse() *http.Response { return c.lastResp } func (c *Client) GetLastBody() []byte { return c.lastBody }