// ------------------------------------------------------------ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License (MIT). See LICENSE in the repo root for license information. // ------------------------------------------------------------ using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Xml; using Microsoft.OData.Edm; using Microsoft.OData.Edm.Csdl; using Microsoft.OData.Edm.Validation; using Microsoft.OpenApi.OData.Tests; using Xunit; namespace Microsoft.OpenApi.OData.Edm.Tests { public class ODataPathProviderTests { [Fact] public void GetPathsForEmptyEdmModelReturnsEmptyPaths() { // Arrange IEdmModel model = new EdmModel(); ODataPathProvider provider = new ODataPathProvider(); // Act var paths = provider.GetPaths(model); // Assert Assert.NotNull(paths); Assert.Empty(paths); } [Fact] public void GetPathsForGraphBetaModelReturnsAllPaths() { // Arrange IEdmModel model = EdmModelHelper.GraphBetaModel; ODataPathProvider provider = new ODataPathProvider(); // Act var paths = provider.GetPaths(model); // Assert Assert.NotNull(paths); Assert.Equal(4399, paths.Count()); } [Fact] public void GetPathsForSingleEntitySetWorks() { // Arrange IEdmModel model = GetEdmModel("", ""); ODataPathProvider provider = new ODataPathProvider(); // Act var paths = provider.GetPaths(model); // Assert Assert.NotNull(paths); Assert.Equal(2, paths.Count()); Assert.Equal(new[] { "/Customers", "/Customers({ID})" }, paths.Select(p => p.GetPathItemName())); } [Fact] public void GetPathsWithSingletonWorks() { // Arrange IEdmModel model = GetEdmModel("", @""); ODataPathProvider provider = new ODataPathProvider(); // Act var paths = provider.GetPaths(model); // Assert Assert.NotNull(paths); Assert.Equal(3, paths.Count()); Assert.Contains("/Me", paths.Select(p => p.GetPathItemName())); } [Fact] public void GetPathsWithBoundFunctionOperationWorks() { // Arrange string boundFunction = @" "; IEdmModel model = GetEdmModel(boundFunction, ""); ODataPathProvider provider = new ODataPathProvider(); // Act var paths = provider.GetPaths(model); // Assert Assert.NotNull(paths); Assert.Equal(3, paths.Count()); Assert.Contains("/Customers/NS.delta()", paths.Select(p => p.GetPathItemName())); } [Fact] public void GetPathsWithBoundActionOperationWorks() { // Arrange string boundAction = @" "; IEdmModel model = GetEdmModel(boundAction, ""); ODataPathProvider provider = new ODataPathProvider(); // Act var paths = provider.GetPaths(model); // Assert Assert.NotNull(paths); Assert.Equal(3, paths.Count()); Assert.Contains("/Customers({ID})/NS.renew", paths.Select(p => p.GetPathItemName())); } [Fact] public void GetPathsWithUnboundOperationImportWorks() { // Arrange string boundAction = @" "; string unbounds = @" "; IEdmModel model = GetEdmModel(boundAction, unbounds); ODataPathProvider provider = new ODataPathProvider(); // Act var paths = provider.GetPaths(model); // Assert Assert.NotNull(paths); Assert.Equal(4, paths.Count()); Assert.Contains("/GetNearestCustomers()", paths.Select(p => p.GetPathItemName())); Assert.Contains("/ResetDataSource", paths.Select(p => p.GetPathItemName())); } [Fact] public void GetPathsWithNavigationPropertytWorks() { // Arrange string entityType = @" "; string entitySet = @""; IEdmModel model = GetEdmModel(entityType, entitySet); ODataPathProvider provider = new ODataPathProvider(); // Act var paths = provider.GetPaths(model); // Assert Assert.NotNull(paths); Assert.Equal(7, paths.Count()); Assert.Contains("/Orders({id})/MultipleCustomers", paths.Select(p => p.GetPathItemName())); Assert.Contains("/Orders({id})/MultipleCustomers({ID})", paths.Select(p => p.GetPathItemName())); Assert.Contains("/Orders({id})/SingleCustomers", paths.Select(p => p.GetPathItemName())); } private static IEdmModel GetEdmModel(string schemaElement, string containerElement) { string template = @" {0} {1} "; string schema = String.Format(template, schemaElement, containerElement); IEdmModel parsedModel; IEnumerable errors; bool parsed = SchemaReader.TryParse(new XmlReader[] { XmlReader.Create(new StringReader(schema)) }, out parsedModel, out errors); Assert.True(parsed); return parsedModel; } } }