Skip to content

Commit

Permalink
List all derived types in discriminator mapping and append `@odata.ty…
Browse files Browse the repository at this point in the history
…pe` property to all derived types (#256)

* Find all derived types; append odata.type property to all derived types

* Bump up package version and add release notes
  • Loading branch information
irvinesunday authored Jul 18, 2022
1 parent 43ad8f9 commit bf2803d
Show file tree
Hide file tree
Showing 3 changed files with 23 additions and 4 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -398,7 +398,7 @@ private static OpenApiSchema CreateStructuredTypeSchema(this ODataContext contex

if (context.Settings.EnableDiscriminatorValue && derivedTypes == null)
{
derivedTypes = context.Model.FindDirectlyDerivedTypes(structuredType);
derivedTypes = context.Model.FindAllDerivedTypes(structuredType);
}

if (processBase && structuredType.BaseType != null)
Expand Down Expand Up @@ -484,7 +484,7 @@ private static OpenApiSchema CreateStructuredTypeSchema(this ODataContext contex
AnyOf = null
};

if (schema.Discriminator != null)
if (context.Settings.EnableDiscriminatorValue)
{
if (!schema.Properties.TryAdd(Constants.OdataType, new OpenApiSchema()
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
<TargetFrameworks>netstandard2.0</TargetFrameworks>
<PackageId>Microsoft.OpenApi.OData</PackageId>
<SignAssembly>true</SignAssembly>
<Version>1.0.11-preview5</Version>
<Version>1.0.11</Version>
<Description>This package contains the codes you need to convert OData CSDL to Open API Document of Model.</Description>
<Copyright>© Microsoft Corporation. All rights reserved.</Copyright>
<PackageTags>Microsoft OpenApi OData EDM</PackageTags>
Expand All @@ -28,7 +28,9 @@
- Provides support for using success status code range 2XX #153
- Fixes request body and response representation for ref POST and PUT operations #228
- Adds discriminator object to complex types which have derived types #233
- Lists all the derived types of a type in discriminator mapping #240
- Adds @odata.type property and makes this a required property in schemas that have discriminator objects #243
- Appends `@odata.type` property to all derived types schemas #248
- Represent nullable references within anyOf correctly #190
</PackageReleaseNotes>
<AssemblyName>Microsoft.OpenApi.OData.Reader</AssemblyName>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -114,14 +114,19 @@ public void CreateStructuredTypeSchemaForEntityTypeWithDiscriminatorValueEnabled
EnableDiscriminatorValue = true,
});

string derivedType = "user";
IEdmEntityType entity = model.SchemaElements.OfType<IEdmEntityType>().First(t => t.Name == "directoryObject");
Assert.NotNull(entity); // Guard
IEdmEntityType derivedEntity = model.SchemaElements.OfType<IEdmEntityType>().First(t => t.Name == derivedType);
Assert.NotNull(entity);
Assert.NotNull(derivedEntity);

// Act
var schema = context.CreateStructuredTypeSchema(entity);
var derivedSchema = context.CreateStructuredTypeSchema(derivedEntity);
string json = schema.SerializeAsJson(OpenApiSpecVersion.OpenApi3_0);

// Assert
Assert.True(derivedSchema.AllOf.FirstOrDefault(x => derivedType.Equals(x.Title))?.Properties.ContainsKey("@odata.type"));
Assert.NotNull(json);
Assert.Equal(@"{
""allOf"": [
Expand Down Expand Up @@ -155,6 +160,18 @@ public void CreateStructuredTypeSchemaForEntityTypeWithDiscriminatorValueEnabled
""#microsoft.graph.application"": ""#/components/schemas/microsoft.graph.application"",
""#microsoft.graph.servicePrincipal"": ""#/components/schemas/microsoft.graph.servicePrincipal"",
""#microsoft.graph.policyBase"": ""#/components/schemas/microsoft.graph.policyBase"",
""#microsoft.graph.appManagementPolicy"": ""#/components/schemas/microsoft.graph.appManagementPolicy"",
""#microsoft.graph.stsPolicy"": ""#/components/schemas/microsoft.graph.stsPolicy"",
""#microsoft.graph.homeRealmDiscoveryPolicy"": ""#/components/schemas/microsoft.graph.homeRealmDiscoveryPolicy"",
""#microsoft.graph.tokenIssuancePolicy"": ""#/components/schemas/microsoft.graph.tokenIssuancePolicy"",
""#microsoft.graph.tokenLifetimePolicy"": ""#/components/schemas/microsoft.graph.tokenLifetimePolicy"",
""#microsoft.graph.claimsMappingPolicy"": ""#/components/schemas/microsoft.graph.claimsMappingPolicy"",
""#microsoft.graph.activityBasedTimeoutPolicy"": ""#/components/schemas/microsoft.graph.activityBasedTimeoutPolicy"",
""#microsoft.graph.authorizationPolicy"": ""#/components/schemas/microsoft.graph.authorizationPolicy"",
""#microsoft.graph.tenantAppManagementPolicy"": ""#/components/schemas/microsoft.graph.tenantAppManagementPolicy"",
""#microsoft.graph.permissionGrantPolicy"": ""#/components/schemas/microsoft.graph.permissionGrantPolicy"",
""#microsoft.graph.servicePrincipalCreationPolicy"": ""#/components/schemas/microsoft.graph.servicePrincipalCreationPolicy"",
""#microsoft.graph.identitySecurityDefaultsEnforcementPolicy"": ""#/components/schemas/microsoft.graph.identitySecurityDefaultsEnforcementPolicy"",
""#microsoft.graph.extensionProperty"": ""#/components/schemas/microsoft.graph.extensionProperty"",
""#microsoft.graph.endpoint"": ""#/components/schemas/microsoft.graph.endpoint"",
""#microsoft.graph.resourceSpecificPermissionGrant"": ""#/components/schemas/microsoft.graph.resourceSpecificPermissionGrant"",
Expand Down

0 comments on commit bf2803d

Please sign in to comment.