@typespec/http-specs 0.1.0-alpha.9 → 0.1.0-dev.1

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.
Files changed (224) hide show
  1. package/CHANGELOG.md +260 -3
  2. package/README.md +11 -3
  3. package/dist/specs/authentication/noauth/union/mockapi.d.ts +3 -0
  4. package/dist/specs/authentication/noauth/union/mockapi.d.ts.map +1 -0
  5. package/dist/specs/authentication/noauth/union/mockapi.js +25 -0
  6. package/dist/specs/authentication/noauth/union/mockapi.js.map +1 -0
  7. package/dist/specs/documentation/mockapi.d.ts +3 -0
  8. package/dist/specs/documentation/mockapi.d.ts.map +1 -0
  9. package/dist/specs/documentation/mockapi.js +40 -0
  10. package/dist/specs/documentation/mockapi.js.map +1 -0
  11. package/dist/specs/encode/array/mockapi.d.ts +3 -0
  12. package/dist/specs/encode/array/mockapi.d.ts.map +1 -0
  13. package/dist/specs/encode/array/mockapi.js +33 -0
  14. package/dist/specs/encode/array/mockapi.js.map +1 -0
  15. package/dist/specs/encode/bytes/mockapi.js +16 -24
  16. package/dist/specs/encode/bytes/mockapi.js.map +1 -1
  17. package/dist/specs/encode/datetime/mockapi.js +2 -2
  18. package/dist/specs/encode/datetime/mockapi.js.map +1 -1
  19. package/dist/specs/encode/duration/mockapi.d.ts.map +1 -1
  20. package/dist/specs/encode/duration/mockapi.js +115 -3
  21. package/dist/specs/encode/duration/mockapi.js.map +1 -1
  22. package/dist/specs/encode/numeric/mockapi.js +2 -2
  23. package/dist/specs/encode/numeric/mockapi.js.map +1 -1
  24. package/dist/specs/helper.d.ts +2 -2
  25. package/dist/specs/helper.d.ts.map +1 -1
  26. package/dist/specs/parameters/basic/mockapi.d.ts.map +1 -1
  27. package/dist/specs/parameters/basic/mockapi.js +3 -3
  28. package/dist/specs/parameters/basic/mockapi.js.map +1 -1
  29. package/dist/specs/parameters/body-optionality/mockapi.d.ts.map +1 -1
  30. package/dist/specs/parameters/body-optionality/mockapi.js +14 -4
  31. package/dist/specs/parameters/body-optionality/mockapi.js.map +1 -1
  32. package/dist/specs/parameters/collection-format/mockapi.js +4 -15
  33. package/dist/specs/parameters/collection-format/mockapi.js.map +1 -1
  34. package/dist/specs/parameters/path/mockapi.d.ts +3 -0
  35. package/dist/specs/parameters/path/mockapi.d.ts.map +1 -0
  36. package/dist/specs/parameters/path/mockapi.js +29 -0
  37. package/dist/specs/parameters/path/mockapi.js.map +1 -0
  38. package/dist/specs/parameters/query/mockapi.d.ts +3 -0
  39. package/dist/specs/parameters/query/mockapi.d.ts.map +1 -0
  40. package/dist/specs/parameters/query/mockapi.js +14 -0
  41. package/dist/specs/parameters/query/mockapi.js.map +1 -0
  42. package/dist/specs/parameters/spread/mockapi.d.ts.map +1 -1
  43. package/dist/specs/parameters/spread/mockapi.js +19 -19
  44. package/dist/specs/parameters/spread/mockapi.js.map +1 -1
  45. package/dist/specs/payload/json-merge-patch/mockapi.js +4 -4
  46. package/dist/specs/payload/json-merge-patch/mockapi.js.map +1 -1
  47. package/dist/specs/payload/media-type/mockapi.js +2 -2
  48. package/dist/specs/payload/media-type/mockapi.js.map +1 -1
  49. package/dist/specs/payload/multipart/mockapi.d.ts.map +1 -1
  50. package/dist/specs/payload/multipart/mockapi.js +196 -60
  51. package/dist/specs/payload/multipart/mockapi.js.map +1 -1
  52. package/dist/specs/payload/pageable/mockapi.d.ts.map +1 -1
  53. package/dist/specs/payload/pageable/mockapi.js +626 -14
  54. package/dist/specs/payload/pageable/mockapi.js.map +1 -1
  55. package/dist/specs/payload/xml/mockapi.d.ts +19 -5
  56. package/dist/specs/payload/xml/mockapi.d.ts.map +1 -1
  57. package/dist/specs/payload/xml/mockapi.js +311 -55
  58. package/dist/specs/payload/xml/mockapi.js.map +1 -1
  59. package/dist/specs/response/status-code-range/mockapi.d.ts.map +1 -1
  60. package/dist/specs/response/status-code-range/mockapi.js +5 -9
  61. package/dist/specs/response/status-code-range/mockapi.js.map +1 -1
  62. package/dist/specs/routes/mockapi.js +16 -16
  63. package/dist/specs/routes/mockapi.js.map +1 -1
  64. package/dist/specs/serialization/encoded-name/json/mockapi.js +1 -1
  65. package/dist/specs/serialization/encoded-name/json/mockapi.js.map +1 -1
  66. package/dist/specs/server/versions/not-versioned/mockapi.js +1 -1
  67. package/dist/specs/server/versions/not-versioned/mockapi.js.map +1 -1
  68. package/dist/specs/server/versions/versioned/mockapi.js +8 -12
  69. package/dist/specs/server/versions/versioned/mockapi.js.map +1 -1
  70. package/dist/specs/special-words/mockapi.d.ts.map +1 -1
  71. package/dist/specs/special-words/mockapi.js +59 -6
  72. package/dist/specs/special-words/mockapi.js.map +1 -1
  73. package/dist/specs/streaming/jsonl/mockapi.d.ts +3 -0
  74. package/dist/specs/streaming/jsonl/mockapi.d.ts.map +1 -0
  75. package/dist/specs/streaming/jsonl/mockapi.js +30 -0
  76. package/dist/specs/streaming/jsonl/mockapi.js.map +1 -0
  77. package/dist/specs/type/array/mockapi.js +1 -1
  78. package/dist/specs/type/array/mockapi.js.map +1 -1
  79. package/dist/specs/type/dictionary/mockapi.js +1 -1
  80. package/dist/specs/type/dictionary/mockapi.js.map +1 -1
  81. package/dist/specs/type/enum/extensible/mockapi.js +1 -1
  82. package/dist/specs/type/enum/extensible/mockapi.js.map +1 -1
  83. package/dist/specs/type/enum/fixed/mockapi.js +2 -2
  84. package/dist/specs/type/enum/fixed/mockapi.js.map +1 -1
  85. package/dist/specs/type/file/mockapi.d.ts +3 -0
  86. package/dist/specs/type/file/mockapi.d.ts.map +1 -0
  87. package/dist/specs/type/file/mockapi.js +187 -0
  88. package/dist/specs/type/file/mockapi.js.map +1 -0
  89. package/dist/specs/type/model/empty/mockapi.js +2 -2
  90. package/dist/specs/type/model/empty/mockapi.js.map +1 -1
  91. package/dist/specs/type/model/inheritance/enum-discriminator/mockapi.js +1 -1
  92. package/dist/specs/type/model/inheritance/enum-discriminator/mockapi.js.map +1 -1
  93. package/dist/specs/type/model/inheritance/nested-discriminator/mockapi.js +2 -2
  94. package/dist/specs/type/model/inheritance/nested-discriminator/mockapi.js.map +1 -1
  95. package/dist/specs/type/model/inheritance/not-discriminated/mockapi.js +2 -2
  96. package/dist/specs/type/model/inheritance/not-discriminated/mockapi.js.map +1 -1
  97. package/dist/specs/type/model/inheritance/recursive/mockapi.js +1 -1
  98. package/dist/specs/type/model/inheritance/recursive/mockapi.js.map +1 -1
  99. package/dist/specs/type/model/inheritance/single-discriminator/mockapi.js +2 -2
  100. package/dist/specs/type/model/inheritance/single-discriminator/mockapi.js.map +1 -1
  101. package/dist/specs/type/model/usage/mockapi.js +4 -4
  102. package/dist/specs/type/model/usage/mockapi.js.map +1 -1
  103. package/dist/specs/type/model/visibility/mockapi.js +9 -10
  104. package/dist/specs/type/model/visibility/mockapi.js.map +1 -1
  105. package/dist/specs/type/property/additional-properties/mockapi.js +9 -6
  106. package/dist/specs/type/property/additional-properties/mockapi.js.map +1 -1
  107. package/dist/specs/type/property/nullable/mockapi.js +2 -6
  108. package/dist/specs/type/property/nullable/mockapi.js.map +1 -1
  109. package/dist/specs/type/property/optionality/mockapi.js +1 -1
  110. package/dist/specs/type/property/optionality/mockapi.js.map +1 -1
  111. package/dist/specs/type/property/value-types/mockapi.js +3 -3
  112. package/dist/specs/type/property/value-types/mockapi.js.map +1 -1
  113. package/dist/specs/type/scalar/mockapi.js +9 -9
  114. package/dist/specs/type/scalar/mockapi.js.map +1 -1
  115. package/dist/specs/type/union/discriminated/mockapi.d.ts +3 -0
  116. package/dist/specs/type/union/discriminated/mockapi.d.ts.map +1 -0
  117. package/dist/specs/type/union/discriminated/mockapi.js +212 -0
  118. package/dist/specs/type/union/discriminated/mockapi.js.map +1 -0
  119. package/dist/specs/type/union/mockapi.js +2 -2
  120. package/dist/specs/type/union/mockapi.js.map +1 -1
  121. package/dist/specs/versioning/added/mockapi.js +6 -6
  122. package/dist/specs/versioning/added/mockapi.js.map +1 -1
  123. package/dist/specs/versioning/madeOptional/mockapi.js +2 -2
  124. package/dist/specs/versioning/madeOptional/mockapi.js.map +1 -1
  125. package/dist/specs/versioning/removed/mockapi.js +11 -11
  126. package/dist/specs/versioning/removed/mockapi.js.map +1 -1
  127. package/dist/specs/versioning/renamedFrom/mockapi.js +5 -5
  128. package/dist/specs/versioning/renamedFrom/mockapi.js.map +1 -1
  129. package/dist/specs/versioning/returnTypeChangedFrom/mockapi.js +1 -1
  130. package/dist/specs/versioning/returnTypeChangedFrom/mockapi.js.map +1 -1
  131. package/dist/specs/versioning/typeChangedFrom/mockapi.js +3 -3
  132. package/dist/specs/versioning/typeChangedFrom/mockapi.js.map +1 -1
  133. package/manifest.json +11545 -0
  134. package/package.json +31 -20
  135. package/smoke/petstore/main.tsp +96 -0
  136. package/smoke/todoapp/main.tsp +293 -0
  137. package/spec-summary.md +2137 -121
  138. package/specs/authentication/noauth/union/main.tsp +30 -0
  139. package/specs/authentication/noauth/union/mockapi.ts +27 -0
  140. package/specs/documentation/main.tsp +158 -0
  141. package/specs/documentation/mockapi.ts +59 -0
  142. package/specs/encode/array/main.tsp +339 -0
  143. package/specs/encode/array/mockapi.ts +83 -0
  144. package/specs/encode/bytes/main.tsp +29 -20
  145. package/specs/encode/bytes/mockapi.ts +13 -31
  146. package/specs/encode/datetime/main.tsp +2 -7
  147. package/specs/encode/datetime/mockapi.ts +2 -2
  148. package/specs/encode/duration/main.tsp +420 -7
  149. package/specs/encode/duration/mockapi.ts +221 -2
  150. package/specs/encode/numeric/mockapi.ts +2 -2
  151. package/specs/parameters/basic/mockapi.ts +3 -3
  152. package/specs/parameters/body-optionality/main.tsp +2 -0
  153. package/specs/parameters/body-optionality/mockapi.ts +24 -4
  154. package/specs/parameters/collection-format/main.tsp +5 -25
  155. package/specs/parameters/collection-format/mockapi.ts +4 -16
  156. package/specs/parameters/path/main.tsp +48 -0
  157. package/specs/parameters/path/mockapi.ts +34 -0
  158. package/specs/parameters/query/main.tsp +22 -0
  159. package/specs/parameters/query/mockapi.ts +15 -0
  160. package/specs/parameters/spread/mockapi.ts +19 -19
  161. package/specs/payload/json-merge-patch/main.tsp +2 -2
  162. package/specs/payload/json-merge-patch/mockapi.ts +4 -4
  163. package/specs/payload/media-type/mockapi.ts +2 -2
  164. package/specs/payload/multipart/main.tsp +230 -32
  165. package/specs/payload/multipart/mockapi.ts +207 -59
  166. package/specs/payload/pageable/main.tsp +648 -0
  167. package/specs/payload/pageable/mockapi.ts +691 -14
  168. package/specs/payload/xml/main.tsp +532 -132
  169. package/specs/payload/xml/mockapi.ts +402 -67
  170. package/specs/response/status-code-range/main.tsp +2 -2
  171. package/specs/response/status-code-range/mockapi.ts +5 -9
  172. package/specs/routes/main.tsp +29 -29
  173. package/specs/routes/mockapi.ts +16 -16
  174. package/specs/serialization/encoded-name/json/main.tsp +1 -1
  175. package/specs/serialization/encoded-name/json/mockapi.ts +1 -1
  176. package/specs/server/endpoint/not-defined/main.tsp +1 -3
  177. package/specs/server/path/multiple/main.tsp +3 -5
  178. package/specs/server/versions/not-versioned/mockapi.ts +1 -1
  179. package/specs/server/versions/versioned/main.tsp +1 -1
  180. package/specs/server/versions/versioned/mockapi.ts +6 -12
  181. package/specs/special-headers/conditional-request/main.tsp +1 -1
  182. package/specs/special-headers/repeatability/main.tsp +2 -2
  183. package/specs/special-words/main.tsp +124 -6
  184. package/specs/special-words/mockapi.ts +62 -6
  185. package/specs/streaming/jsonl/main.tsp +33 -0
  186. package/specs/streaming/jsonl/mockapi.ts +32 -0
  187. package/specs/type/array/mockapi.ts +1 -1
  188. package/specs/type/dictionary/mockapi.ts +1 -1
  189. package/specs/type/enum/extensible/main.tsp +18 -2
  190. package/specs/type/enum/extensible/mockapi.ts +1 -1
  191. package/specs/type/enum/fixed/main.tsp +15 -3
  192. package/specs/type/enum/fixed/mockapi.ts +2 -2
  193. package/specs/type/file/main.tsp +109 -0
  194. package/specs/type/file/mockapi.ts +200 -0
  195. package/specs/type/model/empty/mockapi.ts +2 -2
  196. package/specs/type/model/inheritance/enum-discriminator/mockapi.ts +1 -1
  197. package/specs/type/model/inheritance/nested-discriminator/mockapi.ts +2 -2
  198. package/specs/type/model/inheritance/not-discriminated/mockapi.ts +2 -2
  199. package/specs/type/model/inheritance/recursive/mockapi.ts +1 -1
  200. package/specs/type/model/inheritance/single-discriminator/mockapi.ts +2 -2
  201. package/specs/type/model/usage/mockapi.ts +4 -4
  202. package/specs/type/model/visibility/main.tsp +9 -17
  203. package/specs/type/model/visibility/mockapi.ts +9 -10
  204. package/specs/type/property/additional-properties/main.tsp +17 -17
  205. package/specs/type/property/additional-properties/mockapi.ts +10 -10
  206. package/specs/type/property/nullable/mockapi.ts +7 -8
  207. package/specs/type/property/optionality/mockapi.ts +1 -1
  208. package/specs/type/property/value-types/mockapi.ts +3 -3
  209. package/specs/type/scalar/main.tsp +58 -9
  210. package/specs/type/scalar/mockapi.ts +9 -9
  211. package/specs/type/union/discriminated/main.tsp +251 -0
  212. package/specs/type/union/discriminated/mockapi.ts +230 -0
  213. package/specs/type/union/mockapi.ts +2 -2
  214. package/specs/versioning/added/mockapi.ts +6 -6
  215. package/specs/versioning/madeOptional/mockapi.ts +2 -2
  216. package/specs/versioning/removed/main.tsp +5 -5
  217. package/specs/versioning/removed/mockapi.ts +11 -11
  218. package/specs/versioning/renamedFrom/mockapi.ts +5 -5
  219. package/specs/versioning/returnTypeChangedFrom/main.tsp +17 -2
  220. package/specs/versioning/returnTypeChangedFrom/mockapi.ts +1 -1
  221. package/specs/versioning/typeChangedFrom/mockapi.ts +3 -3
  222. package/temp/.tsbuildinfo +1 -1
  223. package/tsconfig.build.json +0 -4
  224. package/tspconfig.yaml +0 -2
