Skip to content

Commit

Permalink
add test case for discriminator mapping
Browse files Browse the repository at this point in the history
  • Loading branch information
tsirlucas authored and ardatan committed Apr 3, 2023
1 parent 1c637af commit 546cc10
Show file tree
Hide file tree
Showing 3 changed files with 101 additions and 3 deletions.
56 changes: 53 additions & 3 deletions packages/loaders/openapi/tests/__snapshots__/schemas.test.ts.snap
Original file line number Diff line number Diff line change
Expand Up @@ -41929,6 +41929,52 @@ enum HTTPMethod {
}"
`;

exports[`Schemas DiscriminatorMapping should generate the correct schema: DiscriminatorMapping 1`] = `
"schema {
query: Query
}

directive @oneOf on OBJECT | INTERFACE

directive @discriminator(field: String) on INTERFACE | UNION

directive @discriminatorMapping(value: String, schema: String) on INTERFACE | UNION

directive @globalOptions(sourceName: String, endpoint: String, operationHeaders: ObjMap, queryStringOptions: ObjMap, queryParams: ObjMap) on OBJECT

directive @httpOperation(path: String, operationSpecificHeaders: ObjMap, httpMethod: HTTPMethod, isBinary: Boolean, requestBaseBody: ObjMap, queryParamArgMap: ObjMap, queryStringOptionsByParam: ObjMap) on FIELD_DEFINITION

type Query @globalOptions(sourceName: "DiscriminatorMapping") {
pets_by_id(id: String!): Pet @httpOperation(path: "/pets/{args.id}", operationSpecificHeaders: "{\\"accept\\":\\"application/json\\"}", httpMethod: GET)
}

union Pet @discriminator(field: "petType") @discriminatorMapping(value: "Dog", schema: "DogDifferent") @discriminatorMapping(value: "Cat", schema: "Cat") = Cat | DogDifferent

type Cat {
petType: String
cat_exclusive: String
}

type DogDifferent {
petType: String
dog_exclusive: String
}

scalar ObjMap

enum HTTPMethod {
GET
HEAD
POST
PUT
DELETE
CONNECT
OPTIONS
TRACE
PATCH
}"
`;

exports[`Schemas GitHub should generate the correct schema: GitHub 1`] = `
"schema {
query: Query
Expand Down Expand Up @@ -49651,6 +49697,8 @@ directive @oneOf on OBJECT | INTERFACE

directive @discriminator(field: String) on INTERFACE | UNION

directive @discriminatorMapping(value: String, schema: String) on INTERFACE | UNION

directive @globalOptions(sourceName: String, endpoint: String, operationHeaders: ObjMap, queryStringOptions: ObjMap, queryParams: ObjMap) on OBJECT

directive @httpOperation(path: String, operationSpecificHeaders: ObjMap, httpMethod: HTTPMethod, isBinary: Boolean, requestBaseBody: ObjMap, queryParamArgMap: ObjMap, queryStringOptionsByParam: ObjMap) on FIELD_DEFINITION
Expand Down Expand Up @@ -49692,7 +49740,7 @@ type TicketMessageGet {
Author: PersonGet @link(defaultRootType: "Mutation", defaultField: "TicketMessagesUpdateTicketMessage")
}

union PersonGet @discriminator(field: "_resolveType") = CompanyGet | UserGet
union PersonGet @discriminator(field: "_resolveType") @discriminatorMapping(value: "user", schema: "UserGet") @discriminatorMapping(value: "company", schema: "CompanyGet") = CompanyGet | UserGet

