Skip to content

Commit b466a2f

Browse files
author
Oliver Kahrmann
committed
Implement integration test for multiple response content types
1 parent 369e569 commit b466a2f

45 files changed

Lines changed: 2281 additions & 8 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.
Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
{
2+
"openapi": "3.0.3",
3+
"info": {
4+
"title": "title",
5+
"version": "v0.1.0"
6+
},
7+
"paths": {
8+
"/multipleContentTypesWithParameters": {
9+
"get": {
10+
"operationId": "multipleContentTypesWithParameters",
11+
"parameters": [
12+
{
13+
"name": "q",
14+
"in": "query",
15+
"required": true,
16+
"schema": {
17+
"type": "string"
18+
}
19+
}
20+
],
21+
"responses": {
22+
"200": {
23+
"description": "Ok",
24+
"content": {
25+
"application/octet-stream": {
26+
"schema": {
27+
"type": "string",
28+
"format": "binary"
29+
}
30+
},
31+
"application/json": {
32+
"schema": {
33+
"type": "object",
34+
"properties": {
35+
"data": {
36+
"type": "string"
37+
}
38+
},
39+
"required": [
40+
"data"
41+
]
42+
}
43+
}
44+
}
45+
}
46+
}
47+
}
48+
},
49+
"/multipleContentTypesWithoutParameters": {
50+
"get": {
51+
"operationId": "multipleContentTypesWithoutParameters",
52+
"responses": {
53+
"200": {
54+
"description": "Ok",
55+
"content": {
56+
"application/octet-stream": {
57+
"schema": {
58+
"type": "string",
59+
"format": "binary"
60+
}
61+
},
62+
"application/json": {
63+
"schema": {
64+
"type": "object",
65+
"properties": {
66+
"data": {
67+
"type": "string"
68+
}
69+
},
70+
"required": [
71+
"data"
72+
]
73+
}
74+
}
75+
}
76+
}
77+
}
78+
}
79+
}
80+
}
81+
}

internal/integration/generate.go

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -15,14 +15,15 @@ package integration
1515

1616
// Tests
1717
//
18-
//go:generate go run ../../cmd/ogen -v --clean --target test_webhooks ../../_testdata/positive/webhooks.json
19-
//go:generate go run ../../cmd/ogen -v --clean --target test_servers ../../_testdata/positive/servers.json
20-
//go:generate go run ../../cmd/ogen -v --clean --target test_single_endpoint ../../_testdata/positive/single_endpoint.json
21-
//go:generate go run ../../cmd/ogen -v --clean --target test_http_responses ../../_testdata/positive/http_responses.json
22-
//go:generate go run ../../cmd/ogen -v --clean --target test_http_requests ../../_testdata/positive/http_requests.json
23-
//go:generate go run ../../cmd/ogen -v --clean --target test_form ../../_testdata/positive/form.json
24-
//go:generate go run ../../cmd/ogen -v --clean --target test_parameters ../../_testdata/positive/parameters.json
25-
//go:generate go run ../../cmd/ogen -v --clean --target test_security ../../_testdata/positive/security.json
18+
//go:generate go run ../../cmd/ogen -v --clean --target test_webhooks ../../_testdata/positive/webhooks.json
19+
//go:generate go run ../../cmd/ogen -v --clean --target test_servers ../../_testdata/positive/servers.json
20+
//go:generate go run ../../cmd/ogen -v --clean --target test_single_endpoint ../../_testdata/positive/single_endpoint.json
21+
//go:generate go run ../../cmd/ogen -v --clean --target test_http_responses ../../_testdata/positive/http_responses.json
22+
//go:generate go run ../../cmd/ogen -v --clean --target test_http_responses_accept ../../_testdata/positive/http_responses_accept.json
23+
//go:generate go run ../../cmd/ogen -v --clean --target test_http_requests ../../_testdata/positive/http_requests.json
24+
//go:generate go run ../../cmd/ogen -v --clean --target test_form ../../_testdata/positive/form.json
25+
//go:generate go run ../../cmd/ogen -v --clean --target test_parameters ../../_testdata/positive/parameters.json
26+
//go:generate go run ../../cmd/ogen -v --clean --target test_security ../../_testdata/positive/security.json
2627
//
2728
//
2829
//go:generate go run ../../cmd/ogen -v --clean --target referenced_path_item ../../_testdata/positive/referenced_pathItem.json

internal/integration/referenced_path_item/oas_mediatypes_gen.go

