|
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.OpenApi.Models;
using Microsoft.OpenApi.Writers;
using Swashbuckle.AspNetCore.Swagger;
using Xunit.Abstractions;
namespace Microsoft.AspNetCore.Grpc.Swagger.Tests.Infrastructure;
internal static class OpenApiTestHelpers
{
public static OpenApiDocument GetOpenApiDocument<TService>(ITestOutputHelper testOutputHelper) where TService : class
{
var services = new ServiceCollection();
services.AddGrpcSwagger();
services.AddSwaggerGen(c =>
{
c.SwaggerDoc("v1", new OpenApiInfo { Title = "My API", Version = "v1" });
var filePath = Path.Combine(System.AppContext.BaseDirectory, "Microsoft.AspNetCore.Grpc.Swagger.Tests.xml");
c.IncludeXmlComments(filePath);
c.IncludeGrpcXmlComments(filePath, includeControllerXmlComments: true);
});
services.AddRouting();
services.AddLogging();
services.AddSingleton<IWebHostEnvironment, TestWebHostEnvironment>();
var serviceProvider = services.BuildServiceProvider();
var app = new ApplicationBuilder(serviceProvider);
app.UseRouting();
app.UseEndpoints(c =>
{
c.MapGrpcService<TService>();
});
var swaggerGenerator = serviceProvider.GetRequiredService<ISwaggerProvider>();
var swagger = swaggerGenerator.GetSwagger("v1");
using var outputString = new StringWriter();
swagger.SerializeAsV3(new OpenApiJsonWriter(outputString));
testOutputHelper.WriteLine(outputString.ToString());
return swagger;
}
}
|