Skip to content

Commit 816d30f

Browse files
Include correct list of discriminator information (#222)
* Retrieve list of derived types for structured types * Update tests for creating structured type schema with discriminator * Simplify how mapping property of dicriminator object is computed * Update release notes Co-authored-by: Irvine Sunday <[email protected]>
1 parent 04422bf commit 816d30f

File tree

3 files changed

+30
-35
lines changed

3 files changed

+30
-35
lines changed

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

Lines changed: 10 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -436,23 +436,21 @@ private static OpenApiSchema CreateStructuredTypeSchema(this ODataContext contex
436436
// The discriminator object is added to structured types which have derived types.
437437
OpenApiDiscriminator discriminator = null;
438438
if (context.Settings.EnableDiscriminatorValue && derivedTypes.Any() && structuredType.BaseType != null)
439-
{
440-
string v3RefIdentifier = new OpenApiSchema
441-
{
442-
Reference = new OpenApiReference
439+
{
440+
Dictionary<string, string> mapping = derivedTypes
441+
.ToDictionary(x => $"#{x.FullTypeName()}", x => new OpenApiSchema
443442
{
444-
Type = ReferenceType.Schema,
445-
Id = structuredType.FullTypeName()
446-
}
447-
}.Reference.ReferenceV3;
443+
Reference = new OpenApiReference
444+
{
445+
Type = ReferenceType.Schema,
446+
Id = x.FullTypeName()
447+
}
448+
}.Reference.ReferenceV3);
448449

449450
discriminator = new OpenApiDiscriminator
450451
{
451452
PropertyName = "@odata.type",
452-
Mapping = new Dictionary<string, string>
453-
{
454-
{"#" + structuredType.FullTypeName(), v3RefIdentifier }
455-
}
453+
Mapping = mapping
456454
};
457455
}
458456

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

Lines changed: 3 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -15,33 +15,14 @@
1515
<TargetFrameworks>netstandard2.0</TargetFrameworks>
1616
<PackageId>Microsoft.OpenApi.OData</PackageId>
1717
<SignAssembly>true</SignAssembly>
18-
<Version>1.0.10</Version>
18+
<Version>1.0.11-preview1</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>
2222
<RepositoryUrl>https://github.com/Microsoft/OpenAPI.NET.OData</RepositoryUrl>
2323
<PackageReleaseNotes>
24-
- Adds support for reading custom attributes #192
25-
- Adds support for OpenApiLinks for actions and functions #74
26-
- Maps operation summaries to operation descriptions and CSDL description annotations to operation LongDescription #206
27-
- Fixes the response type of functions returning Edm.Stream to use application/octet-stream #200
28-
- Fixes the generation of ODataTypeCast paths #199
29-
- Adds path items for properties of complex type. #176, #15
30-
- Describes errors on error response codes instead of default. #172, #165, #193
31-
- Fixes a bug where reference objects are not created correctly. #171
32-
- Adds support for enum values descriptions. #164
33-
- Declares path parameters on path item instead of operation. #159
34-
- Multiple fixes on navigation properties path items expansion. #151, #123
35-
- Multiple fixes for descriptions. #154
36-
- Fixes a bug where URL templates would be missing quotes for string parameters. #140
37-
- Fixes description of operations of primitive types. #126
38-
- Adds support for OData cast segments in path items generation. #123
39-
- Fixes the response descriptions for functions that return a collection. #122
40-
- Fixes structured and collection-valued parameters of functions. #203
41-
- Adds support for discriminator property in inheritance. #118
42-
- Sets deprecated for operations that are generated from deprecated types/singletons/entitysets/properties in the model. #113
43-
- Aligns target version to netframework2.0. #139
44-
</PackageReleaseNotes>
24+
- Adds list of all derived types for discriminator mapping #219
25+
</PackageReleaseNotes>
4526
<AssemblyName>Microsoft.OpenApi.OData.Reader</AssemblyName>
4627
<AssemblyOriginatorKeyFile>..\..\tool\Microsoft.OpenApi.OData.snk</AssemblyOriginatorKeyFile>
4728
<OutputPath Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">..\..\bin\Debug\</OutputPath>

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

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,23 @@ public void CreateStructuredTypeSchemaWithDiscriminatorValueEnabledReturnsCorrec
118118
""discriminator"": {
119119
""propertyName"": ""@odata.type"",
120120
""mapping"": {
121-
""#microsoft.graph.directoryObject"": ""#/components/schemas/microsoft.graph.directoryObject""
121+
""#microsoft.graph.user"": ""#/components/schemas/microsoft.graph.user"",
122+
""#microsoft.graph.group"": ""#/components/schemas/microsoft.graph.group"",
123+
""#microsoft.graph.device"": ""#/components/schemas/microsoft.graph.device"",
124+
""#microsoft.graph.application"": ""#/components/schemas/microsoft.graph.application"",
125+
""#microsoft.graph.servicePrincipal"": ""#/components/schemas/microsoft.graph.servicePrincipal"",
126+
""#microsoft.graph.policyBase"": ""#/components/schemas/microsoft.graph.policyBase"",
127+
""#microsoft.graph.extensionProperty"": ""#/components/schemas/microsoft.graph.extensionProperty"",
128+
""#microsoft.graph.endpoint"": ""#/components/schemas/microsoft.graph.endpoint"",
129+
""#microsoft.graph.resourceSpecificPermissionGrant"": ""#/components/schemas/microsoft.graph.resourceSpecificPermissionGrant"",
130+
""#microsoft.graph.administrativeUnit"": ""#/components/schemas/microsoft.graph.administrativeUnit"",
131+
""#microsoft.graph.contract"": ""#/components/schemas/microsoft.graph.contract"",
132+
""#microsoft.graph.directoryObjectPartnerReference"": ""#/components/schemas/microsoft.graph.directoryObjectPartnerReference"",
133+
""#microsoft.graph.directoryRole"": ""#/components/schemas/microsoft.graph.directoryRole"",
134+
""#microsoft.graph.directoryRoleTemplate"": ""#/components/schemas/microsoft.graph.directoryRoleTemplate"",
135+
""#microsoft.graph.directorySettingTemplate"": ""#/components/schemas/microsoft.graph.directorySettingTemplate"",
136+
""#microsoft.graph.organization"": ""#/components/schemas/microsoft.graph.organization"",
137+
""#microsoft.graph.orgContact"": ""#/components/schemas/microsoft.graph.orgContact""
122138
}
123139
}
124140
}

0 commit comments

Comments
 (0)