OpenApiDocumentIntegrationTests.cs 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. // Licensed to the .NET Foundation under one or more agreements.
  2. // The .NET Foundation licenses this file to you under the MIT license.
  3. using System.Globalization;
  4. using Microsoft.AspNetCore.InternalTesting;
  5. using Microsoft.AspNetCore.OpenApi;
  6. using Microsoft.Extensions.DependencyInjection;
  7. using Microsoft.OpenApi.Models;
  8. using Microsoft.OpenApi.Writers;
  9. [UsesVerify]
  10. public sealed class OpenApiDocumentIntegrationTests(SampleAppFixture fixture) : IClassFixture<SampleAppFixture>
  11. {
  12. [Theory]
  13. [InlineData("v1")]
  14. [InlineData("v2")]
  15. [InlineData("controllers")]
  16. [InlineData("responses")]
  17. [InlineData("forms")]
  18. [InlineData("schemas-by-ref")]
  19. public async Task VerifyOpenApiDocument(string documentName)
  20. {
  21. var documentService = fixture.Services.GetRequiredKeyedService<OpenApiDocumentService>(documentName);
  22. var scopedServiceProvider = fixture.Services.CreateScope();
  23. var document = await documentService.GetOpenApiDocumentAsync(scopedServiceProvider.ServiceProvider);
  24. await Verifier.Verify(GetOpenApiJson(document))
  25. .UseDirectory(SkipOnHelixAttribute.OnHelix()
  26. ? Path.Combine(Environment.GetEnvironmentVariable("HELIX_WORKITEM_ROOT"), "Integration", "snapshots")
  27. : "snapshots")
  28. .UseParameters(documentName);
  29. }
  30. private static string GetOpenApiJson(OpenApiDocument document)
  31. {
  32. using var textWriter = new StringWriter(CultureInfo.InvariantCulture);
  33. var jsonWriter = new OpenApiJsonWriter(textWriter);
  34. document.SerializeAsV3(jsonWriter);
  35. return textWriter.ToString();
  36. }
  37. }