1// Code generated by smithy-go-codegen DO NOT EDIT.
2
3package query
4
5import (
6	"bytes"
7	"context"
8	"github.com/aws/aws-sdk-go-v2/aws"
9	"github.com/aws/aws-sdk-go-v2/internal/protocoltest/query/types"
10	"github.com/aws/smithy-go/middleware"
11	"github.com/aws/smithy-go/ptr"
12	smithyrand "github.com/aws/smithy-go/rand"
13	smithytesting "github.com/aws/smithy-go/testing"
14	smithyhttp "github.com/aws/smithy-go/transport/http"
15	"github.com/google/go-cmp/cmp/cmpopts"
16	"io/ioutil"
17	"net/http"
18	"testing"
19)
20
21func TestClient_RecursiveXmlShapes_awsAwsqueryDeserialize(t *testing.T) {
22	cases := map[string]struct {
23		StatusCode    int
24		Header        http.Header
25		BodyMediaType string
26		Body          []byte
27		ExpectResult  *RecursiveXmlShapesOutput
28	}{
29		// Serializes recursive structures
30		"QueryRecursiveShapes": {
31			StatusCode: 200,
32			Header: http.Header{
33				"Content-Type": []string{"text/xml"},
34			},
35			BodyMediaType: "application/xml",
36			Body: []byte(`<RecursiveXmlShapesResponse xmlns="https://example.com/">
37			    <RecursiveXmlShapesResult>
38			        <nested>
39			            <foo>Foo1</foo>
40			            <nested>
41			                <bar>Bar1</bar>
42			                <recursiveMember>
43			                    <foo>Foo2</foo>
44			                    <nested>
45			                        <bar>Bar2</bar>
46			                    </nested>
47			                </recursiveMember>
48			            </nested>
49			        </nested>
50			    </RecursiveXmlShapesResult>
51			</RecursiveXmlShapesResponse>
52			`),
53			ExpectResult: &RecursiveXmlShapesOutput{
54				Nested: &types.RecursiveXmlShapesOutputNested1{
55					Foo: ptr.String("Foo1"),
56					Nested: &types.RecursiveXmlShapesOutputNested2{
57						Bar: ptr.String("Bar1"),
58						RecursiveMember: &types.RecursiveXmlShapesOutputNested1{
59							Foo: ptr.String("Foo2"),
60							Nested: &types.RecursiveXmlShapesOutputNested2{
61								Bar: ptr.String("Bar2"),
62							},
63						},
64					},
65				},
66			},
67		},
68	}
69	for name, c := range cases {
70		t.Run(name, func(t *testing.T) {
71			url := "http://localhost:8888/"
72			client := New(Options{
73				HTTPClient: smithyhttp.ClientDoFunc(func(r *http.Request) (*http.Response, error) {
74					headers := http.Header{}
75					for k, vs := range c.Header {
76						for _, v := range vs {
77							headers.Add(k, v)
78						}
79					}
80					if len(c.BodyMediaType) != 0 && len(headers.Values("Content-Type")) == 0 {
81						headers.Set("Content-Type", c.BodyMediaType)
82					}
83					response := &http.Response{
84						StatusCode: c.StatusCode,
85						Header:     headers,
86						Request:    r,
87					}
88					if len(c.Body) != 0 {
89						response.ContentLength = int64(len(c.Body))
90						response.Body = ioutil.NopCloser(bytes.NewReader(c.Body))
91					} else {
92
93						response.Body = http.NoBody
94					}
95					return response, nil
96				}),
97				APIOptions: []func(*middleware.Stack) error{
98					func(s *middleware.Stack) error {
99						s.Finalize.Clear()
100						return nil
101					},
102				},
103				EndpointResolver: EndpointResolverFunc(func(region string, options EndpointResolverOptions) (e aws.Endpoint, err error) {
104					e.URL = url
105					e.SigningRegion = "us-west-2"
106					return e, err
107				}),
108				IdempotencyTokenProvider: smithyrand.NewUUIDIdempotencyToken(&smithytesting.ByteLoop{}),
109				Region:                   "us-west-2",
110			})
111			var params RecursiveXmlShapesInput
112			result, err := client.RecursiveXmlShapes(context.Background(), &params)
113			if err != nil {
114				t.Fatalf("expect nil err, got %v", err)
115			}
116			if result == nil {
117				t.Fatalf("expect not nil result")
118			}
119			if err := smithytesting.CompareValues(c.ExpectResult, result, cmpopts.IgnoreUnexported(middleware.Metadata{})); err != nil {
120				t.Errorf("expect c.ExpectResult value match:\n%v", err)
121			}
122		})
123	}
124}
125