Lines changed: 7 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 135 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,135 @@
1+
package integration_test
2+
3+
import (
4+
"bytes"
5+
"context"
6+
"errors"
7+
"io"
8+
"net/http/httptest"
9+
"testing"
10+
11+
"github.com/stretchr/testify/require"
12+
13+
"github.com/ogen-go/ogen/http"
14+
api "github.com/ogen-go/ogen/internal/integration/test_http_responses_accept"
15+
)
16+
17+
var (
18+
errNotAcceptable = errors.New("not acceptable")
19+
)
20+
21+
type testHTTPResponsesAccept struct{}
22+
23+
func (t testHTTPResponsesAccept) MultipleContentTypesWithParameters(ctx context.Context, params api.MultipleContentTypesWithParametersParams) (api.MultipleContentTypesWithParametersRes, error) {
24+
if params.Accept.MatchesContentType(api.MediaTypeApplicationOctetStream) {
25+
return &api.MultipleContentTypesWithParametersOKApplicationOctetStream{
26+
Data: bytes.NewBufferString("byte content with parameter " + params.Q),
27+
}, nil
28+
} else if params.Accept.MatchesContentType(api.MediaTypeApplicationJSON) {
29+
return &api.MultipleContentTypesWithParametersOKApplicationJSON{
30+
Data: "json data with parameter " + params.Q,
31+
}, nil
32+
} else {
33+
return nil, errNotAcceptable
34+
}
35+
}
36+
37+
func (t testHTTPResponsesAccept) MultipleContentTypesWithoutParameters(ctx context.Context, params api.MultipleContentTypesWithoutParametersParams) (api.MultipleContentTypesWithoutParametersRes, error) {
38+
if params.Accept.MatchesContentType(api.MediaTypeApplicationOctetStream) {
39+
return &api.MultipleContentTypesWithoutParametersOKApplicationOctetStream{
40+
Data: bytes.NewBufferString("byte content"),
41+
}, nil
42+
} else if params.Accept.MatchesContentType(api.MediaTypeApplicationJSON) {
43+
return &api.MultipleContentTypesWithoutParametersOKApplicationJSON{
44+
Data: "json data",
45+
}, nil
46+
} else {
47+
return nil, errNotAcceptable
48+
}
49+
}
50+
51+
func testResponsesAcceptInit(t *testing.T, h testHTTPResponsesAccept) (*require.Assertions, *api.Client) {
52+
a := require.New(t)
53+
54+
srv, err := api.NewServer(h)
55+
a.NoError(err)
56+
57+
s := httptest.NewServer(srv)
58+
t.Cleanup(func() {
59+
s.Close()
60+
})
61+
62+
client, err := api.NewClient(s.URL, api.WithClient(s.Client()))
63+
a.NoError(err)
64+
65+
return a, client
66+
}
67+
68+
func TestResponsesAcceptMultipleContentTypes(t *testing.T) {
69+
create := func(t *testing.T) (context.Context, *require.Assertions, *api.Client) {
70+
a, client := testResponsesAcceptInit(t, testHTTPResponsesAccept{})
71+
return context.Background(), a, client
72+
}
73+
74+
ctx, a, client := create(t)
75+
76+
t.Run("Without Parameters", func(t *testing.T) {
77+
t.Run("byte data", func(t *testing.T) {
78+
79+
r, err := client.MultipleContentTypesWithoutParameters(ctx, api.MultipleContentTypesWithoutParametersParams{
80+
Accept: http.AcceptHeaderNew(api.MediaTypeApplicationOctetStream),
81+
})
82+
a.NoError(err)
83+
84+
a.IsType(&api.MultipleContentTypesWithoutParametersOKApplicationOctetStream{}, r)
85+
res := r.(*api.MultipleContentTypesWithoutParametersOKApplicationOctetStream)
86+
87+
data, err := io.ReadAll(res.Data)
88+
a.NoError(err)
89+
a.Equal([]byte("byte content"), data)
90+
})
91+
t.Run("json data", func(t *testing.T) {
92+
93+
r, err := client.MultipleContentTypesWithoutParameters(ctx, api.MultipleContentTypesWithoutParametersParams{
94+
Accept: http.AcceptHeaderNew(api.MediaTypeApplicationJSON),
95+
})
96+
a.NoError(err)
97+
98+
a.IsType(&api.MultipleContentTypesWithoutParametersOKApplicationJSON{}, r)
99+
res := r.(*api.MultipleContentTypesWithoutParametersOKApplicationJSON)
100+
101+
a.Equal("json data", res.Data)
102+
})
103+
})
104+
105+
t.Run("With Parameters", func(t *testing.T) {
106+
t.Run("byte data", func(t *testing.T) {
107+
108+
r, err := client.MultipleContentTypesWithParameters(ctx, api.MultipleContentTypesWithParametersParams{
109+
Accept: http.AcceptHeaderNew(api.MediaTypeApplicationOctetStream),
110+
Q: "from unit test",
111+
})
112+
a.NoError(err)
113+
114+
a.IsType(&api.MultipleContentTypesWithParametersOKApplicationOctetStream{}, r)
115+
res := r.(*api.MultipleContentTypesWithParametersOKApplicationOctetStream)
116+
117+
data, err := io.ReadAll(res.Data)
118+
a.NoError(err)
119+
a.Equal([]byte("byte content with parameter from unit test"), data)
120+
})
121+
t.Run("json data", func(t *testing.T) {
122+
123+
r, err := client.MultipleContentTypesWithParameters(ctx, api.MultipleContentTypesWithParametersParams{
124+
Accept: http.AcceptHeaderNew(api.MediaTypeApplicationJSON),
125+
Q: "from unit test",
126+
})
127+
a.NoError(err)
128+
129+
a.IsType(&api.MultipleContentTypesWithParametersOKApplicationJSON{}, r)
130+
res := r.(*api.MultipleContentTypesWithParametersOKApplicationJSON)
131+
132+
a.Equal("json data with parameter from unit test", res.Data)
133+
})
134+
})
135+
}

internal/integration/sample_api/oas_mediatypes_gen.go

Lines changed: 8 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

internal/integration/sample_api_nc/oas_mediatypes_gen.go

Lines changed: 8 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

internal/integration/sample_api_no_otel/oas_mediatypes_gen.go

Lines changed: 8 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

internal/integration/sample_api_ns/oas_mediatypes_gen.go

Lines changed: 8 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

internal/integration/sample_err/oas_mediatypes_gen.go

Lines changed: 7 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

internal/integration/security_reentrant/oas_mediatypes_gen.go

Lines changed: 5 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)