@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
|
@@ -4,7 +4,7 @@ import "@typespec/spector";
|
|
|
4
4
|
|
|
5
5
|
using Http;
|
|
6
6
|
using Spector;
|
|
7
|
-
using
|
|
7
|
+
using Versioning;
|
|
8
8
|
|
|
9
9
|
@doc("Illustrates OASIS repeatability headers")
|
|
10
10
|
@scenarioService("/special-headers/repeatability")
|
|
@@ -15,7 +15,7 @@ model RepeatableResponse {
|
|
|
15
15
|
@statusCode
|
|
16
16
|
statusCode: 204;
|
|
17
17
|
|
|
18
|
-
@visibility(
|
|
18
|
+
@visibility(Lifecycle.Read)
|
|
19
19
|
@header("Repeatability-Result")
|
|
20
20
|
@doc("Indicates whether the repeatable request was accepted or rejected.")
|
|
21
21
|
repeatabilityResult?: "accepted" | "rejected";
|
|
@@ -34,6 +34,7 @@ using Spector;
|
|
|
34
34
|
* in
|
|
35
35
|
* is
|
|
36
36
|
* lambda
|
|
37
|
+
* list
|
|
37
38
|
* not
|
|
38
39
|
* or
|
|
39
40
|
* pass
|
|
@@ -56,7 +57,7 @@ interface Operations {
|
|
|
56
57
|
@opNameScenario("and") and(): void;
|
|
57
58
|
@opNameScenario("as") as(): void;
|
|
58
59
|
@opNameScenario("assert") assert(): void;
|
|
59
|
-
@opNameScenario("async") async(): void;
|
|
60
|
+
@opNameScenario("async") `async`(): void;
|
|
60
61
|
@opNameScenario("await") await(): void;
|
|
61
62
|
@opNameScenario("break") break(): void;
|
|
62
63
|
@opNameScenario("class") class(): void;
|
|
@@ -84,7 +85,7 @@ interface Operations {
|
|
|
84
85
|
@opNameScenario("return") `return`(): void;
|
|
85
86
|
@opNameScenario("try") try(): void;
|
|
86
87
|
@opNameScenario("while") while(): void;
|
|
87
|
-
@opNameScenario("with") with(): void;
|
|
88
|
+
@opNameScenario("with") `with`(): void;
|
|
88
89
|
@opNameScenario("yield") yield(): void;
|
|
89
90
|
}
|
|
90
91
|
|
|
@@ -144,7 +145,7 @@ namespace Models {
|
|
|
144
145
|
model and is Base;
|
|
145
146
|
model as is Base;
|
|
146
147
|
model assert is Base;
|
|
147
|
-
model async is Base;
|
|
148
|
+
model `async` is Base;
|
|
148
149
|
model await is Base;
|
|
149
150
|
model break is Base;
|
|
150
151
|
model class is Base;
|
|
@@ -172,13 +173,13 @@ namespace Models {
|
|
|
172
173
|
model `return` is Base;
|
|
173
174
|
model try is Base;
|
|
174
175
|
model while is Base;
|
|
175
|
-
model with is Base;
|
|
176
|
+
model `with` is Base;
|
|
176
177
|
model yield is Base;
|
|
177
178
|
|
|
178
179
|
@modelNameScenario("and") op withAnd(@body body: and): void;
|
|
179
180
|
@modelNameScenario("as") op withAs(@body body: as): void;
|
|
180
181
|
@modelNameScenario("assert") op withAssert(@body body: assert): void;
|
|
181
|
-
@modelNameScenario("async") op withAsync(@body body: async): void;
|
|
182
|
+
@modelNameScenario("async") op withAsync(@body body: `async`): void;
|
|
182
183
|
@modelNameScenario("await") op withAwait(@body body: await): void;
|
|
183
184
|
@modelNameScenario("break") op withBreak(@body body: break): void;
|
|
184
185
|
@modelNameScenario("class") op withClass(@body body: class): void;
|
|
@@ -206,7 +207,7 @@ namespace Models {
|
|
|
206
207
|
@modelNameScenario("return") op withReturn(@body body: `return`): void;
|
|
207
208
|
@modelNameScenario("try") op withTry(@body body: try): void;
|
|
208
209
|
@modelNameScenario("while") op withWhile(@body body: while): void;
|
|
209
|
-
@modelNameScenario("with") op withWith(@body body: with): void;
|
|
210
|
+
@modelNameScenario("with") op withWith(@body body: `with`): void;
|
|
210
211
|
@modelNameScenario("yield") op withYield(@body body: yield): void;
|
|
211
212
|
}
|
|
212
213
|
|
|
@@ -231,4 +232,115 @@ namespace ModelProperties {
|
|
|
231
232
|
""")
|
|
232
233
|
@route("same-as-model")
|
|
233
234
|
op sameAsModel(@body body: SameAsModel): void;
|
|
235
|
+
|
|
236
|
+
// Python dict method names that could conflict
|
|
237
|
+
model DictMethods {
|
|
238
|
+
keys: string;
|
|
239
|
+
items: string;
|
|
240
|
+
values: string;
|
|
241
|
+
popitem: string;
|
|
242
|
+
clear: string;
|
|
243
|
+
update: string;
|
|
244
|
+
setdefault: string;
|
|
245
|
+
pop: string;
|
|
246
|
+
get: string;
|
|
247
|
+
copy: string;
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
@scenario
|
|
251
|
+
@scenarioDoc("""
|
|
252
|
+
Verify that model properties can use names that are Python dict methods. These names (keys, items, values, etc.) may conflict with Python's dict class methods.
|
|
253
|
+
|
|
254
|
+
Send
|
|
255
|
+
|
|
256
|
+
```json
|
|
257
|
+
{
|
|
258
|
+
"keys": "ok",
|
|
259
|
+
"items": "ok",
|
|
260
|
+
"values": "ok",
|
|
261
|
+
"popitem": "ok",
|
|
262
|
+
"clear": "ok",
|
|
263
|
+
"update": "ok",
|
|
264
|
+
"setdefault": "ok",
|
|
265
|
+
"pop": "ok",
|
|
266
|
+
"get": "ok",
|
|
267
|
+
"copy": "ok"
|
|
268
|
+
}
|
|
269
|
+
```
|
|
270
|
+
""")
|
|
271
|
+
@route("dict-methods")
|
|
272
|
+
op dictMethods(@body body: DictMethods): void;
|
|
273
|
+
|
|
274
|
+
// Test for model property named "list" which is a reserved word in many languages
|
|
275
|
+
model ModelWithList {
|
|
276
|
+
list: string;
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
@scenario
|
|
280
|
+
@scenarioDoc("""
|
|
281
|
+
Verify that a property can be named "list", which is a reserved word in many languages like Python.
|
|
282
|
+
|
|
283
|
+
Send
|
|
284
|
+
|
|
285
|
+
```json
|
|
286
|
+
{"list": "ok"}
|
|
287
|
+
```
|
|
288
|
+
""")
|
|
289
|
+
@route("list")
|
|
290
|
+
op withList(@body body: ModelWithList): void;
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
/**
|
|
294
|
+
* Verify enum member names that are special words using extensible enum (union).
|
|
295
|
+
*/
|
|
296
|
+
union ExtensibleString {
|
|
297
|
+
string,
|
|
298
|
+
and: "and",
|
|
299
|
+
as: "as",
|
|
300
|
+
assert: "assert",
|
|
301
|
+
async: "async",
|
|
302
|
+
await: "await",
|
|
303
|
+
break: "break",
|
|
304
|
+
class: "class",
|
|
305
|
+
constructor: "constructor",
|
|
306
|
+
continue: "continue",
|
|
307
|
+
def: "def",
|
|
308
|
+
del: "del",
|
|
309
|
+
elif: "elif",
|
|
310
|
+
`else`: "else",
|
|
311
|
+
except: "except",
|
|
312
|
+
exec: "exec",
|
|
313
|
+
finally: "finally",
|
|
314
|
+
for: "for",
|
|
315
|
+
from: "from",
|
|
316
|
+
global: "global",
|
|
317
|
+
`if`: "if",
|
|
318
|
+
`import`: "import",
|
|
319
|
+
in: "in",
|
|
320
|
+
`is`: "is",
|
|
321
|
+
lambda: "lambda",
|
|
322
|
+
not: "not",
|
|
323
|
+
or: "or",
|
|
324
|
+
pass: "pass",
|
|
325
|
+
raise: "raise",
|
|
326
|
+
`return`: "return",
|
|
327
|
+
try: "try",
|
|
328
|
+
while: "while",
|
|
329
|
+
with: "with",
|
|
330
|
+
yield: "yield",
|
|
331
|
+
}
|
|
332
|
+
|
|
333
|
+
/**
|
|
334
|
+
* Verify enum member names that are special words.
|
|
335
|
+
*/
|
|
336
|
+
@route("/extensible-strings")
|
|
337
|
+
interface ExtensibleStrings {
|
|
338
|
+
@scenario
|
|
339
|
+
@scenarioDoc("""
|
|
340
|
+
Verify that enum members with special word names can be sent and received properly.
|
|
341
|
+
Send 'class' and expect the same value back.
|
|
342
|
+
""")
|
|
343
|
+
@put
|
|
344
|
+
@route("/string")
|
|
345
|
+
putExtensibleStringValue(@body body: ExtensibleString): ExtensibleString;
|
|
234
346
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { passOnSuccess, ScenarioMockApi } from "@typespec/spec-api";
|
|
1
|
+
import { json, MockRequest, passOnSuccess, ScenarioMockApi } from "@typespec/spec-api";
|
|
2
2
|
|
|
3
3
|
export const Scenarios: Record<string, ScenarioMockApi> = {};
|
|
4
4
|
|
|
@@ -6,9 +6,46 @@ Scenarios.SpecialWords_ModelProperties_sameAsModel = passOnSuccess({
|
|
|
6
6
|
uri: "/special-words/model-properties/same-as-model",
|
|
7
7
|
method: "post",
|
|
8
8
|
request: {
|
|
9
|
-
body: {
|
|
9
|
+
body: json({
|
|
10
10
|
SameAsModel: "ok",
|
|
11
|
-
},
|
|
11
|
+
}),
|
|
12
|
+
},
|
|
13
|
+
response: {
|
|
14
|
+
status: 204,
|
|
15
|
+
},
|
|
16
|
+
kind: "MockApiDefinition",
|
|
17
|
+
});
|
|
18
|
+
|
|
19
|
+
Scenarios.SpecialWords_ModelProperties_dictMethods = passOnSuccess({
|
|
20
|
+
uri: "/special-words/model-properties/dict-methods",
|
|
21
|
+
method: "post",
|
|
22
|
+
request: {
|
|
23
|
+
body: json({
|
|
24
|
+
keys: "ok",
|
|
25
|
+
items: "ok",
|
|
26
|
+
values: "ok",
|
|
27
|
+
popitem: "ok",
|
|
28
|
+
clear: "ok",
|
|
29
|
+
update: "ok",
|
|
30
|
+
setdefault: "ok",
|
|
31
|
+
pop: "ok",
|
|
32
|
+
get: "ok",
|
|
33
|
+
copy: "ok",
|
|
34
|
+
}),
|
|
35
|
+
},
|
|
36
|
+
response: {
|
|
37
|
+
status: 204,
|
|
38
|
+
},
|
|
39
|
+
kind: "MockApiDefinition",
|
|
40
|
+
});
|
|
41
|
+
|
|
42
|
+
Scenarios.SpecialWords_ModelProperties_withList = passOnSuccess({
|
|
43
|
+
uri: "/special-words/model-properties/list",
|
|
44
|
+
method: "post",
|
|
45
|
+
request: {
|
|
46
|
+
body: json({
|
|
47
|
+
list: "ok",
|
|
48
|
+
}),
|
|
12
49
|
},
|
|
13
50
|
response: {
|
|
14
51
|
status: 204,
|
|
@@ -21,9 +58,9 @@ function createModelsTests(uri: string) {
|
|
|
21
58
|
uri,
|
|
22
59
|
method: "post",
|
|
23
60
|
request: {
|
|
24
|
-
body: {
|
|
61
|
+
body: json({
|
|
25
62
|
name: "ok",
|
|
26
|
-
},
|
|
63
|
+
}),
|
|
27
64
|
},
|
|
28
65
|
response: {
|
|
29
66
|
status: 204,
|
|
@@ -134,7 +171,7 @@ function createParametersTests(uri: string, data: any, paramName: string) {
|
|
|
134
171
|
uri,
|
|
135
172
|
method: "get",
|
|
136
173
|
request: {
|
|
137
|
-
|
|
174
|
+
query: data,
|
|
138
175
|
},
|
|
139
176
|
response: {
|
|
140
177
|
status: 204,
|
|
@@ -382,3 +419,22 @@ Scenarios.SpecialWords_Parameters_cancellationToken = createParametersTests(
|
|
|
382
419
|
},
|
|
383
420
|
"cancellationToken",
|
|
384
421
|
);
|
|
422
|
+
|
|
423
|
+
Scenarios.SpecialWords_ExtensibleStrings_putExtensibleStringValue = passOnSuccess({
|
|
424
|
+
uri: `/special-words/extensible-strings/string`,
|
|
425
|
+
method: "put",
|
|
426
|
+
request: {
|
|
427
|
+
body: json("class"),
|
|
428
|
+
},
|
|
429
|
+
response: {
|
|
430
|
+
status: 200,
|
|
431
|
+
body: json("class"),
|
|
432
|
+
},
|
|
433
|
+
handler: (req: MockRequest) => {
|
|
434
|
+
return {
|
|
435
|
+
status: 200,
|
|
436
|
+
body: json(req.body),
|
|
437
|
+
};
|
|
438
|
+
},
|
|
439
|
+
kind: "MockApiDefinition",
|
|
440
|
+
});
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import "@typespec/http";
|
|
2
|
+
import "@typespec/http/streams";
|
|
3
|
+
import "@typespec/spector";
|
|
4
|
+
|
|
5
|
+
using Http;
|
|
6
|
+
using Http.Streams;
|
|
7
|
+
using Spector;
|
|
8
|
+
|
|
9
|
+
@doc("Test of jsonl streaming.")
|
|
10
|
+
@scenarioService("/streaming/jsonl")
|
|
11
|
+
namespace Streaming.Jsonl;
|
|
12
|
+
|
|
13
|
+
@route("basic")
|
|
14
|
+
namespace Basic {
|
|
15
|
+
@scenario
|
|
16
|
+
@scenarioDoc("""
|
|
17
|
+
Basic jsonl streaming for request.
|
|
18
|
+
""")
|
|
19
|
+
@route("send")
|
|
20
|
+
@post
|
|
21
|
+
op send(stream: JsonlStream<Info>): NoContentResponse;
|
|
22
|
+
|
|
23
|
+
@scenario
|
|
24
|
+
@scenarioDoc("""
|
|
25
|
+
Basic jsonl streaming for response.
|
|
26
|
+
""")
|
|
27
|
+
@route("receive")
|
|
28
|
+
op receive(): JsonlStream<Info>;
|
|
29
|
+
|
|
30
|
+
model Info {
|
|
31
|
+
desc: string;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { passOnSuccess, ScenarioMockApi } from "@typespec/spec-api";
|
|
2
|
+
|
|
3
|
+
export const Scenarios: Record<string, ScenarioMockApi> = {};
|
|
4
|
+
|
|
5
|
+
Scenarios.Streaming_Jsonl_Basic_send = passOnSuccess({
|
|
6
|
+
uri: "/streaming/jsonl/basic/send",
|
|
7
|
+
method: "post",
|
|
8
|
+
request: {
|
|
9
|
+
body: {
|
|
10
|
+
rawContent: Buffer.from('{"desc": "one"}\n{"desc": "two"}\n{"desc": "three"}'),
|
|
11
|
+
contentType: "application/jsonl",
|
|
12
|
+
},
|
|
13
|
+
},
|
|
14
|
+
response: {
|
|
15
|
+
status: 204,
|
|
16
|
+
},
|
|
17
|
+
kind: "MockApiDefinition",
|
|
18
|
+
});
|
|
19
|
+
|
|
20
|
+
Scenarios.Streaming_Jsonl_Basic_receive = passOnSuccess({
|
|
21
|
+
uri: "/streaming/jsonl/basic/receive",
|
|
22
|
+
method: "get",
|
|
23
|
+
request: {},
|
|
24
|
+
response: {
|
|
25
|
+
status: 200,
|
|
26
|
+
body: {
|
|
27
|
+
rawContent: Buffer.from('{"desc": "one"}\n{"desc": "two"}\n{"desc": "three"}'),
|
|
28
|
+
contentType: "application/jsonl",
|
|
29
|
+
},
|
|
30
|
+
},
|
|
31
|
+
kind: "MockApiDefinition",
|
|
32
|
+
});
|
|
@@ -40,6 +40,9 @@ interface String {
|
|
|
40
40
|
@get
|
|
41
41
|
@route("/known-value")
|
|
42
42
|
getKnownValue(): {
|
|
43
|
+
@header
|
|
44
|
+
contentType: "application/json";
|
|
45
|
+
|
|
43
46
|
@body body: DaysOfWeekExtensibleEnum;
|
|
44
47
|
};
|
|
45
48
|
|
|
@@ -48,6 +51,9 @@ interface String {
|
|
|
48
51
|
@get
|
|
49
52
|
@route("/unknown-value")
|
|
50
53
|
getUnknownValue(): {
|
|
54
|
+
@header
|
|
55
|
+
contentType: "application/json";
|
|
56
|
+
|
|
51
57
|
@body body: DaysOfWeekExtensibleEnum;
|
|
52
58
|
};
|
|
53
59
|
|
|
@@ -55,11 +61,21 @@ interface String {
|
|
|
55
61
|
@scenarioDoc("Expect to send a known value. Mock api expect to receive 'Monday'")
|
|
56
62
|
@put
|
|
57
63
|
@route("/known-value")
|
|
58
|
-
putKnownValue(
|
|
64
|
+
putKnownValue(
|
|
65
|
+
@header
|
|
66
|
+
contentType: "application/json",
|
|
67
|
+
|
|
68
|
+
@body body: DaysOfWeekExtensibleEnum,
|
|
69
|
+
): void;
|
|
59
70
|
|
|
60
71
|
@scenario
|
|
61
72
|
@scenarioDoc("Expect to handle an unknown value. Mock api expect to receive 'Weekend'")
|
|
62
73
|
@put
|
|
63
74
|
@route("/unknown-value")
|
|
64
|
-
putUnknownValue(
|
|
75
|
+
putUnknownValue(
|
|
76
|
+
@header
|
|
77
|
+
contentType: "application/json",
|
|
78
|
+
|
|
79
|
+
@body body: DaysOfWeekExtensibleEnum,
|
|
80
|
+
): void;
|
|
65
81
|
}
|
|
@@ -40,7 +40,13 @@ interface String {
|
|
|
40
40
|
@get
|
|
41
41
|
@route("/known-value")
|
|
42
42
|
@doc("getKnownValue")
|
|
43
|
-
getKnownValue():
|
|
43
|
+
getKnownValue(): {
|
|
44
|
+
@header
|
|
45
|
+
contentType: "application/json";
|
|
46
|
+
|
|
47
|
+
@body
|
|
48
|
+
body: DaysOfWeekEnum;
|
|
49
|
+
};
|
|
44
50
|
|
|
45
51
|
#suppress "@azure-tools/typespec-azure-core/use-standard-operations" "For testing"
|
|
46
52
|
@scenario
|
|
@@ -48,7 +54,10 @@ interface String {
|
|
|
48
54
|
@put
|
|
49
55
|
@route("/known-value")
|
|
50
56
|
@doc("putKnownValue")
|
|
51
|
-
putKnownValue(
|
|
57
|
+
putKnownValue(
|
|
58
|
+
@header contentType: "application/json",
|
|
59
|
+
@body @doc("_") body: DaysOfWeekEnum,
|
|
60
|
+
): void;
|
|
52
61
|
|
|
53
62
|
#suppress "@azure-tools/typespec-azure-core/use-standard-operations" "For testing"
|
|
54
63
|
@scenario
|
|
@@ -56,5 +65,8 @@ interface String {
|
|
|
56
65
|
@put
|
|
57
66
|
@route("/unknown-value")
|
|
58
67
|
@doc("putUnknownValue")
|
|
59
|
-
putUnknownValue(
|
|
68
|
+
putUnknownValue(
|
|
69
|
+
@header contentType: "application/json",
|
|
70
|
+
@body @doc("_") body: DaysOfWeekEnum,
|
|
71
|
+
): void;
|
|
60
72
|
}
|
|
@@ -16,7 +16,7 @@ Scenarios.Type_Enum_Fixed_String_putKnownValue = passOnSuccess({
|
|
|
16
16
|
uri: "/type/enum/fixed/string/known-value",
|
|
17
17
|
method: "put",
|
|
18
18
|
request: {
|
|
19
|
-
body: "Monday",
|
|
19
|
+
body: json("Monday"),
|
|
20
20
|
headers: {
|
|
21
21
|
"Content-Type": "application/json",
|
|
22
22
|
},
|
|
@@ -31,7 +31,7 @@ Scenarios.Type_Enum_Fixed_String_putUnknownValue = passOnCode(500, {
|
|
|
31
31
|
uri: "/type/enum/fixed/string/unknown-value",
|
|
32
32
|
method: "put",
|
|
33
33
|
request: {
|
|
34
|
-
body: "Weekend",
|
|
34
|
+
body: json("Weekend"),
|
|
35
35
|
headers: {
|
|
36
36
|
"Content-Type": "application/json",
|
|
37
37
|
},
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
import "@typespec/http";
|
|
2
|
+
import "@typespec/spector";
|
|
3
|
+
|
|
4
|
+
using Http;
|
|
5
|
+
using Spector;
|
|
6
|
+
|
|
7
|
+
@doc("Test for File type usage in request and response bodies")
|
|
8
|
+
@scenarioService("/type/file")
|
|
9
|
+
namespace Type.File;
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Test File as request and response body with specific content type
|
|
13
|
+
*/
|
|
14
|
+
@route("/body")
|
|
15
|
+
namespace Body {
|
|
16
|
+
@scenario
|
|
17
|
+
@scenarioDoc("""
|
|
18
|
+
Test File type as request body with specific content type.
|
|
19
|
+
Expected request:
|
|
20
|
+
- Content-Type header: image/png
|
|
21
|
+
- Body: binary content matching packages/http-specs/assets/image.png
|
|
22
|
+
""")
|
|
23
|
+
@post
|
|
24
|
+
@route("/request/specific-content-type")
|
|
25
|
+
op uploadFileSpecificContentType(@bodyRoot file: Http.File<"image/png">): NoContentResponse;
|
|
26
|
+
|
|
27
|
+
@scenario
|
|
28
|
+
@scenarioDoc("""
|
|
29
|
+
Test File type as request body with JSON content type.
|
|
30
|
+
Expected request:
|
|
31
|
+
- Content-Type header: application/json
|
|
32
|
+
- Body: JSON content with file data
|
|
33
|
+
""")
|
|
34
|
+
@post
|
|
35
|
+
@route("/request/json-content-type")
|
|
36
|
+
op uploadFileJsonContentType(@bodyRoot file: Http.File<"application/json">): NoContentResponse;
|
|
37
|
+
|
|
38
|
+
@scenario
|
|
39
|
+
@scenarioDoc("""
|
|
40
|
+
Test File type as response body with JSON content type.
|
|
41
|
+
Expected response:
|
|
42
|
+
- Content-Type header: application/json
|
|
43
|
+
- Body: JSON content with file data
|
|
44
|
+
""")
|
|
45
|
+
@get
|
|
46
|
+
@route("/response/json-content-type")
|
|
47
|
+
op downloadFileJsonContentType(): Http.File<"application/json">;
|
|
48
|
+
|
|
49
|
+
@scenario
|
|
50
|
+
@scenarioDoc("""
|
|
51
|
+
Test File type as response body with specific content type.
|
|
52
|
+
Expected response:
|
|
53
|
+
- Content-Type header: image/png
|
|
54
|
+
- Body: binary content matching packages/http-specs/assets/image.png
|
|
55
|
+
""")
|
|
56
|
+
@get
|
|
57
|
+
@route("/response/specific-content-type")
|
|
58
|
+
op downloadFileSpecificContentType(): Http.File<"image/png">;
|
|
59
|
+
|
|
60
|
+
@scenario
|
|
61
|
+
@scenarioDoc("""
|
|
62
|
+
Test File type as request body with multiple allowed content types (image/png or image/jpeg).
|
|
63
|
+
Client should send image/png.
|
|
64
|
+
Expected request:
|
|
65
|
+
- Content-Type header: image/png
|
|
66
|
+
- Body: binary content matching packages/http-specs/assets/image.png
|
|
67
|
+
""")
|
|
68
|
+
@post
|
|
69
|
+
@route("/request/multiple-content-types")
|
|
70
|
+
op uploadFileMultipleContentTypes(
|
|
71
|
+
@bodyRoot file: Http.File<"image/png" | "image/jpeg">,
|
|
72
|
+
): NoContentResponse;
|
|
73
|
+
|
|
74
|
+
@scenario
|
|
75
|
+
@scenarioDoc("""
|
|
76
|
+
Test File type as response body with multiple allowed content types.
|
|
77
|
+
Service will return image/png.
|
|
78
|
+
Expected response:
|
|
79
|
+
- Content-Type header: image/png
|
|
80
|
+
- Body: binary content matching packages/http-specs/assets/image.png
|
|
81
|
+
""")
|
|
82
|
+
@get
|
|
83
|
+
@route("/response/multiple-content-types")
|
|
84
|
+
op downloadFileMultipleContentTypes(): Http.File<"image/png" | "image/jpeg">;
|
|
85
|
+
|
|
86
|
+
@scenario
|
|
87
|
+
@scenarioDoc("""
|
|
88
|
+
Test File type as request body with unspecified content type.
|
|
89
|
+
The File type accepts any content type. For testing, sender will use image/png.
|
|
90
|
+
Expected request:
|
|
91
|
+
- Content-Type header: image/png
|
|
92
|
+
- Body: binary content matching packages/http-specs/assets/image.png
|
|
93
|
+
""")
|
|
94
|
+
@post
|
|
95
|
+
@route("/request/default-content-type")
|
|
96
|
+
op uploadFileDefaultContentType(@bodyRoot file: Http.File): NoContentResponse;
|
|
97
|
+
|
|
98
|
+
@scenario
|
|
99
|
+
@scenarioDoc("""
|
|
100
|
+
Test File type as response body with unspecified content type.
|
|
101
|
+
The File type accepts any content type. For testing, server will return image/png.
|
|
102
|
+
Expected response:
|
|
103
|
+
- Content-Type header: image/png
|
|
104
|
+
- Body: binary content matching packages/http-specs/assets/image.png
|
|
105
|
+
""")
|
|
106
|
+
@get
|
|
107
|
+
@route("/response/default-content-type")
|
|
108
|
+
op downloadFileDefaultContentType(): Http.File;
|
|
109
|
+
}
|