Skip to content

Commit bf2803d

Browse files
authored
List all derived types in discriminator mapping and append @odata.type 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
1 parent 43ad8f9 commit bf2803d

File tree

3 files changed

+23
-4
lines changed

3 files changed

+23
-4
lines changed

src/Microsoft.OpenApi.OData.Reader/Generator/OpenApiSchemaGenerator.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -398,7 +398,7 @@ private static OpenApiSchema CreateStructuredTypeSchema(this ODataContext contex
398398

399399
if (context.Settings.EnableDiscriminatorValue && derivedTypes == null)
400400
{
401-
derivedTypes = context.Model.FindDirectlyDerivedTypes(structuredType);
401+
derivedTypes = context.Model.FindAllDerivedTypes(structuredType);
402402
}
403403

404404
if (processBase && structuredType.BaseType != null)
@@ -484,7 +484,7 @@ private static OpenApiSchema CreateStructuredTypeSchema(this ODataContext contex
484484
AnyOf = null
485485
};
486486

487-
if (schema.Discriminator != null)
487+
if (context.Settings.EnableDiscriminatorValue)
488488
{
489489
if (!schema.Properties.TryAdd(Constants.OdataType, new OpenApiSchema()
490490
{

src/Microsoft.OpenApi.OData.Reader/Microsoft.OpenAPI.OData.Reader.csproj

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
<TargetFrameworks>netstandard2.0</TargetFrameworks>
1616
<PackageId>Microsoft.OpenApi.OData</PackageId>
1717
<SignAssembly>true</SignAssembly>
18-
<Version>1.0.11-preview5</Version>
18+
<Version>1.0.11</Version>
1919
<Description>This package contains the codes you need to convert OData CSDL to Open API Document of Model.</Description>
2020
<Copyright>© Microsoft Corporation. All rights reserved.</Copyright>
2121
<PackageTags>Microsoft OpenApi OData EDM</PackageTags>
@@ -28,7 +28,9 @@
2828
- Provides support for using success status code range 2XX #153
2929
- Fixes request body and response representation for ref POST and PUT operations #228
3030
- Adds discriminator object to complex types which have derived types #233
31+
- Lists all the derived types of a type in discriminator mapping #240
3132
- Adds @odata.type property and makes this a required property in schemas that have discriminator objects #243
33+
- Appends `@odata.type` property to all derived types schemas #248
3234
- Represent nullable references within anyOf correctly #190
3335
</PackageReleaseNotes>
3436
<AssemblyName>Microsoft.OpenApi.OData.Reader</AssemblyName>

test/Microsoft.OpenAPI.OData.Reader.Tests/Generator/OpenApiSchemaGeneratorTests.cs

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -114,14 +114,19 @@ public void CreateStructuredTypeSchemaForEntityTypeWithDiscriminatorValueEnabled
114114
EnableDiscriminatorValue = true,
115115
});
116116

117+
string derivedType = "user";
117118
IEdmEntityType entity = model.SchemaElements.OfType<IEdmEntityType>().First(t => t.Name == "directoryObject");
118-
Assert.NotNull(entity); // Guard
119+
IEdmEntityType derivedEntity = model.SchemaElements.OfType<IEdmEntityType>().First(t => t.Name == derivedType);
120+
Assert.NotNull(entity);
121+
Assert.NotNull(derivedEntity);
119122

120123
// Act
121124
var schema = context.CreateStructuredTypeSchema(entity);
125+
var derivedSchema = context.CreateStructuredTypeSchema(derivedEntity);
122126
string json = schema.SerializeAsJson(OpenApiSpecVersion.OpenApi3_0);
123127

124128
// Assert
129+
Assert.True(derivedSchema.AllOf.FirstOrDefault(x => derivedType.Equals(x.Title))?.Properties.ContainsKey("@odata.type"));
125130
Assert.NotNull(json);
126131
Assert.Equal(@"{
127132
""allOf"": [
@@ -155,6 +160,18 @@ public void CreateStructuredTypeSchemaForEntityTypeWithDiscriminatorValueEnabled
155160
""#microsoft.graph.application"": ""#/components/schemas/microsoft.graph.application"",
156161
""#microsoft.graph.servicePrincipal"": ""#/components/schemas/microsoft.graph.servicePrincipal"",
157162
""#microsoft.graph.policyBase"": ""#/components/schemas/microsoft.graph.policyBase"",
163+
""#microsoft.graph.appManagementPolicy"": ""#/components/schemas/microsoft.graph.appManagementPolicy"",
164+
""#microsoft.graph.stsPolicy"": ""#/components/schemas/microsoft.graph.stsPolicy"",
165+
""#microsoft.graph.homeRealmDiscoveryPolicy"": ""#/components/schemas/microsoft.graph.homeRealmDiscoveryPolicy"",
166+
""#microsoft.graph.tokenIssuancePolicy"": ""#/components/schemas/microsoft.graph.tokenIssuancePolicy"",
167+
""#microsoft.graph.tokenLifetimePolicy"": ""#/components/schemas/microsoft.graph.tokenLifetimePolicy"",
168+
""#microsoft.graph.claimsMappingPolicy"": ""#/components/schemas/microsoft.graph.claimsMappingPolicy"",
169+
""#microsoft.graph.activityBasedTimeoutPolicy"": ""#/components/schemas/microsoft.graph.activityBasedTimeoutPolicy"",
170+
""#microsoft.graph.authorizationPolicy"": ""#/components/schemas/microsoft.graph.authorizationPolicy"",
171+
""#microsoft.graph.tenantAppManagementPolicy"": ""#/components/schemas/microsoft.graph.tenantAppManagementPolicy"",
172+
""#microsoft.graph.permissionGrantPolicy"": ""#/components/schemas/microsoft.graph.permissionGrantPolicy"",
173+
""#microsoft.graph.servicePrincipalCreationPolicy"": ""#/components/schemas/microsoft.graph.servicePrincipalCreationPolicy"",
174+
""#microsoft.graph.identitySecurityDefaultsEnforcementPolicy"": ""#/components/schemas/microsoft.graph.identitySecurityDefaultsEnforcementPolicy"",
158175
""#microsoft.graph.extensionProperty"": ""#/components/schemas/microsoft.graph.extensionProperty"",
159176
""#microsoft.graph.endpoint"": ""#/components/schemas/microsoft.graph.endpoint"",
160177
""#microsoft.graph.resourceSpecificPermissionGrant"": ""#/components/schemas/microsoft.graph.resourceSpecificPermissionGrant"",

0 commit comments

Comments
 (0)