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);
        }
Exemple #4
0
        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));
        }
Exemple #5
0
        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);
        }
Exemple #6
0
        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);
        }