// ------------------------------------------------------------ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License (MIT). See LICENSE in the repo root for license information. // ------------------------------------------------------------ using System.Collections.Generic; using System.IO; using System.Xml; using Microsoft.OData.Edm; using Microsoft.OData.Edm.Csdl; using Microsoft.OData.Edm.Validation; using Microsoft.OpenApi.Extensions; using Microsoft.OpenApi.Models; using Microsoft.OpenApi.OData.Edm; using Microsoft.OpenApi.OData.Generator; using Xunit; namespace Microsoft.OpenApi.OData.Tests { public class OpenApiSecuritySchemeGeneratorTest { [Fact] public void CreateSecuritySchemesWorksForAuthorizationsOnEntitySetContainer() { // Arrange ODataContext context = new ODataContext(GetEdmModel()); // Act var schemes = context.CreateSecuritySchemes(); // Assert Assert.NotNull(schemes); Assert.NotEmpty(schemes); Assert.Equal(new[] { "OAuth2ClientCredentials Name", "Http Name" }, schemes.Keys); var scheme = schemes["OAuth2ClientCredentials Name"]; Assert.Equal(SecuritySchemeType.OAuth2, scheme.Type); Assert.NotNull(scheme.Flows.ClientCredentials); Assert.Equal("http://TokenUrl", scheme.Flows.ClientCredentials.TokenUrl.OriginalString); Assert.Equal("http://RefreshUrl", scheme.Flows.ClientCredentials.RefreshUrl.OriginalString); Assert.Equal("OAuth2ClientCredentials Description", scheme.Description); string json = scheme.SerializeAsJson(OpenApiSpecVersion.OpenApi3_0); Assert.Equal(@"{ ""type"": ""oauth2"", ""description"": ""OAuth2ClientCredentials Description"", ""flows"": { ""clientCredentials"": { ""tokenUrl"": ""http://tokenurl/"", ""refreshUrl"": ""http://refreshurl/"", ""scopes"": { ""Scope1"": ""Description 1"" } } } }".ChangeLineBreaks(), json); scheme = schemes["Http Name"]; Assert.Equal(SecuritySchemeType.Http, scheme.Type); json = scheme.SerializeAsJson(OpenApiSpecVersion.OpenApi3_0); Assert.Equal(@"{ ""type"": ""http"", ""description"": ""Http Description"", ""scheme"": ""Http Scheme"", ""bearerFormat"": ""Http BearerFormat"" }".ChangeLineBreaks(), json); } 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; } } }