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