diff --git a/client.go b/client.go index 488cb70..949e860 100644 --- a/client.go +++ b/client.go @@ -207,8 +207,12 @@ func (c *OpenAPIClient) Operations() ([]OpenAPIOperation, error) { // // Example: // -// for op := range client.OperationsIter() { -// _ = op +// ops, err := client.OperationsIter() +// if err != nil { +// panic(err) +// } +// for op := range ops { +// fmt.Println(op.OperationID, op.PathTemplate) // } func (c *OpenAPIClient) OperationsIter() (iter.Seq[OpenAPIOperation], error) { operations, err := c.Operations() @@ -244,8 +248,12 @@ func (c *OpenAPIClient) Servers() ([]string, error) { // // Example: // -// for server := range client.ServersIter() { -// _ = server +// servers, err := client.ServersIter() +// if err != nil { +// panic(err) +// } +// for server := range servers { +// fmt.Println(server) // } func (c *OpenAPIClient) ServersIter() (iter.Seq[string], error) { servers, err := c.Servers() diff --git a/client_test.go b/client_test.go index 284c1d6..b0b2530 100644 --- a/client_test.go +++ b/client_test.go @@ -272,6 +272,58 @@ paths: {} } } +func TestOpenAPIClient_Good_IteratorsExposeSnapshots(t *testing.T) { + client := api.NewOpenAPIClient(api.WithSpecReader(strings.NewReader(`openapi: 3.1.0 +info: + title: Test API + version: 1.0.0 +servers: + - url: https://api.example.com +paths: + /users/{id}: + post: + operationId: update_user + parameters: + - name: id + in: path + required: true + schema: + type: string + requestBody: + required: true + content: + application/json: + schema: + type: object +`))) + + operations, err := client.OperationsIter() + if err != nil { + t.Fatalf("unexpected error: %v", err) + } + + var operationIDs []string + for op := range operations { + operationIDs = append(operationIDs, op.OperationID) + } + if !slices.Equal(operationIDs, []string{"update_user"}) { + t.Fatalf("expected iterator to preserve operation snapshots, got %v", operationIDs) + } + + servers, err := client.ServersIter() + if err != nil { + t.Fatalf("unexpected error: %v", err) + } + + var serverURLs []string + for server := range servers { + serverURLs = append(serverURLs, server) + } + if !slices.Equal(serverURLs, []string{"https://api.example.com"}) { + t.Fatalf("expected iterator to preserve server snapshots, got %v", serverURLs) + } +} + func TestOpenAPIClient_Good_CallHeadOperationWithRequestBody(t *testing.T) { errCh := make(chan error, 1) mux := http.NewServeMux()