// ------------------------------------------------------------ // 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.OData.Edm.Vocabularies; using Microsoft.OpenApi.OData.Authorizations; using Xunit; namespace Microsoft.OpenApi.OData.Reader.Authorizations.Tests { public class AuthorizationProviderTests { [Fact] public void CtroThrowArgumentNullModel() { // Arrange & Act & Assert Assert.Throws("model", () => new AuthorizationProvider(model: null)); } [Fact] public void GetAuthorizationsThrowArgumentNullTarget() { // Arrange & Act & Assert Assert.Throws("target", () => new AuthorizationProvider(EdmCoreModel.Instance).GetAuthorizations(target: null)); } [Fact] public void GetAuthorizationsReturnsNullForTargetWithoutAuthorization() { // Arrange EdmModel model = new EdmModel(); EdmEntityContainer container = new EdmEntityContainer("NS", "Container"); model.AddElement(container); AuthorizationProvider provider = new AuthorizationProvider(model); // Act & Assert var authorizations = provider.GetAuthorizations(container); // Assert Assert.Empty(authorizations); } [Theory] [InlineData("Entities")] [InlineData("Me")] public void GetAuthorizationsReturnsForEdmModelNavigationSourceWithAuthroizations(string name) { // Arrange IEdmModel model = GetEdmModel(); IEdmNavigationSource navigationSource = model.FindDeclaredNavigationSource(name); Assert.NotNull(navigationSource); AuthorizationProvider provider = new AuthorizationProvider(model); // Act var authorizations = provider.GetAuthorizations(navigationSource as IEdmVocabularyAnnotatable); // Assert Assert.NotEmpty(authorizations); Assert.Equal(2, authorizations.Count()); Assert.IsType(authorizations.First()); Assert.IsType(authorizations.Last()); } private static IEdmModel GetEdmModel() { const string schema = @" "; IEdmModel parsedModel; IEnumerable errors; bool parsed = SchemaReader.TryParse(new XmlReader[] { XmlReader.Create(new StringReader(schema)) }, out parsedModel, out errors); Assert.True(parsed); return parsedModel; } } }