type CompanyGet {
_resolveType: company_const!
Expand Down Expand Up @@ -50342,6 +50390,8 @@ directive @example(value: ObjMap) repeatable on FIELD_DEFINITION | OBJECT | INPU

directive @discriminator(field: String) on INTERFACE | UNION

directive @discriminatorMapping(value: String, schema: String) on INTERFACE | UNION

directive @dictionary on FIELD_DEFINITION

directive @typescript(type: String) on SCALAR | ENUM
Expand Down Expand Up @@ -53360,7 +53410,7 @@ type PageBeanCustomFieldContextDefaultValue {
values: [CustomFieldContextDefaultValue]
}

union CustomFieldContextDefaultValue @discriminator(field: "type") = CustomFieldContextDefaultValueCascadingOption | CustomFieldContextDefaultValueMultipleOption | CustomFieldContextDefaultValueSingleOption | CustomFieldContextSingleUserPickerDefaults | CustomFieldContextDefaultValueMultiUserPicker | CustomFieldContextDefaultValueSingleGroupPicker | CustomFieldContextDefaultValueMultipleGroupPicker | CustomFieldContextDefaultValueDate | CustomFieldContextDefaultValueDateTime | CustomFieldContextDefaultValueURL | CustomFieldContextDefaultValueProject | CustomFieldContextDefaultValueFloat | CustomFieldContextDefaultValueLabels | CustomFieldContextDefaultValueTextField | CustomFieldContextDefaultValueTextArea | CustomFieldContextDefaultValueReadOnly | CustomFieldContextDefaultValueSingleVersionPicker | CustomFieldContextDefaultValueMultipleVersionPicker | CustomFieldContextDefaultValueForgeStringField | CustomFieldContextDefaultValueForgeMultiStringField | CustomFieldContextDefaultValueForgeObjectField | CustomFieldContextDefaultValueForgeDateTimeField | CustomFieldContextDefaultValueForgeGroupField | CustomFieldContextDefaultValueForgeMultiGroupField | CustomFieldContextDefaultValueForgeNumberField | CustomFieldContextDefaultValueForgeUserField | CustomFieldContextDefaultValueForgeMultiUserField
union CustomFieldContextDefaultValue @discriminator(field: "type") @discriminatorMapping(value: "option.cascading", schema: "CustomFieldContextDefaultValueCascadingOption") @discriminatorMapping(value: "option.multiple", schema: "CustomFieldContextDefaultValueMultipleOption") @discriminatorMapping(value: "option.single", schema: "CustomFieldContextDefaultValueSingleOption") @discriminatorMapping(value: "single.user.select", schema: "CustomFieldContextSingleUserPickerDefaults") @discriminatorMapping(value: "multi.user.select", schema: "CustomFieldContextDefaultValueMultiUserPicker") @discriminatorMapping(value: "grouppicker.single", schema: "CustomFieldContextDefaultValueSingleGroupPicker") @discriminatorMapping(value: "grouppicker.multiple", schema: "CustomFieldContextDefaultValueMultipleGroupPicker") @discriminatorMapping(value: "datepicker", schema: "CustomFieldContextDefaultValueDate") @discriminatorMapping(value: "datetimepicker", schema: "CustomFieldContextDefaultValueDateTime") @discriminatorMapping(value: "url", schema: "CustomFieldContextDefaultValueURL") @discriminatorMapping(value: "project", schema: "CustomFieldContextDefaultValueProject") @discriminatorMapping(value: "float", schema: "CustomFieldContextDefaultValueFloat") @discriminatorMapping(value: "labels", schema: "CustomFieldContextDefaultValueLabels") @discriminatorMapping(value: "textfield", schema: "CustomFieldContextDefaultValueTextField") @discriminatorMapping(value: "textarea", schema: "CustomFieldContextDefaultValueTextArea") @discriminatorMapping(value: "readonly", schema: "CustomFieldContextDefaultValueReadOnly") @discriminatorMapping(value: "version.single", schema: "CustomFieldContextDefaultValueSingleVersionPicker") @discriminatorMapping(value: "version.multiple", schema: "CustomFieldContextDefaultValueMultipleVersionPicker") @discriminatorMapping(value: "forge.string", schema: "CustomFieldContextDefaultValueForgeStringField") @discriminatorMapping(value: "forge.string.list", schema: "CustomFieldContextDefaultValueForgeMultiStringField") @discriminatorMapping(value: "forge.object", schema: "CustomFieldContextDefaultValueForgeObjectField") @discriminatorMapping(value: "forge.datetime", schema: "CustomFieldContextDefaultValueForgeDateTimeField") @discriminatorMapping(value: "forge.group", schema: "CustomFieldContextDefaultValueForgeGroupField") @discriminatorMapping(value: "forge.group.list", schema: "CustomFieldContextDefaultValueForgeMultiGroupField") @discriminatorMapping(value: "forge.number", schema: "CustomFieldContextDefaultValueForgeNumberField") @discriminatorMapping(value: "forge.user", schema: "CustomFieldContextDefaultValueForgeUserField") @discriminatorMapping(value: "forge.user.list", schema: "CustomFieldContextDefaultValueForgeMultiUserField") = CustomFieldContextDefaultValueCascadingOption | CustomFieldContextDefaultValueMultipleOption | CustomFieldContextDefaultValueSingleOption | CustomFieldContextSingleUserPickerDefaults | CustomFieldContextDefaultValueMultiUserPicker | CustomFieldContextDefaultValueSingleGroupPicker | CustomFieldContextDefaultValueMultipleGroupPicker | CustomFieldContextDefaultValueDate | CustomFieldContextDefaultValueDateTime | CustomFieldContextDefaultValueURL | CustomFieldContextDefaultValueProject | CustomFieldContextDefaultValueFloat | CustomFieldContextDefaultValueLabels | CustomFieldContextDefaultValueTextField | CustomFieldContextDefaultValueTextArea | CustomFieldContextDefaultValueReadOnly | CustomFieldContextDefaultValueSingleVersionPicker | CustomFieldContextDefaultValueMultipleVersionPicker | CustomFieldContextDefaultValueForgeStringField | CustomFieldContextDefaultValueForgeMultiStringField | CustomFieldContextDefaultValueForgeObjectField | CustomFieldContextDefaultValueForgeDateTimeField | CustomFieldContextDefaultValueForgeGroupField | CustomFieldContextDefaultValueForgeMultiGroupField | CustomFieldContextDefaultValueForgeNumberField | CustomFieldContextDefaultValueForgeUserField | CustomFieldContextDefaultValueForgeMultiUserField

"The default value for a cascading select custom field."
type CustomFieldContextDefaultValueCascadingOption {
Expand Down Expand Up @@ -56817,7 +56867,7 @@ type WorkflowRules {
}

"The workflow transition rule conditions tree."
union WorkflowCondition @discriminator(field: "nodeType") = WorkflowSimpleCondition | WorkflowCompoundCondition
union WorkflowCondition @discriminator(field: "nodeType") @discriminatorMapping(value: "simple", schema: "WorkflowSimpleCondition") @discriminatorMapping(value: "compound", schema: "WorkflowCompoundCondition") = WorkflowSimpleCondition | WorkflowCompoundCondition

"A workflow transition rule condition. This object returns \`nodeType\` as \`simple\`."
type WorkflowSimpleCondition {
Expand Down
47 changes: 47 additions & 0 deletions packages/loaders/openapi/tests/fixtures/discriminator-mapping.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
openapi: 3.0.0
info:
version: 1.0.0
title: Swagger Petstore
license:
name: MIT
paths:
/pets/{id}:
get:
parameters:
- name: id
required: true
in: path
schema:
type: string
responses:
200:
content:
application/json:
schema:
$ref: '#/components/schemas/Pet'

components:
schemas:
Pet:
oneOf:
- $ref: '#/components/schemas/Cat'
- $ref: '#/components/schemas/DogDifferent'
discriminator:
propertyName: petType
mapping:
Dog: '#/components/schemas/DogDifferent'
Cat: '#/components/schemas/Cat'
Cat:
type: object
properties:
petType:
type: string
cat_exclusive:
type: string
DogDifferent:
type: object
properties:
petType:
type: string
dog_exclusive:
type: string
1 change: 1 addition & 0 deletions packages/loaders/openapi/tests/schemas.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ const schemas: Record<string, string> = {
BlockFrost: 'blockfrost.json',
'Int64 with Defaults': 'int64-with-defaults.yml',
'Different fields with the same type': 'different-prop-same-type.yaml',
DiscriminatorMapping: 'discriminator-mapping.yml',
};

describe('Schemas', () => {
Expand Down

0 comments on commit 546cc10

Please sign in to comment.