public async Task IndexUrl_ReturnsEmbeddedVersionOfTheReDocUI() { var client = new TestSite(typeof(ReDocApp.Startup)).BuildClient(); var indexResponse = await client.GetAsync("/api-docs/index.html"); var jsResponse = await client.GetAsync("/api-docs/redoc.standalone.js"); var indexContent = await indexResponse.Content.ReadAsStringAsync(); Assert.Contains("Redoc.init", indexContent); Assert.Equal(HttpStatusCode.OK, jsResponse.StatusCode); }
public async Task IndexUrl_ReturnsEmbeddedVersionOfTheSwaggerUI() { var client = new TestSite(typeof(Basic.Startup)).BuildClient(); var indexResponse = await client.GetAsync("/index.html"); // Basic is configured to serve UI at root var jsResponse = await client.GetAsync("/swagger-ui.js"); var cssResponse = await client.GetAsync("/swagger-ui.css"); var indexContent = await indexResponse.Content.ReadAsStringAsync(); Assert.Contains("SwaggerUIBundle", indexContent); Assert.Equal(HttpStatusCode.OK, jsResponse.StatusCode); Assert.Equal(HttpStatusCode.OK, cssResponse.StatusCode); }
public async Task RoutePrefix_RedirectsSubAppRelativeIndexUrl() { var client = new TestSite(typeof(SubApp.Startup)).BuildClient(); var response = await client.GetAsync("/subapp"); Assert.Equal(HttpStatusCode.MovedPermanently, response.StatusCode); Assert.Equal("subapp/index.html", response.Headers.Location.ToString()); }
public async Task SwaggerUIIndex_RedirectsToTrailingSlash_IfNotProvided() { var client = new TestSite(typeof(CustomUIConfig.Startup)).BuildClient(); var response = await client.GetAsync("/swagger"); Assert.Equal(HttpStatusCode.MovedPermanently, response.StatusCode); Assert.Equal("swagger/", response.Headers.Location.ToString()); }
public async Task RoutePrefix_RedirectsToIndexUrl() { var client = new TestSite(typeof(CustomUIConfig.Startup)).BuildClient(); var response = await client.GetAsync("/swagger"); Assert.Equal(HttpStatusCode.MovedPermanently, response.StatusCode); Assert.Equal("http://localhost/swagger/index.html", response.Headers.Location.ToString()); }
public async Task SwaggerUIIndex_ServesCustomIndexHtml_IfConfigured() { var client = new TestSite(typeof(CustomUIIndex.Startup)).BuildClient(); var response = await client.GetAsync("/swagger/"); var content = await response.Content.ReadAsStringAsync(); Assert.Contains("Topbar", content); }
public async Task IndexUrl_ReturnsCustomIndexHtml_IfConfigured() { var client = new TestSite(typeof(CustomUIIndex.Startup)).BuildClient(); var response = await client.GetAsync("/swagger/index.html"); var content = await response.Content.ReadAsStringAsync(); Assert.Contains("Example.com", content); }
public async Task SwaggerUIIndex_PageTitleChanged_IfConfigured() { var client = new TestSite(typeof(CustomUIConfig.Startup)).BuildClient(); var response = await client.GetAsync("/swagger/"); var content = await response.Content.ReadAsStringAsync(); Assert.Contains("<title>Custom API - Swagger UI</title>", content); }
public async Task SwaggerUIIndex_ServesAnEmbeddedVersionOfTheSwaggerUI() { var client = new TestSite(typeof(Basic.Startup)).BuildClient(); var response = await client.GetAsync("/"); // Basic is configured to serve UI at root var content = await response.Content.ReadAsStringAsync(); Assert.Contains("SwaggerUIBundle", content); }
public async Task IndexUrl_ReturnsCustomPageTitleAndStylesheets_IfConfigured() { var client = new TestSite(typeof(CustomUIConfig.Startup)).BuildClient(); var response = await client.GetAsync("/swagger/index.html"); var content = await response.Content.ReadAsStringAsync(); Assert.Contains("<title>CustomUIConfig</title>", content); Assert.Contains("<link href='/ext/custom-stylesheet.css' rel='stylesheet' media='screen' type='text/css' />", content); }
public async Task SwaggerUIIndex_IncludesCustomStylesheetsAndScripts_IfConfigured() { var client = new TestSite(typeof(CustomUIConfig.Startup)).BuildClient(); var response = await client.GetAsync("/swagger/"); var content = await response.Content.ReadAsStringAsync(); Assert.Contains("/ext/custom-script.js", content); Assert.Contains("<link href='/ext/custom-stylesheet.css' rel='stylesheet' media='screen' type='text/css' />", content); }
public async Task ReDocMiddleware_CanBeConfiguredMultipleTimes(string redocUrl, string swaggerPath) { var client = new TestSite(typeof(MultipleVersions.Startup)).BuildClient(); var response = await client.GetAsync(redocUrl); var content = await response.Content.ReadAsStringAsync(); Assert.Equal(HttpStatusCode.OK, response.StatusCode); Assert.Contains(swaggerPath, content); }
public async Task VersionUrls_ProperlyHandlesDifferentVersions(string redocUrl, string swaggerPath) { var client = new TestSite(typeof(MultipleVersions.Startup)).BuildClient(); var response = await client.GetAsync(redocUrl); var content = await response.Content.ReadAsStringAsync(); Assert.Equal(HttpStatusCode.OK, response.StatusCode); Assert.Contains(swaggerPath, content); }
public async Task RoutePrefix_RedirectsToPathRelativeIndexUrl( Type startupType, string requestPath, string expectedRedirectPath) { var client = new TestSite(startupType).BuildClient(); var response = await client.GetAsync(requestPath); Assert.Equal(HttpStatusCode.MovedPermanently, response.StatusCode); Assert.Equal(expectedRedirectPath, response.Headers.Location.ToString()); }
public async Task SwaggerUIIndex_ServesAnEmbeddedVersionOfTheSwaggerUI() { var client = new TestSite(typeof(Basic.Startup)).BuildClient(); var indexResponse = await client.GetAsync("/"); // Basic is configured to serve UI at root var jsBundleResponse = await client.GetAsync("/swagger-ui.js"); var cssBundleResponse = await client.GetAsync("/swagger-ui.css"); var jsEdgeFixResponse = await client.GetAsync("/edge-fix.js"); var jsConfigResponse = await client.GetAsync("/config.js"); var cssStyleResponse = await client.GetAsync("/style.css"); var indexContent = await indexResponse.Content.ReadAsStringAsync(); var jsConfigContent = await jsConfigResponse.Content.ReadAsStringAsync(); Assert.Contains("{'urls':[{'url':'/swagger/v1/swagger.json','name':'V1 Docs'}],'validatorUrl':null}".Replace("'", "\""), indexContent); Assert.Contains("SwaggerUIBundle", jsConfigContent); Assert.Equal(HttpStatusCode.OK, jsBundleResponse.StatusCode); Assert.Equal(HttpStatusCode.OK, cssBundleResponse.StatusCode); Assert.Equal(HttpStatusCode.OK, jsEdgeFixResponse.StatusCode); Assert.Equal(HttpStatusCode.OK, jsConfigResponse.StatusCode); Assert.Equal(HttpStatusCode.OK, cssStyleResponse.StatusCode); }
public async Task SwaggerUIMiddleware_CanBeConfiguredMultipleTimes(string swaggerUiUrl, string[] versions) { var client = new TestSite(typeof(MultipleVersions.Startup)).BuildClient(); var response = await client.GetAsync(swaggerUiUrl); var content = await response.Content.ReadAsStringAsync(); Assert.Equal(HttpStatusCode.OK, response.StatusCode); foreach (var version in versions) { Assert.Contains(version, content); } }
public async Task IndexUrl_ReturnsEmbeddedVersionOfTheSwaggerUI( Type startupType, string indexPath, string jsPath, string cssPath) { var client = new TestSite(startupType).BuildClient(); var indexResponse = await client.GetAsync(indexPath); Assert.Equal(HttpStatusCode.OK, indexResponse.StatusCode); var indexContent = await indexResponse.Content.ReadAsStringAsync(); Assert.Contains("SwaggerUIBundle", indexContent); var jsResponse = await client.GetAsync(jsPath); Assert.Equal(HttpStatusCode.OK, jsResponse.StatusCode); var cssResponse = await client.GetAsync(cssPath); Assert.Equal(HttpStatusCode.OK, cssResponse.StatusCode); }
public async Task SwaggerMiddleware_CanBeConfiguredMultipleTimes( string swaggerUrl, string expectedVersionProperty, string expectedVersionValue) { var client = new TestSite(typeof(Basic.Startup)).BuildClient(); var response = await client.GetAsync(swaggerUrl); response.EnsureSuccessStatusCode(); var contentStream = await response.Content.ReadAsStreamAsync(); var json = await JsonSerializer.DeserializeAsync <JsonElement>(contentStream); Assert.Equal(expectedVersionValue, json.GetProperty(expectedVersionProperty).GetString()); }
public async Task SwaggerEndpoint_InfersServerMetadata_FromRequestHeaders( string clientBaseAddress, string expectedServerUrl) { var client = new TestSite(typeof(Basic.Startup)).BuildClient(); client.BaseAddress = new Uri(clientBaseAddress); var swaggerResponse = await client.GetAsync($"swagger/v1/swagger.json"); swaggerResponse.EnsureSuccessStatusCode(); var contentStream = await swaggerResponse.Content.ReadAsStreamAsync(); var openApiDoc = new OpenApiStreamReader().Read(contentStream, out _); Assert.NotNull(openApiDoc.Servers); Assert.Equal(1, openApiDoc.Servers.Count); Assert.Equal(expectedServerUrl, openApiDoc.Servers[0].Url); }