public async Task SwaggerEndpoint_ReturnsCorrectPriceExample_ForDifferentCultures(string culture) { var testSite = new TestSite(typeof(Basic.Startup)); var client = testSite.BuildClient(); var swaggerResponse = await client.GetAsync($"/swagger/v1/swagger.json?culture={culture}"); swaggerResponse.EnsureSuccessStatusCode(); var contentStream = await swaggerResponse.Content.ReadAsStreamAsync(); var currentCulture = CultureInfo.CurrentCulture; CultureInfo.CurrentCulture = CultureInfo.InvariantCulture; try { var openApiDocument = new OpenApiStreamReader().Read(contentStream, out OpenApiDiagnostic diagnostic); var example = openApiDocument.Components.Schemas["Product"].Example as OpenApiObject; var price = (example["price"] as OpenApiDouble); Assert.NotNull(price); Assert.Equal(14.37, price.Value); } finally { CultureInfo.CurrentCulture = currentCulture; } }
public async Task SwaggerEndpoint_ReturnsNotFound_IfUnknownSwaggerDocument() { var testSite = new TestSite(typeof(Basic.Startup)); var client = testSite.BuildClient(); var swaggerResponse = await client.GetAsync("/swagger/v2/swagger.json"); Assert.Equal(System.Net.HttpStatusCode.NotFound, swaggerResponse.StatusCode); }
public async Task SwaggerEndpoint_ReturnsValidSwaggerJson( Type startupType, string swaggerRequestUri) { var testSite = new TestSite(startupType); var client = testSite.BuildClient(); var swaggerResponse = await client.GetAsync(swaggerRequestUri); swaggerResponse.EnsureSuccessStatusCode(); await AssertResponseDoesNotContainByteOrderMark(swaggerResponse); await AssertValidSwaggerAsync(swaggerResponse); }
public async Task SwaggerEndpoint_DoesNotReturnByteOrderMark() { var testSite = new TestSite(typeof(Basic.Startup)); var client = testSite.BuildClient(); var swaggerResponse = await client.GetAsync("/swagger/v1/swagger.json"); swaggerResponse.EnsureSuccessStatusCode(); var contentBytes = await swaggerResponse.Content.ReadAsByteArrayAsync(); var bomBytes = Encoding.UTF8.GetPreamble(); Assert.NotEqual(bomBytes, contentBytes.Take(bomBytes.Length)); }
public async Task SwaggerEndpoint_ReturnsValidSwaggerJson( Type startupType, string swaggerRequestUri) { var testSite = new TestSite(startupType); var client = testSite.BuildClient(); var swaggerResponse = await client.GetAsync(swaggerRequestUri); swaggerResponse.EnsureSuccessStatusCode(); var contentStream = await swaggerResponse.Content.ReadAsStreamAsync(); new OpenApiStreamReader().Read(contentStream, out OpenApiDiagnostic diagnostic); Assert.Empty(diagnostic.Errors); }
public async Task SwaggerEndpoint_ReturnsValidSwaggerOpenApiExamplesSchema() { var testSite = new TestSite(typeof(Basic.Startup)); var client = testSite.BuildClient(); var swaggerResponse = await client.GetAsync("/swagger/v1/swagger.json"); var contentStream = await swaggerResponse.Content.ReadAsStreamAsync(); var openApiDocument = new OpenApiStreamReader().Read(contentStream, out OpenApiDiagnostic diagnostic); openApiDocument.Components.Schemas["Product"] .Example.Should() .BeEquivalentTo(Basic.Swagger.ExamplesSchemaFilter.Schemas["Product"]); }
public async Task SwaggerEndpoint_InfersServerMetadataFromReverseProxyHeaders_IfPresent( string xForwardedFor, string xForwardedHost, string xForwardedProto, string xForwardedPort, string xForwardedPrefix, string expectedServerUrl) { var testSite = new TestSite(typeof(Basic.Startup)); var client = testSite.BuildClient(); if (xForwardedFor != null) { client.DefaultRequestHeaders.Add("X-Forwarded-For", xForwardedFor); } if (xForwardedHost != null) { client.DefaultRequestHeaders.Add("X-Forwarded-Host", xForwardedHost); } if (xForwardedProto != null) { client.DefaultRequestHeaders.Add("X-Forwarded-Proto", xForwardedProto); } if (xForwardedPort != null) { client.DefaultRequestHeaders.Add("X-Forwarded-Port", xForwardedPort); } if (xForwardedPrefix != null) { client.DefaultRequestHeaders.Add("X-Forwarded-Prefix", xForwardedPrefix); } var swaggerResponse = await client.GetAsync("/swagger/v1/swagger.json"); var contentStream = await swaggerResponse.Content.ReadAsStreamAsync(); var openApiDocument = new OpenApiStreamReader().Read(contentStream, out _); Assert.NotNull(openApiDocument.Servers); Assert.NotEmpty(openApiDocument.Servers); Assert.Equal(expectedServerUrl, openApiDocument.Servers[0].Url); }
public async Task SwaggerEndpoint_ReturnsValidSwaggerJson( Type startupType, string swaggerRequestUri) { var testSite = new TestSite(startupType); var client = testSite.BuildClient(); var swaggerResponse = await client.GetAsync(swaggerRequestUri); swaggerResponse.EnsureSuccessStatusCode(); // NOTE: the online swagger validator INCORRECTLY returns an error for the Swagger generated // by the "Basic" sample Website. As a temporary workaround, bypass the valid swagger assertion if (startupType == typeof(Basic.Startup)) { return; } await AssertValidSwaggerAsync(swaggerResponse); }