From 4e3f6ef93459888cdff991b348fb99e59ed94863 Mon Sep 17 00:00:00 2001 From: Irvine Sunday Date: Mon, 30 May 2022 20:21:15 +0300 Subject: [PATCH 1/2] Remove conditions preventing generation of bound operations for other paths --- .../Edm/ODataPathProvider.cs | 49 +++---------------- 1 file changed, 8 insertions(+), 41 deletions(-) diff --git a/src/Microsoft.OpenApi.OData.Reader/Edm/ODataPathProvider.cs b/src/Microsoft.OpenApi.OData.Reader/Edm/ODataPathProvider.cs index 27abdd52..ecf9d939 100644 --- a/src/Microsoft.OpenApi.OData.Reader/Edm/ODataPathProvider.cs +++ b/src/Microsoft.OpenApi.OData.Reader/Edm/ODataPathProvider.cs @@ -614,29 +614,16 @@ bool filter(IEdmNavigationSource z) => foreach (var bindingEntityType in allEntitiesForOperation) { // 1. Search for corresponding navigation source path - if (AppendBoundOperationOnNavigationSourcePath(edmOperation, isCollection, bindingEntityType)) - { - continue; - } + AppendBoundOperationOnNavigationSourcePath(edmOperation, isCollection, bindingEntityType); // 2. Search for generated navigation property - if (AppendBoundOperationOnNavigationPropertyPath(edmOperation, isCollection, bindingEntityType)) - { - continue; - } + AppendBoundOperationOnNavigationPropertyPath(edmOperation, isCollection, bindingEntityType); // 3. Search for derived - if (AppendBoundOperationOnDerived(edmOperation, isCollection, bindingEntityType, convertSettings)) - { - continue; - } + AppendBoundOperationOnDerived(edmOperation, isCollection, bindingEntityType, convertSettings); // 4. Search for derived generated navigation property - if (AppendBoundOperationOnDerivedNavigationPropertyPath(edmOperation, isCollection, bindingEntityType, convertSettings)) - { - continue; - } - + AppendBoundOperationOnDerivedNavigationPropertyPath(edmOperation, isCollection, bindingEntityType, convertSettings); } } } @@ -646,10 +633,8 @@ bool filter(IEdmNavigationSource z) => ODataPathKind.DollarCount, ODataPathKind.ComplexProperty, }; - private bool AppendBoundOperationOnNavigationSourcePath(IEdmOperation edmOperation, bool isCollection, IEdmEntityType bindingEntityType) + private void AppendBoundOperationOnNavigationSourcePath(IEdmOperation edmOperation, bool isCollection, IEdmEntityType bindingEntityType) { - bool found = false; - if (_allNavigationSourcePaths.TryGetValue(bindingEntityType, out IList value)) { bool isEscapedFunction = _model.IsUrlEscapeFunction(edmOperation); @@ -676,19 +661,15 @@ secondLastPathSegment is not ODataKeySegment && ODataPath newPath = subPath.Clone(); newPath.Push(new ODataOperationSegment(edmOperation, isEscapedFunction)); AppendPath(newPath); - found = true; } } } - - return found; } private static readonly HashSet _pathKindToSkipForNavigationProperties = new () { ODataPathKind.Ref, }; - private bool AppendBoundOperationOnNavigationPropertyPath(IEdmOperation edmOperation, bool isCollection, IEdmEntityType bindingEntityType) + private void AppendBoundOperationOnNavigationPropertyPath(IEdmOperation edmOperation, bool isCollection, IEdmEntityType bindingEntityType) { - bool found = false; bool isEscapedFunction = _model.IsUrlEscapeFunction(edmOperation); if (_allNavigationPropertyPaths.TryGetValue(bindingEntityType, out IList value)) @@ -727,21 +708,16 @@ private bool AppendBoundOperationOnNavigationPropertyPath(IEdmOperation edmOpera ODataPath newPath = path.Clone(); newPath.Push(new ODataOperationSegment(edmOperation, isEscapedFunction)); AppendPath(newPath); - found = true; } } - - return found; } - private bool AppendBoundOperationOnDerived( + private void AppendBoundOperationOnDerived( IEdmOperation edmOperation, bool isCollection, IEdmEntityType bindingEntityType, OpenApiConvertSettings convertSettings) { - bool found = false; - bool isEscapedFunction = _model.IsUrlEscapeFunction(edmOperation); foreach (var baseType in bindingEntityType.FindAllBaseTypes()) { @@ -764,7 +740,6 @@ private bool AppendBoundOperationOnDerived( ODataPath newPath = new ODataPath(new ODataNavigationSourceSegment(ns), new ODataTypeCastSegment(bindingEntityType), new ODataOperationSegment(edmOperation, isEscapedFunction)); AppendPath(newPath); - found = true; } } else @@ -774,7 +749,6 @@ private bool AppendBoundOperationOnDerived( ODataPath newPath = new ODataPath(new ODataNavigationSourceSegment(ns), new ODataTypeCastSegment(bindingEntityType), new ODataOperationSegment(edmOperation, isEscapedFunction)); AppendPath(newPath); - found = true; } else { @@ -782,14 +756,11 @@ private bool AppendBoundOperationOnDerived( new ODataTypeCastSegment(bindingEntityType), new ODataOperationSegment(edmOperation, isEscapedFunction)); AppendPath(newPath); - found = true; } } } } } - - return found; } private bool HasUnsatisfiedDerivedTypeConstraint( @@ -804,13 +775,12 @@ private bool HasUnsatisfiedDerivedTypeConstraint( private IEnumerable GetDerivedTypeConstaintTypeNames(IEdmVocabularyAnnotatable annotatable) => _model.GetCollection(annotatable, "Org.OData.Validation.V1.DerivedTypeConstraint") ?? Enumerable.Empty(); - private bool AppendBoundOperationOnDerivedNavigationPropertyPath( + private void AppendBoundOperationOnDerivedNavigationPropertyPath( IEdmOperation edmOperation, bool isCollection, IEdmEntityType bindingEntityType, OpenApiConvertSettings convertSettings) { - bool found = false; bool isEscapedFunction = _model.IsUrlEscapeFunction(edmOperation); foreach (var baseType in bindingEntityType.FindAllBaseTypes()) @@ -865,12 +835,9 @@ private bool AppendBoundOperationOnDerivedNavigationPropertyPath( newPath.Push(new ODataTypeCastSegment(bindingEntityType)); newPath.Push(new ODataOperationSegment(edmOperation, isEscapedFunction)); AppendPath(newPath); - found = true; } } } - - return found; } } } From d4b7964a5edfa32bb98e0ee1298a914cdb142d21 Mon Sep 17 00:00:00 2001 From: Irvine Sunday Date: Mon, 30 May 2022 20:21:56 +0300 Subject: [PATCH 2/2] Update integration tests --- .../Edm/ODataPathProviderTests.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/Microsoft.OpenAPI.OData.Reader.Tests/Edm/ODataPathProviderTests.cs b/test/Microsoft.OpenAPI.OData.Reader.Tests/Edm/ODataPathProviderTests.cs index 0b251e66..58dcb2b8 100644 --- a/test/Microsoft.OpenAPI.OData.Reader.Tests/Edm/ODataPathProviderTests.cs +++ b/test/Microsoft.OpenAPI.OData.Reader.Tests/Edm/ODataPathProviderTests.cs @@ -51,7 +51,7 @@ public void GetPathsForGraphBetaModelReturnsAllPaths() // Assert Assert.NotNull(paths); - Assert.Equal(14624, paths.Count()); + Assert.Equal(16354, paths.Count()); } [Fact] @@ -71,7 +71,7 @@ public void GetPathsForGraphBetaModelWithDerivedTypesConstraintReturnsAllPaths() // Assert Assert.NotNull(paths); - Assert.Equal(14582, paths.Count()); + Assert.Equal(15293, paths.Count()); } [Fact]