@@ -131,6 +131,70 @@ public void CreateNavigationGetOperationViaComposableFunctionReturnsCorrectOpera
131131 Assert . Contains ( operation . Parameters , x => x . Name == "path" ) ;
132132 }
133133
134+ [ Fact ]
135+ public void CreateNavigationGetOperationViaOverloadedComposableFunctionReturnsCorrectOperation ( )
136+ {
137+ // Arrange
138+ IEdmModel model = EdmModelHelper . GraphBetaModel ;
139+ ODataContext context = new ( model , new OpenApiConvertSettings ( )
140+ {
141+ EnableOperationId = true
142+ } ) ;
143+
144+ IEdmEntitySet drives = model . EntityContainer . FindEntitySet ( "drives" ) ;
145+ IEdmEntityType drive = model . SchemaElements . OfType < IEdmEntityType > ( ) . First ( c => c . Name == "drive" ) ;
146+ IEdmNavigationProperty items = drive . DeclaredNavigationProperties ( ) . First ( c => c . Name == "items" ) ;
147+ IEdmEntityType driveItem = model . SchemaElements . OfType < IEdmEntityType > ( ) . First ( c => c . Name == "driveItem" ) ;
148+ IEdmNavigationProperty workbook = driveItem . DeclaredNavigationProperties ( ) . First ( c => c . Name == "workbook" ) ;
149+ IEdmEntityType workbookEntity = model . SchemaElements . OfType < IEdmEntityType > ( ) . First ( c => c . Name == "workbook" ) ;
150+ IEdmNavigationProperty worksheets = workbookEntity . DeclaredNavigationProperties ( ) . First ( c => c . Name == "worksheets" ) ;
151+ IEdmEntityType workbookWorksheet = model . SchemaElements . OfType < IEdmEntityType > ( ) . First ( c => c . Name == "workbookWorksheet" ) ;
152+ IEdmOperation usedRangeWithParams = model . SchemaElements . OfType < IEdmOperation > ( ) . First ( f => f . Name == "usedRange" && f . Parameters . Any ( x => x . Name . Equals ( "valuesOnly" ) ) ) ;
153+ IEdmOperation usedRange = model . SchemaElements . OfType < IEdmOperation > ( ) . First ( f => f . Name == "usedRange" && f . Parameters . Count ( ) == 1 ) ;
154+ IEdmEntityType workbookRange = model . SchemaElements . OfType < IEdmEntityType > ( ) . First ( c => c . Name == "workbookRange" ) ;
155+ IEdmNavigationProperty format = workbookRange . DeclaredNavigationProperties ( ) . First ( c => c . Name == "format" ) ;
156+
157+
158+ ODataPath path1 = new ( new ODataNavigationSourceSegment ( drives ) ,
159+ new ODataKeySegment ( drive ) ,
160+ new ODataNavigationPropertySegment ( items ) ,
161+ new ODataKeySegment ( driveItem ) ,
162+ new ODataNavigationPropertySegment ( workbook ) ,
163+ new ODataNavigationPropertySegment ( worksheets ) ,
164+ new ODataKeySegment ( workbookWorksheet ) ,
165+ new ODataOperationSegment ( usedRangeWithParams ) ,
166+ new ODataNavigationPropertySegment ( format ) ) ;
167+
168+ ODataPath path2 = new ( new ODataNavigationSourceSegment ( drives ) ,
169+ new ODataKeySegment ( drive ) ,
170+ new ODataNavigationPropertySegment ( items ) ,
171+ new ODataKeySegment ( driveItem ) ,
172+ new ODataNavigationPropertySegment ( workbook ) ,
173+ new ODataNavigationPropertySegment ( worksheets ) ,
174+ new ODataKeySegment ( workbookWorksheet ) ,
175+ new ODataOperationSegment ( usedRange ) ,
176+ new ODataNavigationPropertySegment ( format ) ) ;
177+
178+ // Act
179+ var operation1 = _operationHandler . CreateOperation ( context , path1 ) ;
180+ var operation2 = _operationHandler . CreateOperation ( context , path2 ) ;
181+
182+ // Assert
183+ Assert . NotNull ( operation1 ) ;
184+ Assert . NotNull ( operation2 ) ;
185+
186+ Assert . Equal ( "drives.items.workbook.worksheets.usedRange.GetFormat-206d" , operation1 . OperationId ) ;
187+ Assert . Equal ( "drives.items.workbook.worksheets.usedRange.GetFormat-ec2c" , operation2 . OperationId ) ;
188+
189+ Assert . NotNull ( operation1 . Parameters ) ;
190+ Assert . Equal ( 6 , operation1 . Parameters . Count ) ;
191+ Assert . Contains ( operation1 . Parameters , x => x . Name == "valuesOnly" ) ;
192+
193+ Assert . NotNull ( operation2 . Parameters ) ;
194+ Assert . Equal ( 5 , operation2 . Parameters . Count ) ;
195+ Assert . DoesNotContain ( operation2 . Parameters , x => x . Name == "valuesOnly" ) ;
196+ }
197+
134198 [ Theory ]
135199 [ InlineData ( true ) ]
136200 [ InlineData ( false ) ]
0 commit comments