@typespec/http-specs 0.1.0-alpha.9-dev.5 → 0.1.0-dev.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +256 -2
- package/README.md +11 -3
- package/dist/specs/authentication/noauth/union/mockapi.d.ts +3 -0
- package/dist/specs/authentication/noauth/union/mockapi.d.ts.map +1 -0
- package/dist/specs/authentication/noauth/union/mockapi.js +25 -0
- package/dist/specs/authentication/noauth/union/mockapi.js.map +1 -0
- package/dist/specs/documentation/mockapi.d.ts +3 -0
- package/dist/specs/documentation/mockapi.d.ts.map +1 -0
- package/dist/specs/documentation/mockapi.js +40 -0
- package/dist/specs/documentation/mockapi.js.map +1 -0
- package/dist/specs/encode/array/mockapi.d.ts +3 -0
- package/dist/specs/encode/array/mockapi.d.ts.map +1 -0
- package/dist/specs/encode/array/mockapi.js +33 -0
- package/dist/specs/encode/array/mockapi.js.map +1 -0
- package/dist/specs/encode/bytes/mockapi.js +16 -24
- package/dist/specs/encode/bytes/mockapi.js.map +1 -1
- package/dist/specs/encode/datetime/mockapi.js +2 -2
- package/dist/specs/encode/datetime/mockapi.js.map +1 -1
- package/dist/specs/encode/duration/mockapi.d.ts.map +1 -1
- package/dist/specs/encode/duration/mockapi.js +110 -3
- package/dist/specs/encode/duration/mockapi.js.map +1 -1
- package/dist/specs/encode/numeric/mockapi.js +2 -2
- package/dist/specs/encode/numeric/mockapi.js.map +1 -1
- package/dist/specs/helper.d.ts +2 -2
- package/dist/specs/helper.d.ts.map +1 -1
- package/dist/specs/parameters/basic/mockapi.d.ts.map +1 -1
- package/dist/specs/parameters/basic/mockapi.js +3 -3
- package/dist/specs/parameters/basic/mockapi.js.map +1 -1
- package/dist/specs/parameters/body-optionality/mockapi.d.ts.map +1 -1
- package/dist/specs/parameters/body-optionality/mockapi.js +14 -4
- package/dist/specs/parameters/body-optionality/mockapi.js.map +1 -1
- package/dist/specs/parameters/collection-format/mockapi.js +4 -15
- package/dist/specs/parameters/collection-format/mockapi.js.map +1 -1
- package/dist/specs/parameters/path/mockapi.d.ts +3 -0
- package/dist/specs/parameters/path/mockapi.d.ts.map +1 -0
- package/dist/specs/parameters/path/mockapi.js +29 -0
- package/dist/specs/parameters/path/mockapi.js.map +1 -0
- package/dist/specs/parameters/query/mockapi.d.ts +3 -0
- package/dist/specs/parameters/query/mockapi.d.ts.map +1 -0
- package/dist/specs/parameters/query/mockapi.js +14 -0
- package/dist/specs/parameters/query/mockapi.js.map +1 -0
- package/dist/specs/parameters/spread/mockapi.d.ts.map +1 -1
- package/dist/specs/parameters/spread/mockapi.js +19 -19
- package/dist/specs/parameters/spread/mockapi.js.map +1 -1
- package/dist/specs/payload/json-merge-patch/mockapi.js +4 -4
- package/dist/specs/payload/json-merge-patch/mockapi.js.map +1 -1
- package/dist/specs/payload/media-type/mockapi.js +2 -2
- package/dist/specs/payload/media-type/mockapi.js.map +1 -1
- package/dist/specs/payload/multipart/mockapi.d.ts.map +1 -1
- package/dist/specs/payload/multipart/mockapi.js +189 -60
- package/dist/specs/payload/multipart/mockapi.js.map +1 -1
- package/dist/specs/payload/pageable/mockapi.d.ts.map +1 -1
- package/dist/specs/payload/pageable/mockapi.js +594 -14
- package/dist/specs/payload/pageable/mockapi.js.map +1 -1
- package/dist/specs/payload/xml/mockapi.d.ts +3 -0
- package/dist/specs/payload/xml/mockapi.d.ts.map +1 -1
- package/dist/specs/payload/xml/mockapi.js +35 -5
- package/dist/specs/payload/xml/mockapi.js.map +1 -1
- package/dist/specs/response/status-code-range/mockapi.d.ts.map +1 -1
- package/dist/specs/response/status-code-range/mockapi.js +5 -9
- package/dist/specs/response/status-code-range/mockapi.js.map +1 -1
- package/dist/specs/routes/mockapi.js +16 -16
- package/dist/specs/routes/mockapi.js.map +1 -1
- package/dist/specs/serialization/encoded-name/json/mockapi.js +1 -1
- package/dist/specs/serialization/encoded-name/json/mockapi.js.map +1 -1
- package/dist/specs/server/versions/not-versioned/mockapi.js +1 -1
- package/dist/specs/server/versions/not-versioned/mockapi.js.map +1 -1
- package/dist/specs/server/versions/versioned/mockapi.js +8 -12
- package/dist/specs/server/versions/versioned/mockapi.js.map +1 -1
- package/dist/specs/special-words/mockapi.d.ts.map +1 -1
- package/dist/specs/special-words/mockapi.js +59 -6
- package/dist/specs/special-words/mockapi.js.map +1 -1
- package/dist/specs/streaming/jsonl/mockapi.d.ts +3 -0
- package/dist/specs/streaming/jsonl/mockapi.d.ts.map +1 -0
- package/dist/specs/streaming/jsonl/mockapi.js +30 -0
- package/dist/specs/streaming/jsonl/mockapi.js.map +1 -0
- package/dist/specs/type/array/mockapi.js +1 -1
- package/dist/specs/type/array/mockapi.js.map +1 -1
- package/dist/specs/type/dictionary/mockapi.js +1 -1
- package/dist/specs/type/dictionary/mockapi.js.map +1 -1
- package/dist/specs/type/enum/extensible/mockapi.js +1 -1
- package/dist/specs/type/enum/extensible/mockapi.js.map +1 -1
- package/dist/specs/type/enum/fixed/mockapi.js +2 -2
- package/dist/specs/type/enum/fixed/mockapi.js.map +1 -1
- package/dist/specs/type/file/mockapi.d.ts +3 -0
- package/dist/specs/type/file/mockapi.d.ts.map +1 -0
- package/dist/specs/type/file/mockapi.js +187 -0
- package/dist/specs/type/file/mockapi.js.map +1 -0
- package/dist/specs/type/model/empty/mockapi.js +2 -2
- package/dist/specs/type/model/empty/mockapi.js.map +1 -1
- package/dist/specs/type/model/inheritance/enum-discriminator/mockapi.js +1 -1
- package/dist/specs/type/model/inheritance/enum-discriminator/mockapi.js.map +1 -1
- package/dist/specs/type/model/inheritance/nested-discriminator/mockapi.js +2 -2
- package/dist/specs/type/model/inheritance/nested-discriminator/mockapi.js.map +1 -1
- package/dist/specs/type/model/inheritance/not-discriminated/mockapi.js +2 -2
- package/dist/specs/type/model/inheritance/not-discriminated/mockapi.js.map +1 -1
- package/dist/specs/type/model/inheritance/recursive/mockapi.js +1 -1
- package/dist/specs/type/model/inheritance/recursive/mockapi.js.map +1 -1
- package/dist/specs/type/model/inheritance/single-discriminator/mockapi.js +2 -2
- package/dist/specs/type/model/inheritance/single-discriminator/mockapi.js.map +1 -1
- package/dist/specs/type/model/usage/mockapi.js +4 -4
- package/dist/specs/type/model/usage/mockapi.js.map +1 -1
- package/dist/specs/type/model/visibility/mockapi.js +9 -10
- package/dist/specs/type/model/visibility/mockapi.js.map +1 -1
- package/dist/specs/type/property/additional-properties/mockapi.js +9 -6
- package/dist/specs/type/property/additional-properties/mockapi.js.map +1 -1
- package/dist/specs/type/property/nullable/mockapi.js +2 -6
- package/dist/specs/type/property/nullable/mockapi.js.map +1 -1
- package/dist/specs/type/property/optionality/mockapi.js +1 -1
- package/dist/specs/type/property/optionality/mockapi.js.map +1 -1
- package/dist/specs/type/property/value-types/mockapi.js +3 -3
- package/dist/specs/type/property/value-types/mockapi.js.map +1 -1
- package/dist/specs/type/scalar/mockapi.js +9 -9
- package/dist/specs/type/scalar/mockapi.js.map +1 -1
- package/dist/specs/type/union/discriminated/mockapi.d.ts +3 -0
- package/dist/specs/type/union/discriminated/mockapi.d.ts.map +1 -0
- package/dist/specs/type/union/discriminated/mockapi.js +212 -0
- package/dist/specs/type/union/discriminated/mockapi.js.map +1 -0
- package/dist/specs/type/union/mockapi.js +2 -2
- package/dist/specs/type/union/mockapi.js.map +1 -1
- package/dist/specs/versioning/added/mockapi.js +6 -6
- package/dist/specs/versioning/added/mockapi.js.map +1 -1
- package/dist/specs/versioning/madeOptional/mockapi.js +2 -2
- package/dist/specs/versioning/madeOptional/mockapi.js.map +1 -1
- package/dist/specs/versioning/removed/mockapi.js +11 -11
- package/dist/specs/versioning/removed/mockapi.js.map +1 -1
- package/dist/specs/versioning/renamedFrom/mockapi.js +5 -5
- package/dist/specs/versioning/renamedFrom/mockapi.js.map +1 -1
- package/dist/specs/versioning/returnTypeChangedFrom/mockapi.js +1 -1
- package/dist/specs/versioning/returnTypeChangedFrom/mockapi.js.map +1 -1
- package/dist/specs/versioning/typeChangedFrom/mockapi.js +3 -3
- package/dist/specs/versioning/typeChangedFrom/mockapi.js.map +1 -1
- package/manifest.json +11200 -0
- package/package.json +30 -19
- package/smoke/petstore/main.tsp +96 -0
- package/smoke/todoapp/main.tsp +293 -0
- package/spec-summary.md +1745 -121
- package/specs/authentication/noauth/union/main.tsp +30 -0
- package/specs/authentication/noauth/union/mockapi.ts +27 -0
- package/specs/documentation/main.tsp +158 -0
- package/specs/documentation/mockapi.ts +59 -0
- package/specs/encode/array/main.tsp +339 -0
- package/specs/encode/array/mockapi.ts +83 -0
- package/specs/encode/bytes/main.tsp +29 -20
- package/specs/encode/bytes/mockapi.ts +13 -31
- package/specs/encode/datetime/main.tsp +2 -7
- package/specs/encode/datetime/mockapi.ts +2 -2
- package/specs/encode/duration/main.tsp +420 -7
- package/specs/encode/duration/mockapi.ts +216 -2
- package/specs/encode/numeric/mockapi.ts +2 -2
- package/specs/parameters/basic/mockapi.ts +3 -3
- package/specs/parameters/body-optionality/main.tsp +2 -0
- package/specs/parameters/body-optionality/mockapi.ts +24 -4
- package/specs/parameters/collection-format/main.tsp +5 -25
- package/specs/parameters/collection-format/mockapi.ts +4 -16
- package/specs/parameters/path/main.tsp +48 -0
- package/specs/parameters/path/mockapi.ts +34 -0
- package/specs/parameters/query/main.tsp +22 -0
- package/specs/parameters/query/mockapi.ts +15 -0
- package/specs/parameters/spread/mockapi.ts +19 -19
- package/specs/payload/json-merge-patch/main.tsp +2 -2
- package/specs/payload/json-merge-patch/mockapi.ts +4 -4
- package/specs/payload/media-type/mockapi.ts +2 -2
- package/specs/payload/multipart/main.tsp +230 -32
- package/specs/payload/multipart/mockapi.ts +200 -59
- package/specs/payload/pageable/main.tsp +601 -0
- package/specs/payload/pageable/mockapi.ts +656 -14
- package/specs/payload/xml/main.tsp +89 -0
- package/specs/payload/xml/mockapi.ts +44 -5
- package/specs/response/status-code-range/main.tsp +2 -2
- package/specs/response/status-code-range/mockapi.ts +5 -9
- package/specs/routes/main.tsp +29 -29
- package/specs/routes/mockapi.ts +16 -16
- package/specs/serialization/encoded-name/json/main.tsp +1 -1
- package/specs/serialization/encoded-name/json/mockapi.ts +1 -1
- package/specs/server/endpoint/not-defined/main.tsp +1 -3
- package/specs/server/path/multiple/main.tsp +3 -5
- package/specs/server/versions/not-versioned/mockapi.ts +1 -1
- package/specs/server/versions/versioned/main.tsp +1 -1
- package/specs/server/versions/versioned/mockapi.ts +6 -12
- package/specs/special-headers/conditional-request/main.tsp +1 -1
- package/specs/special-headers/repeatability/main.tsp +2 -2
- package/specs/special-words/main.tsp +118 -6
- package/specs/special-words/mockapi.ts +62 -6
- package/specs/streaming/jsonl/main.tsp +33 -0
- package/specs/streaming/jsonl/mockapi.ts +32 -0
- package/specs/type/array/mockapi.ts +1 -1
- package/specs/type/dictionary/mockapi.ts +1 -1
- package/specs/type/enum/extensible/main.tsp +18 -2
- package/specs/type/enum/extensible/mockapi.ts +1 -1
- package/specs/type/enum/fixed/main.tsp +15 -3
- package/specs/type/enum/fixed/mockapi.ts +2 -2
- package/specs/type/file/main.tsp +109 -0
- package/specs/type/file/mockapi.ts +200 -0
- package/specs/type/model/empty/mockapi.ts +2 -2
- package/specs/type/model/inheritance/enum-discriminator/mockapi.ts +1 -1
- package/specs/type/model/inheritance/nested-discriminator/mockapi.ts +2 -2
- package/specs/type/model/inheritance/not-discriminated/mockapi.ts +2 -2
- package/specs/type/model/inheritance/recursive/mockapi.ts +1 -1
- package/specs/type/model/inheritance/single-discriminator/mockapi.ts +2 -2
- package/specs/type/model/usage/mockapi.ts +4 -4
- package/specs/type/model/visibility/main.tsp +9 -17
- package/specs/type/model/visibility/mockapi.ts +9 -10
- package/specs/type/property/additional-properties/main.tsp +17 -17
- package/specs/type/property/additional-properties/mockapi.ts +10 -10
- package/specs/type/property/nullable/mockapi.ts +7 -8
- package/specs/type/property/optionality/mockapi.ts +1 -1
- package/specs/type/property/value-types/mockapi.ts +3 -3
- package/specs/type/scalar/main.tsp +58 -9
- package/specs/type/scalar/mockapi.ts +9 -9
- package/specs/type/union/discriminated/main.tsp +251 -0
- package/specs/type/union/discriminated/mockapi.ts +230 -0
- package/specs/type/union/mockapi.ts +2 -2
- package/specs/versioning/added/mockapi.ts +6 -6
- package/specs/versioning/madeOptional/mockapi.ts +2 -2
- package/specs/versioning/removed/main.tsp +5 -5
- package/specs/versioning/removed/mockapi.ts +11 -11
- package/specs/versioning/renamedFrom/mockapi.ts +5 -5
- package/specs/versioning/returnTypeChangedFrom/main.tsp +17 -2
- package/specs/versioning/returnTypeChangedFrom/mockapi.ts +1 -1
- package/specs/versioning/typeChangedFrom/mockapi.ts +3 -3
- package/temp/.tsbuildinfo +1 -1
- package/tsconfig.build.json +0 -4
- package/tspconfig.yaml +0 -2
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import "@typespec/http";
|
|
2
2
|
import "@typespec/spector";
|
|
3
|
+
import "@typespec/xml";
|
|
3
4
|
|
|
4
5
|
using Http;
|
|
5
6
|
using Spector;
|
|
7
|
+
using Xml;
|
|
6
8
|
|
|
7
9
|
/**
|
|
8
10
|
* Test for pageable payload.
|
|
@@ -15,6 +17,11 @@ model Pet {
|
|
|
15
17
|
name: string;
|
|
16
18
|
}
|
|
17
19
|
|
|
20
|
+
alias HeaderAndQuery = {
|
|
21
|
+
@header foo?: string;
|
|
22
|
+
@query bar?: string;
|
|
23
|
+
};
|
|
24
|
+
|
|
18
25
|
@route("/server-driven-pagination")
|
|
19
26
|
namespace ServerDrivenPagination {
|
|
20
27
|
@scenario
|
|
@@ -52,4 +59,598 @@ namespace ServerDrivenPagination {
|
|
|
52
59
|
|
|
53
60
|
@nextLink next?: url;
|
|
54
61
|
};
|
|
62
|
+
|
|
63
|
+
@scenario
|
|
64
|
+
@scenarioDoc("""
|
|
65
|
+
Test case for using link as pagination with string nextLink.
|
|
66
|
+
|
|
67
|
+
Two requests need to be tested.
|
|
68
|
+
1. Initial request:
|
|
69
|
+
Expected route: /payload/pageable/server-driven-pagination/link-string
|
|
70
|
+
Expected response body:
|
|
71
|
+
```json
|
|
72
|
+
{ "pets": [
|
|
73
|
+
{ "id": "1", "name": "dog" },
|
|
74
|
+
{ "id": "2", "name": "cat" }
|
|
75
|
+
],
|
|
76
|
+
"next": "http://[host]:[port]/payload/pageable/server-driven-pagination/link-string/nextPage"
|
|
77
|
+
}
|
|
78
|
+
```
|
|
79
|
+
2. Next page request:
|
|
80
|
+
Expected route: /payload/pageable/server-driven-pagination/link-string/nextPage
|
|
81
|
+
Expected response body:
|
|
82
|
+
```json
|
|
83
|
+
{ "pets": [
|
|
84
|
+
{ "id": "3", "name": "bird" },
|
|
85
|
+
{ "id": "4", "name": "fish" }
|
|
86
|
+
]
|
|
87
|
+
}
|
|
88
|
+
```
|
|
89
|
+
""")
|
|
90
|
+
@route("/link-string")
|
|
91
|
+
@list
|
|
92
|
+
op linkString(): {
|
|
93
|
+
@pageItems
|
|
94
|
+
pets: Pet[];
|
|
95
|
+
|
|
96
|
+
@nextLink next?: string;
|
|
97
|
+
};
|
|
98
|
+
|
|
99
|
+
@scenario
|
|
100
|
+
@scenarioDoc("""
|
|
101
|
+
Test case for using link as pagination with nested structure.
|
|
102
|
+
|
|
103
|
+
Two requests need to be tested.
|
|
104
|
+
1. Initial request:
|
|
105
|
+
Expected route: /payload/pageable/server-driven-pagination/nested-link
|
|
106
|
+
Expected response body:
|
|
107
|
+
```json
|
|
108
|
+
{ "nestedItems": {
|
|
109
|
+
"pets": [
|
|
110
|
+
{ "id": "1", "name": "dog" },
|
|
111
|
+
{ "id": "2", "name": "cat" }
|
|
112
|
+
]
|
|
113
|
+
},
|
|
114
|
+
"nestedNext": {
|
|
115
|
+
"next": "http://[host]:[port]/payload/pageable/server-driven-pagination/nested-link/nextPage"
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
```
|
|
119
|
+
2. Next page request:
|
|
120
|
+
Expected route: /payload/pageable/server-driven-pagination/nested-link/nextPage
|
|
121
|
+
Expected response body:
|
|
122
|
+
```json
|
|
123
|
+
{ "nestedItems": {
|
|
124
|
+
"pets": [
|
|
125
|
+
{ "id": "3", "name": "bird" },
|
|
126
|
+
{ "id": "4", "name": "fish" }
|
|
127
|
+
]
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
```
|
|
131
|
+
""")
|
|
132
|
+
@route("/nested-link")
|
|
133
|
+
@list
|
|
134
|
+
op nestedLink(): {
|
|
135
|
+
nestedItems: {
|
|
136
|
+
@pageItems
|
|
137
|
+
pets: Pet[];
|
|
138
|
+
};
|
|
139
|
+
nestedNext: {
|
|
140
|
+
@nextLink next?: url;
|
|
141
|
+
};
|
|
142
|
+
};
|
|
143
|
+
|
|
144
|
+
@route("/continuationtoken")
|
|
145
|
+
namespace ContinuationToken {
|
|
146
|
+
@scenario
|
|
147
|
+
@scenarioDoc("""
|
|
148
|
+
Test case for using continuation token as pagination. Continuation token is passed in the request query and response body.
|
|
149
|
+
|
|
150
|
+
Two requests need to be tested.
|
|
151
|
+
|
|
152
|
+
1. Initial request:
|
|
153
|
+
Expected route: /payload/pageable/server-driven-pagination/continuationtoken/request-query-response-body?bar=bar
|
|
154
|
+
|
|
155
|
+
Expected request header:
|
|
156
|
+
foo=foo
|
|
157
|
+
|
|
158
|
+
Expected response body:
|
|
159
|
+
```json
|
|
160
|
+
{ "pets": [
|
|
161
|
+
{ "id": "1", "name": "dog" },
|
|
162
|
+
{ "id": "2", "name": "cat" }
|
|
163
|
+
],
|
|
164
|
+
"nextToken": "page2"
|
|
165
|
+
}
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
2. Next page request:
|
|
169
|
+
Expected route: /payload/pageable/server-driven-pagination/continuationtoken/request-query-response-body?bar=bar&token=page2
|
|
170
|
+
|
|
171
|
+
Expected request header:
|
|
172
|
+
foo=foo
|
|
173
|
+
|
|
174
|
+
Expected response body:
|
|
175
|
+
```json
|
|
176
|
+
{ "pets": [
|
|
177
|
+
{ "id": "3", "name": "bird" },
|
|
178
|
+
{ "id": "4", "name": "fish" }
|
|
179
|
+
]
|
|
180
|
+
}
|
|
181
|
+
```
|
|
182
|
+
""")
|
|
183
|
+
@route("/request-query-response-body")
|
|
184
|
+
@list
|
|
185
|
+
op requestQueryResponseBody(@continuationToken @query token?: string, ...HeaderAndQuery): {
|
|
186
|
+
@pageItems
|
|
187
|
+
pets: Pet[];
|
|
188
|
+
|
|
189
|
+
@continuationToken nextToken?: string;
|
|
190
|
+
};
|
|
191
|
+
|
|
192
|
+
@scenario
|
|
193
|
+
@scenarioDoc("""
|
|
194
|
+
Test case for using continuation token as pagination. Continuation token is passed in the request header and response body.
|
|
195
|
+
|
|
196
|
+
Two requests need to be tested.
|
|
197
|
+
|
|
198
|
+
1. Initial request:
|
|
199
|
+
Expected route: /payload/pageable/server-driven-pagination/continuationtoken/request-header-response-body?bar=bar
|
|
200
|
+
|
|
201
|
+
Expected request header:
|
|
202
|
+
foo=foo
|
|
203
|
+
|
|
204
|
+
Expected response body:
|
|
205
|
+
```json
|
|
206
|
+
{ "pets": [
|
|
207
|
+
{ "id": "1", "name": "dog" },
|
|
208
|
+
{ "id": "2", "name": "cat" }
|
|
209
|
+
],
|
|
210
|
+
"nextToken": "page2"
|
|
211
|
+
}
|
|
212
|
+
```
|
|
213
|
+
|
|
214
|
+
2. Next page request:
|
|
215
|
+
Expected route: /payload/pageable/server-driven-pagination/continuationtoken/request-header-response-body?bar=bar
|
|
216
|
+
|
|
217
|
+
Expected request header:
|
|
218
|
+
token=page2
|
|
219
|
+
foo=foo
|
|
220
|
+
|
|
221
|
+
Expected response body:
|
|
222
|
+
```json
|
|
223
|
+
{ "pets": [
|
|
224
|
+
{ "id": "3", "name": "bird" },
|
|
225
|
+
{ "id": "4", "name": "fish" }
|
|
226
|
+
]
|
|
227
|
+
}
|
|
228
|
+
```
|
|
229
|
+
""")
|
|
230
|
+
@route("/request-header-response-body")
|
|
231
|
+
@list
|
|
232
|
+
op requestHeaderResponseBody(@continuationToken @header token?: string, ...HeaderAndQuery): {
|
|
233
|
+
@pageItems
|
|
234
|
+
pets: Pet[];
|
|
235
|
+
|
|
236
|
+
@continuationToken nextToken?: string;
|
|
237
|
+
};
|
|
238
|
+
|
|
239
|
+
@scenario
|
|
240
|
+
@scenarioDoc("""
|
|
241
|
+
Test case for using continuation token as pagination. Continuation token is passed in the request query and response header.
|
|
242
|
+
|
|
243
|
+
Two requests need to be tested.
|
|
244
|
+
|
|
245
|
+
1. Initial request:
|
|
246
|
+
Expected route: /payload/pageable/server-driven-pagination/continuationtoken/request-query-response-header?bar=bar
|
|
247
|
+
|
|
248
|
+
Expected request header:
|
|
249
|
+
foo=foo
|
|
250
|
+
|
|
251
|
+
Expected response body:
|
|
252
|
+
```json
|
|
253
|
+
{ "pets": [
|
|
254
|
+
{ "id": "1", "name": "dog" },
|
|
255
|
+
{ "id": "2", "name": "cat" }
|
|
256
|
+
]
|
|
257
|
+
}
|
|
258
|
+
```
|
|
259
|
+
|
|
260
|
+
Expected response header:
|
|
261
|
+
next-token=page2
|
|
262
|
+
|
|
263
|
+
2. Next page request:
|
|
264
|
+
Expected route: /payload/pageable/server-driven-pagination/continuationtoken/request-query-response-header?bar=bar&token=page2
|
|
265
|
+
|
|
266
|
+
Expected request header:
|
|
267
|
+
foo=foo
|
|
268
|
+
|
|
269
|
+
Expected response body:
|
|
270
|
+
```json
|
|
271
|
+
{ "pets": [
|
|
272
|
+
{ "id": "3", "name": "bird" },
|
|
273
|
+
{ "id": "4", "name": "fish" }
|
|
274
|
+
]
|
|
275
|
+
}
|
|
276
|
+
```
|
|
277
|
+
""")
|
|
278
|
+
@route("/request-query-response-header")
|
|
279
|
+
@list
|
|
280
|
+
op requestQueryResponseHeader(@continuationToken @query token?: string, ...HeaderAndQuery): {
|
|
281
|
+
@pageItems
|
|
282
|
+
pets: Pet[];
|
|
283
|
+
|
|
284
|
+
@continuationToken @header nextToken?: string;
|
|
285
|
+
};
|
|
286
|
+
|
|
287
|
+
@scenario
|
|
288
|
+
@scenarioDoc("""
|
|
289
|
+
Test case for using continuation token as pagination. Continuation token is passed in the request header and response header.
|
|
290
|
+
|
|
291
|
+
Two requests need to be tested.
|
|
292
|
+
1. Initial request:
|
|
293
|
+
Expected route: /payload/pageable/server-driven-pagination/continuationtoken/request-header-response-header?bar=bar
|
|
294
|
+
|
|
295
|
+
Expected request header:
|
|
296
|
+
foo=foo
|
|
297
|
+
|
|
298
|
+
Expected response body:
|
|
299
|
+
```json
|
|
300
|
+
{ "pets": [
|
|
301
|
+
{ "id": "1", "name": "dog" },
|
|
302
|
+
{ "id": "2", "name": "cat" }
|
|
303
|
+
]
|
|
304
|
+
}
|
|
305
|
+
```
|
|
306
|
+
|
|
307
|
+
Expected response header:
|
|
308
|
+
next-token=page2
|
|
309
|
+
|
|
310
|
+
2. Next page request:
|
|
311
|
+
Expected route: /payload/pageable/server-driven-pagination/continuationtoken/request-header-response-header?bar=bar
|
|
312
|
+
|
|
313
|
+
Expected request header:
|
|
314
|
+
token=page2
|
|
315
|
+
foo=foo
|
|
316
|
+
|
|
317
|
+
Expected response body:
|
|
318
|
+
```json
|
|
319
|
+
{ "pets": [
|
|
320
|
+
{ "id": "3", "name": "bird" },
|
|
321
|
+
{ "id": "4", "name": "fish" }
|
|
322
|
+
]
|
|
323
|
+
}
|
|
324
|
+
```
|
|
325
|
+
""")
|
|
326
|
+
@route("/request-header-response-header")
|
|
327
|
+
@list
|
|
328
|
+
op requestHeaderResponseHeader(@continuationToken @header token?: string, ...HeaderAndQuery): {
|
|
329
|
+
@pageItems
|
|
330
|
+
pets: Pet[];
|
|
331
|
+
|
|
332
|
+
@continuationToken @header nextToken?: string;
|
|
333
|
+
};
|
|
334
|
+
|
|
335
|
+
@scenario
|
|
336
|
+
@scenarioDoc("""
|
|
337
|
+
Test case for using continuation token as pagination with nested response structure. Continuation token is passed in the request query and nested within response body.
|
|
338
|
+
|
|
339
|
+
Two requests need to be tested.
|
|
340
|
+
|
|
341
|
+
1. Initial request:
|
|
342
|
+
Expected route: /payload/pageable/server-driven-pagination/continuationtoken/request-query-nested-response-body?bar=bar
|
|
343
|
+
|
|
344
|
+
Expected request header:
|
|
345
|
+
foo=foo
|
|
346
|
+
|
|
347
|
+
Expected response body:
|
|
348
|
+
```json
|
|
349
|
+
{ "nestedItems": {
|
|
350
|
+
"pets": [
|
|
351
|
+
{ "id": "1", "name": "dog" },
|
|
352
|
+
{ "id": "2", "name": "cat" }
|
|
353
|
+
]
|
|
354
|
+
},
|
|
355
|
+
"nestedNext": {
|
|
356
|
+
"nextToken": "page2"
|
|
357
|
+
}
|
|
358
|
+
}
|
|
359
|
+
```
|
|
360
|
+
|
|
361
|
+
2. Next page request:
|
|
362
|
+
Expected route: /payload/pageable/server-driven-pagination/continuationtoken/request-query-nested-response-body?bar=bar&token=page2
|
|
363
|
+
|
|
364
|
+
Expected request header:
|
|
365
|
+
foo=foo
|
|
366
|
+
|
|
367
|
+
Expected response body:
|
|
368
|
+
```json
|
|
369
|
+
{ "nestedItems": {
|
|
370
|
+
"pets": [
|
|
371
|
+
{ "id": "3", "name": "bird" },
|
|
372
|
+
{ "id": "4", "name": "fish" }
|
|
373
|
+
]
|
|
374
|
+
}
|
|
375
|
+
}
|
|
376
|
+
```
|
|
377
|
+
""")
|
|
378
|
+
@route("/request-query-nested-response-body")
|
|
379
|
+
@list
|
|
380
|
+
op requestQueryNestedResponseBody(
|
|
381
|
+
@continuationToken @query token?: string,
|
|
382
|
+
...HeaderAndQuery,
|
|
383
|
+
): {
|
|
384
|
+
nestedItems: {
|
|
385
|
+
@pageItems
|
|
386
|
+
pets: Pet[];
|
|
387
|
+
};
|
|
388
|
+
nestedNext?: {
|
|
389
|
+
@continuationToken nextToken?: string;
|
|
390
|
+
};
|
|
391
|
+
};
|
|
392
|
+
|
|
393
|
+
@scenario
|
|
394
|
+
@scenarioDoc("""
|
|
395
|
+
Test case for using continuation token as pagination with nested response structure. Continuation token is passed in the request header and nested within response body.
|
|
396
|
+
|
|
397
|
+
Two requests need to be tested.
|
|
398
|
+
|
|
399
|
+
1. Initial request:
|
|
400
|
+
Expected route: /payload/pageable/server-driven-pagination/continuationtoken/request-header-nested-response-body?bar=bar
|
|
401
|
+
|
|
402
|
+
Expected request header:
|
|
403
|
+
foo=foo
|
|
404
|
+
|
|
405
|
+
Expected response body:
|
|
406
|
+
```json
|
|
407
|
+
{ "nestedItems": {
|
|
408
|
+
"pets": [
|
|
409
|
+
{ "id": "1", "name": "dog" },
|
|
410
|
+
{ "id": "2", "name": "cat" }
|
|
411
|
+
]
|
|
412
|
+
},
|
|
413
|
+
"next": {
|
|
414
|
+
"nextToken": "page2"
|
|
415
|
+
}
|
|
416
|
+
}
|
|
417
|
+
```
|
|
418
|
+
|
|
419
|
+
2. Next page request:
|
|
420
|
+
Expected route: /payload/pageable/server-driven-pagination/continuationtoken/request-header-nested-response-body?bar=bar
|
|
421
|
+
|
|
422
|
+
Expected request header:
|
|
423
|
+
token=page2
|
|
424
|
+
foo=foo
|
|
425
|
+
|
|
426
|
+
Expected response body:
|
|
427
|
+
```json
|
|
428
|
+
{ "nestedItems": {
|
|
429
|
+
"pets": [
|
|
430
|
+
{ "id": "3", "name": "bird" },
|
|
431
|
+
{ "id": "4", "name": "fish" }
|
|
432
|
+
]
|
|
433
|
+
}
|
|
434
|
+
}
|
|
435
|
+
```
|
|
436
|
+
""")
|
|
437
|
+
@route("/request-header-nested-response-body")
|
|
438
|
+
@list
|
|
439
|
+
op requestHeaderNestedResponseBody(
|
|
440
|
+
@continuationToken @header token?: string,
|
|
441
|
+
...HeaderAndQuery,
|
|
442
|
+
): {
|
|
443
|
+
nestedItems: {
|
|
444
|
+
@pageItems
|
|
445
|
+
pets: Pet[];
|
|
446
|
+
};
|
|
447
|
+
nestedNext?: {
|
|
448
|
+
@continuationToken nextToken?: string;
|
|
449
|
+
};
|
|
450
|
+
};
|
|
451
|
+
}
|
|
452
|
+
}
|
|
453
|
+
|
|
454
|
+
@route("/pagesize")
|
|
455
|
+
namespace PageSize {
|
|
456
|
+
@scenario
|
|
457
|
+
@scenarioDoc("""
|
|
458
|
+
Test case for simple pagination without nextlink or continuationToken.
|
|
459
|
+
|
|
460
|
+
Single request:
|
|
461
|
+
Expected route: /payload/pageable/pagesize/without-continuation
|
|
462
|
+
|
|
463
|
+
Expected response body:
|
|
464
|
+
```json
|
|
465
|
+
{ "pets": [
|
|
466
|
+
{ "id": "1", "name": "dog" },
|
|
467
|
+
{ "id": "2", "name": "cat" },
|
|
468
|
+
{ "id": "3", "name": "bird" },
|
|
469
|
+
{ "id": "4", "name": "fish" }
|
|
470
|
+
]
|
|
471
|
+
}
|
|
472
|
+
```
|
|
473
|
+
""")
|
|
474
|
+
@route("/without-continuation")
|
|
475
|
+
@list
|
|
476
|
+
op listWithoutContinuation(): {
|
|
477
|
+
@pageItems
|
|
478
|
+
pets: Pet[];
|
|
479
|
+
};
|
|
480
|
+
|
|
481
|
+
@scenario
|
|
482
|
+
@scenarioDoc("""
|
|
483
|
+
Test case for pagination with a regular @pageSize parameter.
|
|
484
|
+
|
|
485
|
+
Two requests need to be tested:
|
|
486
|
+
1. Request with pageSize=2:
|
|
487
|
+
Expected route: /payload/pageable/pagesize/list?pageSize=2
|
|
488
|
+
|
|
489
|
+
Expected response body:
|
|
490
|
+
```json
|
|
491
|
+
{ "pets": [
|
|
492
|
+
{ "id": "1", "name": "dog" },
|
|
493
|
+
{ "id": "2", "name": "cat" }
|
|
494
|
+
]
|
|
495
|
+
}
|
|
496
|
+
```
|
|
497
|
+
|
|
498
|
+
2. Request with pageSize=4:
|
|
499
|
+
Expected route: /payload/pageable/pagesize/list?pageSize=4
|
|
500
|
+
|
|
501
|
+
Expected response body:
|
|
502
|
+
```json
|
|
503
|
+
{ "pets": [
|
|
504
|
+
{ "id": "1", "name": "dog" },
|
|
505
|
+
{ "id": "2", "name": "cat" },
|
|
506
|
+
{ "id": "3", "name": "bird" },
|
|
507
|
+
{ "id": "4", "name": "fish" }
|
|
508
|
+
]
|
|
509
|
+
}
|
|
510
|
+
```
|
|
511
|
+
""")
|
|
512
|
+
@route("/list")
|
|
513
|
+
@list
|
|
514
|
+
op listWithPageSize(@pageSize @query pageSize?: int32): {
|
|
515
|
+
@pageItems
|
|
516
|
+
pets: Pet[];
|
|
517
|
+
};
|
|
518
|
+
}
|
|
519
|
+
|
|
520
|
+
@doc("An XML pet item.")
|
|
521
|
+
@name("Pet")
|
|
522
|
+
model XmlPet {
|
|
523
|
+
@name("Id") id: string;
|
|
524
|
+
@name("Name") name: string;
|
|
525
|
+
}
|
|
526
|
+
|
|
527
|
+
@route("/xml")
|
|
528
|
+
namespace XmlPagination {
|
|
529
|
+
@scenario
|
|
530
|
+
@scenarioDoc("""
|
|
531
|
+
Test case for XML pagination with continuation token. Continuation token is passed in the request query and response body.
|
|
532
|
+
|
|
533
|
+
Two requests need to be tested.
|
|
534
|
+
|
|
535
|
+
1. Initial request:
|
|
536
|
+
Expected route: /payload/pageable/xml/list
|
|
537
|
+
|
|
538
|
+
Expected response body:
|
|
539
|
+
```xml
|
|
540
|
+
<PetListResult>
|
|
541
|
+
<Pets>
|
|
542
|
+
<Pet>
|
|
543
|
+
<Id>1</Id>
|
|
544
|
+
<Name>dog</Name>
|
|
545
|
+
</Pet>
|
|
546
|
+
<Pet>
|
|
547
|
+
<Id>2</Id>
|
|
548
|
+
<Name>cat</Name>
|
|
549
|
+
</Pet>
|
|
550
|
+
</Pets>
|
|
551
|
+
<NextMarker>page2</NextMarker>
|
|
552
|
+
</PetListResult>
|
|
553
|
+
```
|
|
554
|
+
|
|
555
|
+
2. Next page request:
|
|
556
|
+
Expected route: /payload/pageable/xml/list?marker=page2
|
|
557
|
+
|
|
558
|
+
Expected response body:
|
|
559
|
+
```xml
|
|
560
|
+
<PetListResult>
|
|
561
|
+
<Pets>
|
|
562
|
+
<Pet>
|
|
563
|
+
<Id>3</Id>
|
|
564
|
+
<Name>bird</Name>
|
|
565
|
+
</Pet>
|
|
566
|
+
<Pet>
|
|
567
|
+
<Id>4</Id>
|
|
568
|
+
<Name>fish</Name>
|
|
569
|
+
</Pet>
|
|
570
|
+
</Pets>
|
|
571
|
+
</PetListResult>
|
|
572
|
+
```
|
|
573
|
+
""")
|
|
574
|
+
@route("/list-with-continuation")
|
|
575
|
+
@list
|
|
576
|
+
op listWithContinuation(@continuationToken @query marker?: string): {
|
|
577
|
+
@header("content-type") contentType: "application/xml";
|
|
578
|
+
@body body: XmlPetListResult;
|
|
579
|
+
};
|
|
580
|
+
|
|
581
|
+
@scenario
|
|
582
|
+
@scenarioDoc("""
|
|
583
|
+
Test case for XML pagination with next link.
|
|
584
|
+
|
|
585
|
+
Two requests need to be tested.
|
|
586
|
+
|
|
587
|
+
1. Initial request:
|
|
588
|
+
Expected route: /payload/pageable/xml/list-with-next-link
|
|
589
|
+
|
|
590
|
+
Expected response body:
|
|
591
|
+
```xml
|
|
592
|
+
<PetListResult>
|
|
593
|
+
<Pets>
|
|
594
|
+
<Pet>
|
|
595
|
+
<Id>1</Id>
|
|
596
|
+
<Name>dog</Name>
|
|
597
|
+
</Pet>
|
|
598
|
+
<Pet>
|
|
599
|
+
<Id>2</Id>
|
|
600
|
+
<Name>cat</Name>
|
|
601
|
+
</Pet>
|
|
602
|
+
</Pets>
|
|
603
|
+
<NextLink>http://[host]:[port]/payload/pageable/xml/list-with-next-link/nextPage</NextLink>
|
|
604
|
+
</PetListResult>
|
|
605
|
+
```
|
|
606
|
+
|
|
607
|
+
2. Next page request:
|
|
608
|
+
Expected route: /payload/pageable/xml/list-with-next-link/nextPage
|
|
609
|
+
|
|
610
|
+
Expected response body:
|
|
611
|
+
```xml
|
|
612
|
+
<PetListResult>
|
|
613
|
+
<Pets>
|
|
614
|
+
<Pet>
|
|
615
|
+
<Id>3</Id>
|
|
616
|
+
<Name>bird</Name>
|
|
617
|
+
</Pet>
|
|
618
|
+
<Pet>
|
|
619
|
+
<Id>4</Id>
|
|
620
|
+
<Name>fish</Name>
|
|
621
|
+
</Pet>
|
|
622
|
+
</Pets>
|
|
623
|
+
</PetListResult>
|
|
624
|
+
```
|
|
625
|
+
""")
|
|
626
|
+
@route("/list-with-next-link")
|
|
627
|
+
@list
|
|
628
|
+
op listWithNextLink(): {
|
|
629
|
+
@header("content-type") contentType: "application/xml";
|
|
630
|
+
@body body: XmlPetListResultWithNextLink;
|
|
631
|
+
};
|
|
632
|
+
}
|
|
633
|
+
|
|
634
|
+
@doc("The XML response for listing pets.")
|
|
635
|
+
@name("PetListResult")
|
|
636
|
+
model XmlPetListResult {
|
|
637
|
+
@pageItems
|
|
638
|
+
@name("Pets")
|
|
639
|
+
pets: XmlPet[];
|
|
640
|
+
|
|
641
|
+
@continuationToken
|
|
642
|
+
@name("NextMarker")
|
|
643
|
+
nextMarker?: string;
|
|
644
|
+
}
|
|
645
|
+
|
|
646
|
+
@doc("The XML response for listing pets with next link.")
|
|
647
|
+
@name("PetListResult")
|
|
648
|
+
model XmlPetListResultWithNextLink {
|
|
649
|
+
@pageItems
|
|
650
|
+
@name("Pets")
|
|
651
|
+
pets: XmlPet[];
|
|
652
|
+
|
|
653
|
+
@nextLink
|
|
654
|
+
@name("NextLink")
|
|
655
|
+
nextLink?: url;
|
|
55
656
|
}
|