Example #1
0
        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);
        }
Example #2
0
        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);
        }
Example #3
0
        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());
        }
Example #5
0
        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);
        }
Example #7
0
        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);
        }
Example #10
0
        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);
        }
Example #12
0
        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);
        }
Example #13
0
        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);
        }
Example #16
0
        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);
        }
Example #18
0
        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());
        }
Example #19
0
        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);
        }