Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
changeKind: feature
packages:
- "@typespec/http-specs"
---

add test for discriminator model without subtypes and query params with `$` prefixes
60 changes: 60 additions & 0 deletions packages/http-specs/spec-summary.md
Original file line number Diff line number Diff line change
Expand Up @@ -1534,6 +1534,43 @@ Second request path:

Expect to handle a constant value for query and mock api returns nothing

### Parameters_Query_DollarSign_filter

- Endpoint: `get /parameters/query/dollar-sign/filter`

Send a request with a `$filter` query parameter.

Expected query parameter:

- `$filter` = "status eq 'active'"

Expected response status code: 204

### Parameters_Query_DollarSign_orderby

- Endpoint: `get /parameters/query/dollar-sign/orderby`

Send a request with a `$orderby` query parameter.

Expected query parameter:

- `$orderby` = "name asc"

Expected response status code: 204

### Parameters_Query_DollarSign_topAndSkip

- Endpoint: `get /parameters/query/dollar-sign/top-and-skip`

Send a request with `$top` and `$skip` query parameters.

Expected query parameters:

- `$top` = 10
- `$skip` = 5

Expected response status code: 204

### Parameters_Spread_Alias_spreadAsRequestBody

- Endpoint: `put /parameters/spread/alias/request-body`
Expand Down Expand Up @@ -6226,6 +6263,18 @@ Expected response body:
{ "wingspan": 1, "kind": "sparrow" }
```

### Type_Model_Inheritance_SingleDiscriminator_getNoSubtypesModel

- Endpoint: `get /type/model/inheritance/single-discriminator/no-subtypes/model`

Generate and receive a discriminated model that has no defined subtypes.
The base model declares a discriminator but no models extend it.
Expected response body:

```json
{ "kind": "salmon", "size": 10 }
```

### Type_Model_Inheritance_SingleDiscriminator_getRecursiveModel

- Endpoint: `get /type/model/inheritance/single-discriminator/recursivemodel`
Expand Down Expand Up @@ -6278,6 +6327,17 @@ Expected input body:
{ "wingspan": 1, "kind": "sparrow" }
```

### Type_Model_Inheritance_SingleDiscriminator_putNoSubtypesModel

- Endpoint: `put /type/model/inheritance/single-discriminator/no-subtypes/model`

Send a discriminated model that has no defined subtypes.
Expected input body:

```json
{ "kind": "salmon", "size": 10 }
```

### Type_Model_Inheritance_SingleDiscriminator_putRecursiveModel

- Endpoint: `put /type/model/inheritance/single-discriminator/recursivemodel`
Expand Down
56 changes: 56 additions & 0 deletions packages/http-specs/specs/parameters/query/main.tsp
Original file line number Diff line number Diff line change
Expand Up @@ -20,3 +20,59 @@ interface Constant {
queryParam: "constantValue",
): void;
}

@doc("Dollar-sign prefixed query parameter verification")
@route("/dollar-sign")
interface DollarSign {
@scenario
@scenarioDoc("""
Send a request with a `$filter` query parameter.

Expected query parameter:
- `$filter` = "status eq 'active'"

Expected response status code: 204
""")
@route("/filter")
@get
filter(
@query("$filter")
filter: string,
): void;

@scenario
@scenarioDoc("""
Send a request with `$top` and `$skip` query parameters.

Expected query parameters:
- `$top` = 10
- `$skip` = 5

Expected response status code: 204
""")
@route("/top-and-skip")
@get
topAndSkip(
@query("$top")
top: int32,

@query("$skip")
skip: int32,
): void;

@scenario
@scenarioDoc("""
Send a request with a `$orderby` query parameter.

Expected query parameter:
- `$orderby` = "name asc"

Expected response status code: 204
""")
@route("/orderby")
@get
orderby(
@query("$orderby")
orderby: string,
): void;
}
36 changes: 36 additions & 0 deletions packages/http-specs/specs/parameters/query/mockapi.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,3 +13,39 @@ Scenarios.Parameters_Query_Constant_post = passOnSuccess({
},
kind: "MockApiDefinition",
});

Scenarios.Parameters_Query_DollarSign_filter = passOnSuccess({
uri: "/parameters/query/dollar-sign/filter",
method: "get",
request: {
query: { $filter: "status eq 'active'" },
},
response: {
status: 204,
},
kind: "MockApiDefinition",
});

Scenarios.Parameters_Query_DollarSign_topAndSkip = passOnSuccess({
uri: "/parameters/query/dollar-sign/top-and-skip",
method: "get",
request: {
query: { $top: "10", $skip: "5" },
},
response: {
status: 204,
},
kind: "MockApiDefinition",
});

Scenarios.Parameters_Query_DollarSign_orderby = passOnSuccess({
uri: "/parameters/query/dollar-sign/orderby",
method: "get",
request: {
query: { $orderby: "name asc" },
},
response: {
status: 204,
},
kind: "MockApiDefinition",
});
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,13 @@ model TRex extends Dinosaur {
kind: "t-rex";
}

@doc("A discriminated model with no defined subtypes. The discriminator is declared but no models extend it.")
@discriminator("kind")
model Fish {
kind: string;
size: int32;
}

@scenario
@route("/model")
@scenarioDoc("""
Expand Down Expand Up @@ -170,3 +177,28 @@ op getWrongDiscriminator(): Bird;
""")
@get
op getLegacyModel(): Dinosaur;

@scenario
@route("/no-subtypes/model")
@scenarioDoc("""
Generate and receive a discriminated model that has no defined subtypes.
The base model declares a discriminator but no models extend it.
Expected response body:
```json
{"kind": "salmon", "size": 10}
```
""")
@get
op getNoSubtypesModel(): Fish;

@scenario
@route("/no-subtypes/model")
@scenarioDoc("""
Send a discriminated model that has no defined subtypes.
Expected input body:
```json
{"kind": "salmon", "size": 10}
```
""")
@put
op putNoSubtypesModel(@body input: Fish): NoContentResponse;
Original file line number Diff line number Diff line change
Expand Up @@ -101,3 +101,31 @@ Scenarios.Type_Model_Inheritance_SingleDiscriminator_getLegacyModel = passOnSucc
},
kind: "MockApiDefinition",
});

const noSubtypesBody = {
kind: "salmon",
size: 10,
};

Scenarios.Type_Model_Inheritance_SingleDiscriminator_getNoSubtypesModel = passOnSuccess({
uri: "/type/model/inheritance/single-discriminator/no-subtypes/model",
method: "get",
request: {},
response: {
status: 200,
body: json(noSubtypesBody),
},
kind: "MockApiDefinition",
});

Scenarios.Type_Model_Inheritance_SingleDiscriminator_putNoSubtypesModel = passOnSuccess({
uri: "/type/model/inheritance/single-discriminator/no-subtypes/model",
method: "put",
request: {
body: json(noSubtypesBody),
},
response: {
status: 204,
},
kind: "MockApiDefinition",
});
Loading