public void SetsResponseExamples_WhenMethodNotAnnotated()
        {
            // Arrange
            var response = new OpenApiResponse {
                Content = new Dictionary <string, OpenApiMediaType> {
                    { "application/json", new OpenApiMediaType() }
                }
            };
            var operation = new OpenApiOperation {
                OperationId = "foobar", Responses = new OpenApiResponses()
            };

            operation.Responses.Add("200", response);
            var supportedResponseTypes = new List <ApiResponseType> {
                new ApiResponseType {
                    StatusCode = 200, Type = typeof(PersonResponse)
                }
            };
            var filterContext = FilterContextFor(typeof(FakeActions), nameof(FakeActions.PersonResponseNotAnnotated), supportedResponseTypes: supportedResponseTypes);

            SetSwaggerResponses(operation, filterContext);

            // Act
            sut.Apply(operation, filterContext);

            // Assert
            var actualExample = JsonConvert.DeserializeObject <PersonResponse>(((OpenApiRawString)response.Content["application/json"].Example).Value);

            var expectedExample = new PersonResponseAutoExample().GetExamples();

            actualExample.Id.ShouldBe(expectedExample.Id);
            actualExample.FirstName.ShouldBe(expectedExample.FirstName);
        }
        public void SetsResponseExamples_FromMethodAttributes()
        {
            // Arrange
            var response = new OpenApiResponse {
                Content = new Dictionary <string, OpenApiMediaType> {
                    { "application/json", new OpenApiMediaType() }
                }
            };
            var operation = new OpenApiOperation {
                OperationId = "foobar", Responses = new OpenApiResponses()
            };

            operation.Responses.Add("200", response);
            var filterContext = FilterContextFor(typeof(FakeActions), nameof(FakeActions.AnnotatedWithSwaggerResponseAttribute));

            SetSwaggerResponses(operation, filterContext);

            // Act
            sut.Apply(operation, filterContext);

            // Assert
            var actualExample = JsonConvert.DeserializeObject <PersonResponse>(((OpenApiRawString)response.Content["application/json"].Example).Value);

            var expectedExample = new PersonResponseAutoExample().GetExamples();

            actualExample.Id.ShouldBe(expectedExample.Id);
            actualExample.FirstName.ShouldBe(expectedExample.FirstName);
            actualExample.Age.ShouldBe(27);
        }
        public void ShouldNotEmitObsoleteProperties()
        {
            // Arrange
            schemaGeneratorOptions.IgnoreObsoleteProperties = true;
            var response = new OpenApiResponse {
                Content = new Dictionary <string, OpenApiMediaType> {
                    { "application/json", new OpenApiMediaType() }
                }
            };
            var operation = new OpenApiOperation {
                OperationId = "foobar", Responses = new OpenApiResponses()
            };

            operation.Responses.Add("200", response);
            var filterContext = FilterContextFor(typeof(FakeActions), nameof(FakeActions.AnnotatedWithSwaggerResponseAttribute));

            SetSwaggerResponses(operation, filterContext);

            // Act
            sut.Apply(operation, filterContext);

            // Assert
            string jsonExample     = ((OpenApiRawString)response.Content["application/json"].Example).Value;
            var    expectedExample = new PersonResponseAutoExample().GetExamples();

            jsonExample.ShouldNotContain($"\"age\": {expectedExample.Age}", Case.Sensitive);
            jsonExample.ShouldContain($"\"id\": {expectedExample.Id}", Case.Sensitive);
        }
        public void ShouldEmitSystemTextJsonPropertyName()
        {
            // Arrange
            var mvcOutputFormatter = new MvcOutputFormatter(FormatterOptions.WithSystemTextJsonFormatter, new FakeLoggerFactory());
            var responseExample    = new ResponseExample(mvcOutputFormatter);
            var sut = new ServiceProviderExamplesOperationFilter(serviceProvider, null, responseExample);

            var response = new OpenApiResponse {
                Content = new Dictionary <string, OpenApiMediaType> {
                    { "application/json", new OpenApiMediaType() }
                }
            };
            var operation = new OpenApiOperation {
                OperationId = "foobar", Responses = new OpenApiResponses()
            };

            operation.Responses.Add("200", response);
            var filterContext = FilterContextFor(typeof(FakeActions), nameof(FakeActions.AnnotatedWithSwaggerResponseAttribute));

            SetSwaggerResponses(operation, filterContext);

            // Act
            sut.Apply(operation, filterContext);

            // Assert
            string jsonExample     = ((OpenApiRawString)response.Content["application/json"].Example).Value;
            var    expectedExample = new PersonResponseAutoExample().GetExamples();

            jsonExample.ShouldContain($"\"lastagain\": \"{expectedExample.LastName}\"", Case.Sensitive);
        }