@@ -1,12 +1,247 @@
1
- import { json, MockRequest, passOnSuccess, ScenarioMockApi } from "@typespec/spec-api";
1
+ import {
2
+ dyn,
3
+ dynItem,
4
+ json,
5
+ MockRequest,
6
+ passOnSuccess,
7
+ ResolverConfig,
8
+ ScenarioMockApi,
9
+ ValidationError,
10
+ xml,
11
+ } from "@typespec/spec-api";
2
12
 
3
13
  export const Scenarios: Record<string, ScenarioMockApi> = {};
4
14
 
15
+ const FirstPage = [
16
+ { id: "1", name: "dog" },
17
+ { id: "2", name: "cat" },
18
+ ];
19
+
20
+ const SecondPage = [
21
+ { id: "3", name: "bird" },
22
+ { id: "4", name: "fish" },
23
+ ];
24
+
25
+ const FirstResponseTokenInBody = {
26
+ status: 200,
27
+ body: json({
28
+ pets: FirstPage,
29
+ nextToken: "page2",
30
+ }),
31
+ };
32
+
33
+ const SecondResponse = {
34
+ status: 200,
35
+ body: json({
36
+ pets: SecondPage,
37
+ }),
38
+ };
39
+
40
+ const FirstResponseTokenInHeader = {
41
+ status: 200,
42
+ body: json({
43
+ pets: FirstPage,
44
+ }),
45
+ headers: {
46
+ "next-token": "page2",
47
+ foo: "foo",
48
+ },
49
+ };
50
+
51
+ const RequestTokenInQuery = {
52
+ query: { token: "page2", bar: "bar" },
53
+ headers: { foo: "foo" },
54
+ };
55
+
56
+ const RequestTokenInHeader = { headers: { token: "page2", foo: "foo" }, query: { bar: "bar" } };
57
+
58
+ function createTests(reqInfo: "query" | "header", resInfo: "body" | "header") {
59
+ const uri = `/payload/pageable/server-driven-pagination/continuationtoken/request-${reqInfo}-response-${resInfo}`;
60
+ function createHandler() {
61
+ return (req: MockRequest) => {
62
+ req.expect.containsHeader("foo", "foo");
63
+ req.expect.containsQueryParam("bar", "bar");
64
+ const token = reqInfo === "header" ? req.headers?.token : req.query?.token;
65
+ switch (token) {
66
+ case undefined:
67
+ return resInfo === "header" ? FirstResponseTokenInHeader : FirstResponseTokenInBody;
68
+ case "page2":
69
+ return SecondResponse;
70
+ default:
71
+ throw new ValidationError(
72
+ "Unsupported continuation token",
73
+ `"undefined" | "page2"`,
74
+ token,
75
+ );
76
+ }
77
+ };
78
+ }
79
+
80
+ return passOnSuccess([
81
+ {
82
+ uri: uri,
83
+ method: "get",
84
+ request: { headers: { foo: "foo" }, query: { bar: "bar" } },
85
+ response: resInfo === "header" ? FirstResponseTokenInHeader : FirstResponseTokenInBody,
86
+ handler: createHandler(),
87
+ kind: "MockApiDefinition",
88
+ },
89
+ {
90
+ uri: uri,
91
+ method: "get",
92
+ request: reqInfo === "header" ? RequestTokenInHeader : RequestTokenInQuery,
93
+ response: SecondResponse,
94
+ handler: createHandler(),
95
+ kind: "MockApiDefinition",
96
+ },
97
+ ]);
98
+ }
99
+
5
100
  Scenarios.Payload_Pageable_ServerDrivenPagination_link = passOnSuccess([
6
101
  {
7
102
  uri: "/payload/pageable/server-driven-pagination/link",
8
103
  method: "get",
9
104
  request: {},
105
+ response: {
106
+ status: 200,
107
+ body: json({
108
+ pets: FirstPage,
109
+ next: dyn`${dynItem("baseUrl")}/payload/pageable/server-driven-pagination/link/nextPage`,
110
+ }),
111
+ },
112
+ kind: "MockApiDefinition",
113
+ },
114
+ {
115
+ uri: "/payload/pageable/server-driven-pagination/link/nextPage",
116
+ method: "get",
117
+ request: {},
118
+ response: SecondResponse,
119
+ kind: "MockApiDefinition",
120
+ },
121
+ ]);
122
+
123
+ Scenarios.Payload_Pageable_ServerDrivenPagination_linkString = passOnSuccess([
124
+ {
125
+ uri: "/payload/pageable/server-driven-pagination/link-string",
126
+ method: "get",
127
+ request: {},
128
+ response: {
129
+ status: 200,
130
+ body: json({
131
+ pets: FirstPage,
132
+ next: dyn`${dynItem("baseUrl")}/payload/pageable/server-driven-pagination/link-string/nextPage`,
133
+ }),
134
+ },
135
+ kind: "MockApiDefinition",
136
+ },
137
+ {
138
+ uri: "/payload/pageable/server-driven-pagination/link-string/nextPage",
139
+ method: "get",
140
+ request: {},
141
+ response: SecondResponse,
142
+ kind: "MockApiDefinition",
143
+ },
144
+ ]);
145
+
146
+ Scenarios.Payload_Pageable_ServerDrivenPagination_nestedLink = passOnSuccess([
147
+ {
148
+ uri: "/payload/pageable/server-driven-pagination/nested-link",
149
+ method: "get",
150
+ request: {},
151
+ response: {
152
+ status: 200,
153
+ body: json({
154
+ nestedItems: {
155
+ pets: FirstPage,
156
+ },
157
+ nestedNext: {
158
+ next: dyn`${dynItem("baseUrl")}/payload/pageable/server-driven-pagination/nested-link/nextPage`,
159
+ },
160
+ }),
161
+ },
162
+ kind: "MockApiDefinition",
163
+ },
164
+ {
165
+ uri: "/payload/pageable/server-driven-pagination/nested-link/nextPage",
166
+ method: "get",
167
+ request: {},
168
+ response: {
169
+ status: 200,
170
+ body: json({
171
+ nestedItems: {
172
+ pets: SecondPage,
173
+ },
174
+ }),
175
+ },
176
+ kind: "MockApiDefinition",
177
+ },
178
+ ]);
179
+
180
+ // POST-THEN-GET LINK PAGINATION
181
+ Scenarios.Payload_Pageable_ServerDrivenPagination_AlternateInitialVerb_post = passOnSuccess([
182
+ {
183
+ uri: "/payload/pageable/server-driven-pagination/link/initial-post",
184
+ method: "post",
185
+ request: {
186
+ body: json({ filter: "foo eq bar" }),
187
+ },
188
+ response: {
189
+ status: 200,
190
+ body: json({
191
+ pets: FirstPage,
192
+ next: dyn`${dynItem("baseUrl")}/payload/pageable/server-driven-pagination/link/initial-post/nextPage?token=abc`,
193
+ }),
194
+ },
195
+ kind: "MockApiDefinition",
196
+ },
197
+ {
198
+ uri: "/payload/pageable/server-driven-pagination/link/initial-post/nextPage",
199
+ method: "get",
200
+ request: {
201
+ query: { token: "abc" },
202
+ },
203
+ response: SecondResponse,
204
+ kind: "MockApiDefinition",
205
+ },
206
+ ]);
207
+
208
+ Scenarios.Payload_Pageable_ServerDrivenPagination_ContinuationToken_requestQueryResponseBody =
209
+ createTests("query", "body");
210
+
211
+ Scenarios.Payload_Pageable_ServerDrivenPagination_ContinuationToken_requestHeaderResponseBody =
212
+ createTests("header", "body");
213
+
214
+ Scenarios.Payload_Pageable_ServerDrivenPagination_ContinuationToken_requestQueryResponseHeader =
215
+ createTests("query", "header");
216
+
217
+ Scenarios.Payload_Pageable_ServerDrivenPagination_ContinuationToken_requestHeaderResponseHeader =
218
+ createTests("header", "header");
219
+
220
+ Scenarios.Payload_Pageable_PageSize_listWithoutContinuation = passOnSuccess([
221
+ {
222
+ uri: "/payload/pageable/pagesize/without-continuation",
223
+ method: "get",
224
+ request: {},
225
+ response: {
226
+ status: 200,
227
+ body: json({
228
+ pets: [
229
+ { id: "1", name: "dog" },
230
+ { id: "2", name: "cat" },
231
+ { id: "3", name: "bird" },
232
+ { id: "4", name: "fish" },
233
+ ],
234
+ }),
235
+ },
236
+ kind: "MockApiDefinition",
237
+ },
238
+ ]);
239
+
240
+ Scenarios.Payload_Pageable_PageSize_listWithPageSize = passOnSuccess([
241
+ {
242
+ uri: "/payload/pageable/pagesize/list",
243
+ method: "get",
244
+ request: { query: { pageSize: "2" } },
10
245
  response: {
11
246
  status: 200,
12
247
  body: json({
@@ -14,36 +249,478 @@ Scenarios.Payload_Pageable_ServerDrivenPagination_link = passOnSuccess([
14
249
  { id: "1", name: "dog" },
15
250
  { id: "2", name: "cat" },
16
251
  ],
17
- next: "/payload/pageable/server-driven-pagination/link/nextPage",
18
252
  }),
19
253
  },
20
254
  handler: (req: MockRequest) => {
21
- return {
22
- status: 200,
23
- body: json({
24
- pets: [
25
- { id: "1", name: "dog" },
26
- { id: "2", name: "cat" },
27
- ],
28
- next: `${req.baseUrl}/payload/pageable/server-driven-pagination/link/nextPage`,
29
- }),
30
- };
255
+ const pageSize = req.query?.pageSize;
256
+
257
+ switch (pageSize) {
258
+ case "2":
259
+ return {
260
+ status: 200,
261
+ body: json({
262
+ pets: [
263
+ { id: "1", name: "dog" },
264
+ { id: "2", name: "cat" },
265
+ ],
266
+ }),
267
+ };
268
+ case "4":
269
+ return {
270
+ status: 200,
271
+ body: json({
272
+ pets: [
273
+ { id: "1", name: "dog" },
274
+ { id: "2", name: "cat" },
275
+ { id: "3", name: "bird" },
276
+ { id: "4", name: "fish" },
277
+ ],
278
+ }),
279
+ };
280
+ default:
281
+ throw new ValidationError("Unsupported page size", `"2" | "4"`, pageSize);
282
+ }
31
283
  },
32
284
  kind: "MockApiDefinition",
33
285
  },
34
286
  {
35
- uri: "/payload/pageable/server-driven-pagination/link/nextPage",
287
+ uri: "/payload/pageable/pagesize/list",
36
288
  method: "get",
37
- request: {},
289
+ request: { query: { pageSize: "4" } },
38
290
  response: {
39
291
  status: 200,
40
292
  body: json({
41
293
  pets: [
294
+ { id: "1", name: "dog" },
295
+ { id: "2", name: "cat" },
42
296
  { id: "3", name: "bird" },
43
297
  { id: "4", name: "fish" },
44
298
  ],
45
299
  }),
46
300
  },
301
+ handler: (req: MockRequest) => {
302
+ const pageSize = req.query?.pageSize;
303
+
304
+ switch (pageSize) {
305
+ case "2":
306
+ return {
307
+ status: 200,
308
+ body: json({
309
+ pets: [
310
+ { id: "1", name: "dog" },
311
+ { id: "2", name: "cat" },
312
+ ],
313
+ }),
314
+ };
315
+ case "4":
316
+ return {
317
+ status: 200,
318
+ body: json({
319
+ pets: [
320
+ { id: "1", name: "dog" },
321
+ { id: "2", name: "cat" },
322
+ { id: "3", name: "bird" },
323
+ { id: "4", name: "fish" },
324
+ ],
325
+ }),
326
+ };
327
+ default:
328
+ throw new ValidationError("Unsupported page size", `"2" | "4"`, pageSize);
329
+ }
330
+ },
331
+ kind: "MockApiDefinition",
332
+ },
333
+ ]);
334
+
335
+ Scenarios.Payload_Pageable_ServerDrivenPagination_ContinuationToken_requestQueryNestedResponseBody =
336
+ passOnSuccess([
337
+ {
338
+ uri: "/payload/pageable/server-driven-pagination/continuationtoken/request-query-nested-response-body",
339
+ method: "get",
340
+ request: { headers: { foo: "foo" }, query: { bar: "bar" } },
341
+ response: {
342
+ status: 200,
343
+ body: json({
344
+ nestedItems: {
345
+ pets: FirstPage,
346
+ },
347
+ nestedNext: {
348
+ nextToken: "page2",
349
+ },
350
+ }),
351
+ },
352
+ handler: (req: MockRequest) => {
353
+ req.expect.containsHeader("foo", "foo");
354
+ req.expect.containsQueryParam("bar", "bar");
355
+ const token = req.query?.token;
356
+
357
+ switch (token) {
358
+ case undefined:
359
+ return {
360
+ status: 200,
361
+ body: json({
362
+ nestedItems: {
363
+ pets: FirstPage,
364
+ },
365
+ nestedNext: {
366
+ nextToken: "page2",
367
+ },
368
+ }),
369
+ };
370
+ case "page2":
371
+ return {
372
+ status: 200,
373
+ body: json({
374
+ nestedItems: {
375
+ pets: SecondPage,
376
+ },
377
+ }),
378
+ };
379
+ default:
380
+ throw new ValidationError(
381
+ "Unsupported continuation token",
382
+ `"undefined" | "page2"`,
383
+ token,
384
+ );
385
+ }
386
+ },
387
+ kind: "MockApiDefinition",
388
+ },
389
+ {
390
+ uri: "/payload/pageable/server-driven-pagination/continuationtoken/request-query-nested-response-body",
391
+ method: "get",
392
+ request: RequestTokenInQuery,
393
+ response: {
394
+ status: 200,
395
+ body: json({
396
+ nestedItems: {
397
+ pets: SecondPage,
398
+ },
399
+ }),
400
+ },
401
+ handler: (req: MockRequest) => {
402
+ req.expect.containsHeader("foo", "foo");
403
+ req.expect.containsQueryParam("bar", "bar");
404
+ const token = req.query?.token;
405
+
406
+ switch (token) {
407
+ case undefined:
408
+ return {
409
+ status: 200,
410
+ body: json({
411
+ nestedItems: {
412
+ pets: FirstPage,
413
+ },
414
+ nestedNext: {
415
+ nextToken: "page2",
416
+ },
417
+ }),
418
+ };
419
+ case "page2":
420
+ return {
421
+ status: 200,
422
+ body: json({
423
+ nestedItems: {
424
+ pets: SecondPage,
425
+ },
426
+ }),
427
+ };
428
+ default:
429
+ throw new ValidationError(
430
+ "Unsupported continuation token",
431
+ `"undefined" | "page2"`,
432
+ token,
433
+ );
434
+ }
435
+ },
436
+ kind: "MockApiDefinition",
437
+ },
438
+ ]);
439
+
440
+ Scenarios.Payload_Pageable_ServerDrivenPagination_ContinuationToken_requestHeaderNestedResponseBody =
441
+ passOnSuccess([
442
+ {
443
+ uri: "/payload/pageable/server-driven-pagination/continuationtoken/request-header-nested-response-body",
444
+ method: "get",
445
+ request: { headers: { foo: "foo" }, query: { bar: "bar" } },
446
+ response: {
447
+ status: 200,
448
+ body: json({
449
+ nestedItems: {
450
+ pets: FirstPage,
451
+ },
452
+ nestedNext: {
453
+ nextToken: "page2",
454
+ },
455
+ }),
456
+ },
457
+ handler: (req: MockRequest) => {
458
+ req.expect.containsHeader("foo", "foo");
459
+ req.expect.containsQueryParam("bar", "bar");
460
+ const token = req.headers?.token;
461
+
462
+ switch (token) {
463
+ case undefined:
464
+ return {
465
+ status: 200,
466
+ body: json({
467
+ nestedItems: {
468
+ pets: FirstPage,
469
+ },
470
+ nestedNext: {
471
+ nextToken: "page2",
472
+ },
473
+ }),
474
+ };
475
+ case "page2":
476
+ return {
477
+ status: 200,
478
+ body: json({
479
+ nestedItems: {
480
+ pets: SecondPage,
481
+ },
482
+ }),
483
+ };
484
+ default:
485
+ throw new ValidationError(
486
+ "Unsupported continuation token",
487
+ `"undefined" | "page2"`,
488
+ token,
489
+ );
490
+ }
491
+ },
492
+ kind: "MockApiDefinition",
493
+ },
494
+ {
495
+ uri: "/payload/pageable/server-driven-pagination/continuationtoken/request-header-nested-response-body",
496
+ method: "get",
497
+ request: RequestTokenInHeader,
498
+ response: {
499
+ status: 200,
500
+ body: json({
501
+ nestedItems: {
502
+ pets: SecondPage,
503
+ },
504
+ }),
505
+ },
506
+ handler: (req: MockRequest) => {
507
+ req.expect.containsHeader("foo", "foo");
508
+ req.expect.containsQueryParam("bar", "bar");
509
+ const token = req.headers?.token;
510
+
511
+ switch (token) {
512
+ case undefined:
513
+ return {
514
+ status: 200,
515
+ body: json({
516
+ nestedItems: {
517
+ pets: FirstPage,
518
+ },
519
+ nestedNext: {
520
+ nextToken: "page2",
521
+ },
522
+ }),
523
+ };
524
+ case "page2":
525
+ return {
526
+ status: 200,
527
+ body: json({
528
+ nestedItems: {
529
+ pets: SecondPage,
530
+ },
531
+ }),
532
+ };
533
+ default:
534
+ throw new ValidationError(
535
+ "Unsupported continuation token",
536
+ `"undefined" | "page2"`,
537
+ token,
538
+ );
539
+ }
540
+ },
541
+ kind: "MockApiDefinition",
542
+ },
543
+ ]);
544
+
545
+ const XmlContTokenFirstPage = `
546
+ <PetListResult>
547
+ <Pets>
548
+ <Pet>
549
+ <Id>1</Id>
550
+ <Name>dog</Name>
551
+ </Pet>
552
+ <Pet>
553
+ <Id>2</Id>
554
+ <Name>cat</Name>
555
+ </Pet>
556
+ </Pets>
557
+ <NextMarker>page2</NextMarker>
558
+ </PetListResult>
559
+ `;
560
+
561
+ const XmlContTokenSecondPage = `
562
+ <PetListResult>
563
+ <Pets>
564
+ <Pet>
565
+ <Id>3</Id>
566
+ <Name>bird</Name>
567
+ </Pet>
568
+ <Pet>
569
+ <Id>4</Id>
570
+ <Name>fish</Name>
571
+ </Pet>
572
+ </Pets>
573
+ </PetListResult>
574
+ `;
575
+
576
+ Scenarios.Payload_Pageable_XmlPagination_listWithContinuation = passOnSuccess([
577
+ {
578
+ uri: "/payload/pageable/xml/list-with-continuation",
579
+ method: "get",
580
+ request: {},
581
+ response: {
582
+ status: 200,
583
+ body: xml(XmlContTokenFirstPage),
584
+ headers: {
585
+ "content-type": "application/xml; charset=utf-8",
586
+ },
587
+ },
588
+ handler: (req: MockRequest) => {
589
+ const marker = req.query?.marker;
590
+
591
+ switch (marker) {
592
+ case undefined:
593
+ return {
594
+ status: 200,
595
+ body: xml(XmlContTokenFirstPage),
596
+ headers: {
597
+ "content-type": "application/xml",
598
+ },
599
+ };
600
+ case "page2":
601
+ return {
602
+ status: 200,
603
+ body: xml(XmlContTokenSecondPage),
604
+ headers: {
605
+ "content-type": "application/xml",
606
+ },
607
+ };
608
+ default:
609
+ throw new ValidationError("Unsupported marker", `"undefined" | "page2"`, marker);
610
+ }
611
+ },
612
+ kind: "MockApiDefinition",
613
+ },
614
+ {
615
+ uri: "/payload/pageable/xml/list-with-continuation",
616
+ method: "get",
617
+ request: { query: { marker: "page2" } },
618
+ response: {
619
+ status: 200,
620
+ body: xml(XmlContTokenSecondPage),
621
+ headers: {
622
+ "content-type": "application/xml; charset=utf-8",
623
+ },
624
+ },
625
+ handler: (req: MockRequest) => {
626
+ const marker = req.query?.marker;
627
+
628
+ switch (marker) {
629
+ case undefined:
630
+ return {
631
+ status: 200,
632
+ body: xml(XmlContTokenFirstPage),
633
+ headers: {
634
+ "content-type": "application/xml",
635
+ },
636
+ };
637
+ case "page2":
638
+ return {
639
+ status: 200,
640
+ body: xml(XmlContTokenSecondPage),
641
+ headers: {
642
+ "content-type": "application/xml",
643
+ },
644
+ };
645
+ default:
646
+ throw new ValidationError("Unsupported marker", `"undefined" | "page2"`, marker);
647
+ }
648
+ },
649
+ kind: "MockApiDefinition",
650
+ },
651
+ ]);
652
+
653
+ const xmlNextLinkFirstPage = (baseUrl: string) => `
654
+ <PetListResult>
655
+ <Pets>
656
+ <Pet>
657
+ <Id>1</Id>
658
+ <Name>dog</Name>
659
+ </Pet>
660
+ <Pet>
661
+ <Id>2</Id>
662
+ <Name>cat</Name>
663
+ </Pet>
664
+ </Pets>
665
+ <NextLink>${baseUrl}/payload/pageable/xml/list-with-next-link/nextPage</NextLink>
666
+ </PetListResult>
667
+ `;
668
+
669
+ const XmlNextLinkSecondPage = `
670
+ <PetListResult>
671
+ <Pets>
672
+ <Pet>
673
+ <Id>3</Id>
674
+ <Name>bird</Name>
675
+ </Pet>
676
+ <Pet>
677
+ <Id>4</Id>
678
+ <Name>fish</Name>
679
+ </Pet>
680
+ </Pets>
681
+ </PetListResult>
682
+ `;
683
+
684
+ Scenarios.Payload_Pageable_XmlPagination_listWithNextLink = passOnSuccess([
685
+ {
686
+ uri: "/payload/pageable/xml/list-with-next-link",
687
+ method: "get",
688
+ request: {},
689
+ response: {
690
+ status: 200,
691
+ body: {
692
+ contentType: "application/xml",
693
+ rawContent: {
694
+ serialize: (config: ResolverConfig) =>
695
+ `<?xml version='1.0' encoding='UTF-8'?>` + xmlNextLinkFirstPage(config.baseUrl),
696
+ },
697
+ },
698
+ headers: {
699
+ "content-type": "application/xml; charset=utf-8",
700
+ },
701
+ },
702
+ handler: (req: MockRequest) => {
703
+ return {
704
+ status: 200,
705
+ body: xml(xmlNextLinkFirstPage(req.baseUrl)),
706
+ headers: {
707
+ "content-type": "application/xml",
708
+ },
709
+ };
710
+ },
711
+ kind: "MockApiDefinition",
712
+ },
713
+ {
714
+ uri: "/payload/pageable/xml/list-with-next-link/nextPage",
715
+ method: "get",
716
+ request: {},
717
+ response: {
718
+ status: 200,
719
+ body: xml(XmlNextLinkSecondPage),
720
+ headers: {
721
+ "content-type": "application/xml; charset=utf-8",
722
+ },
723
+ },
47
724
  kind: "MockApiDefinition",
48
725
  },
49
726
  ]);