Skip to content

Commit

Permalink
- fixes a bug where models properties named "additionalData" or "back…
Browse files Browse the repository at this point in the history
…ingstore" would be ignored

Signed-off-by: Vincent Biret <[email protected]>
  • Loading branch information
baywet committed Mar 20, 2024
1 parent 848c693 commit 470840a
Show file tree
Hide file tree
Showing 3 changed files with 79 additions and 1 deletion.
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
### Changed

- Fixed a bug where multiple Visual Studio Code instances would make the extension install/update fail. [#3686](https://github.com/microsoft/kiota/issues/3686)
- Fixed a bug where models properties named "additionalData" or "backingstore" would be ignored. [#4224](https://github.com/microsoft/kiota/issues/4224)
- PREVIEW: Renamed the config commands to workspace. [#4310](https://github.com/microsoft/kiota/issues/4310)
- PREVIEW: Moved preview configuration files to the .kiota directory. [#4310](https://github.com/microsoft/kiota/issues/4310)
- PREVIEW: Moved the copy descriptions to dedicated folders. [#4310](https://github.com/microsoft/kiota/issues/4310)
Expand Down
2 changes: 1 addition & 1 deletion src/Kiota.Builder/CodeDOM/CodeClass.cs
Original file line number Diff line number Diff line change
Expand Up @@ -167,7 +167,7 @@ private string ResolveUniquePropertyName(string name)
ArgumentException.ThrowIfNullOrEmpty(serializationName);

if (BaseClass is CodeClass currentParentClass)
if (currentParentClass.FindPropertyByWireName(serializationName) is CodeProperty currentProperty && !currentProperty.ExistsInBaseType)
if (currentParentClass.FindPropertyByWireName(serializationName) is CodeProperty currentProperty && !currentProperty.ExistsInBaseType && currentProperty.Kind is not CodePropertyKind.AdditionalData or CodePropertyKind.BackingStore)
return currentProperty;
else
return currentParentClass.GetOriginalPropertyDefinedFromBaseType(serializationName);
Expand Down
77 changes: 77 additions & 0 deletions tests/Kiota.Builder.Tests/KiotaBuilderTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -697,6 +697,83 @@ public async Task TrimsInheritanceUnusedModels()
Assert.Null(modelsNS.FindChildByName<CodeClass>("AuditEvent", false)); //unused type
}
[Fact]
public async Task DisambiguatesReservedProperties()
{
var tempFilePath = Path.Combine(Path.GetTempPath(), Path.GetTempFileName());
await using var fs = await GetDocumentStream(@"openapi: 3.0.1
info:
title: OData Service for namespace microsoft.graph
description: This OData service is located at https://graph.microsoft.com/v1.0
version: v1.0
x-ms-generated-by:
toolName: Microsoft.OpenApi.OData
toolVersion: 1.0.9.0
servers:
- url: https://graph.microsoft.com/v1.0
paths:
'/security/alerts_v2/{alert-id}':
get:
responses:
200:
content:
application/json:
schema:
$ref: '#/components/schemas/microsoft.graph.alert'
components:
schemas:
microsoft.graph.entity:
title: entity
required:
- '@odata.type'
type: object
properties:
id:
type: string
'@odata.type':
type: string
microsoft.graph.dictionary:
title: dictionary
required:
- '@odata.type'
type: object
properties:
'@odata.type':
type: string
microsoft.graph.alert:
allOf:
- $ref: '#/components/schemas/microsoft.graph.entity'
- title: alert
required:
- '@odata.type'
type: object
properties:
actorDisplayName:
type: string
nullable: true
additionalData:
anyOf:
- $ref: '#/components/schemas/microsoft.graph.dictionary'
- type: object
nullable: true");
var mockLogger = new Mock<ILogger<KiotaBuilder>>();
var builder = new KiotaBuilder(mockLogger.Object, new GenerationConfiguration { ClientClassName = "Graph", OpenAPIFilePath = tempFilePath }, _httpClient);
var document = await builder.CreateOpenApiDocumentAsync(fs);
var node = builder.CreateUriSpace(document);
var codeModel = builder.CreateSourceModel(node);
var modelsNS = codeModel.FindNamespaceByName("ApiSdk.models.microsoft.graph");
Assert.NotNull(modelsNS);
var entityClass = modelsNS.FindChildByName<CodeClass>("Entity", false);
Assert.NotNull(entityClass);
var additionalDataProperty = entityClass.FindChildByName<CodeProperty>("AdditionalData", false);
Assert.NotNull(additionalDataProperty);
Assert.True(additionalDataProperty.Kind is CodePropertyKind.AdditionalData);
var alertClass = modelsNS.FindChildByName<CodeClass>("Alert", false);
Assert.NotNull(alertClass);
var additionalDataEscapedProperty = alertClass.FindChildByName<CodeProperty>("AdditionalDataProperty", false);
Assert.NotNull(additionalDataEscapedProperty);
Assert.True(additionalDataEscapedProperty.Kind is CodePropertyKind.Custom);
}
[Fact]
public async Task TrimsInheritanceUnusedModelsWithUnion()
{
var tempFilePath = Path.Combine(Path.GetTempPath(), Path.GetTempFileName());
Expand Down

0 comments on commit 470840a

Please sign in to comment.