public ProblemDetailsHttpResponseMapperTests()
        {
            var optionsMock = TestHelper.CreateHttpExceptionsOptionsMock(false);

            _mapper = new ExposeProtectedProblemDetailsHttpResponseMapper(optionsMock.Object);

            _unauthorizedHttpContext = new DefaultHttpContext();
            _unauthorizedHttpContext.Request.Path        = "/api/test/unauthorized";
            _unauthorizedHttpContext.Response.StatusCode = (int)HttpStatusCode.Unauthorized;
        }
        public void MapType_Should_ReturnFormattedStatusCode_UsingDefaultHttpContextTypeMapping_WhenUnknownHttpStatusCodeAndDefaultHelpLinkNull()
        {
            var optionsMock = TestHelper.CreateHttpExceptionsOptionsMock(false, null);
            var mapper      = new ExposeProtectedProblemDetailsHttpResponseMapper(optionsMock.Object);

            var teapotHttpContext = new DefaultHttpContext();

            teapotHttpContext.Request.Path        = "/api/test/i-am-a-teapot";
            teapotHttpContext.Response.StatusCode = 418;

            var result = mapper.MapType(teapotHttpContext.Response);

            result.Should().Be("error:418");
        }
        public void MapType_Should_ReturnFormattedStatusName_UsingDefaultHttpContextTypeMapping_WhenUnknownHttpStatusCodeAndDefaultHelpLinkNull()
        {
            var optionsMock = TestHelper.CreateHttpExceptionsOptionsMock(false, null);
            var mapper      = new ExposeProtectedProblemDetailsHttpResponseMapper(optionsMock.Object);

            var alreadyReportedHttpContext = new DefaultHttpContext();

            alreadyReportedHttpContext.Request.Path        = "/api/test/already-reported";
            alreadyReportedHttpContext.Response.StatusCode = (int)HttpStatusCode.AlreadyReported;

            var result = mapper.MapType(alreadyReportedHttpContext.Response);

            result.Should().Be("error:already-reported");
        }
        public void MapDetail_Should_ReturnDetail_UsingOptionsHttpContextDetailMappingOverride()
        {
            var detail = "HttpContextDetailMapping";

            var optionsMock = TestHelper.CreateHttpExceptionsOptionsMock(false, new Uri("http://www.example.com/help-page"));
            var options     = optionsMock.Object;

            options.Value.HttpContextDetailMapping = (HttpContext context) =>
            {
                return(detail);
            };
            var mapper = new ExposeProtectedProblemDetailsHttpResponseMapper(options);

            var result = mapper.MapDetail(new DefaultHttpContext().Response);

            result.Should().Be(detail);
        }
        public void MapType_Should_ReturnUri_UsingOptionsHttpContextTypeMappingOverride()
        {
            var uri = new Uri("https://example.com/HttpContextTypeMapping");

            var optionsMock = TestHelper.CreateHttpExceptionsOptionsMock(false, new Uri("http://www.example.com/help-page"));
            var options     = optionsMock.Object;

            options.Value.HttpContextTypeMapping = (HttpContext context) =>
            {
                return(uri);
            };
            var mapper = new ExposeProtectedProblemDetailsHttpResponseMapper(options);

            var result = mapper.MapType(new DefaultHttpContext().Response);

            result.Should().Be(uri.ToString());
        }
        public void MapType_Should_ReturnResponseStatusCodeLinkUnauthorized_WhenUseHelpLinkAsProblemDetailsTypeTrue()
        {
            var options = new HttpExceptionsOptions
            {
                UseHelpLinkAsProblemDetailsType = true,
                DefaultHelpLink = new Uri("http://www.example.com/help-page")
            };
            var optionsMock = new Mock <IOptions <HttpExceptionsOptions> >();

            optionsMock.Setup(o => o.Value).Returns(options);

            var mapper = new ExposeProtectedProblemDetailsHttpResponseMapper(optionsMock.Object);

            var result = mapper.MapType(_unauthorizedHttpContext.Response);

            result.Should().Be(ResponseStatusCodeLink.Unauthorized);
        }
        public void MapType_Should_ReturnTypeAsErrorUri_WhenUseHelpLinkAsProblemDetailsTypeTrueAndDefaultHelpLinkForProblemDetailsTypeNull()
        {
            var options = new HttpExceptionsOptions
            {
                UseHelpLinkAsProblemDetailsType = true
            };
            var optionsMock = new Mock <IOptions <HttpExceptionsOptions> >();

            optionsMock.Setup(o => o.Value).Returns(options);

            var mapper            = new ExposeProtectedProblemDetailsHttpResponseMapper(optionsMock.Object);
            var teapotHttpContext = new DefaultHttpContext();

            teapotHttpContext.Request.Path        = "/api/test/i-am-a-teapot";
            teapotHttpContext.Response.StatusCode = 418;

            var result = mapper.MapType(teapotHttpContext.Response);

            result.Should().Be("error:418");
        }
        public void MapType_Should_ReturnDefaultHelpLink_WhenUseHelpLinkAsProblemDetailsTypeTrue()
        {
            var options = new HttpExceptionsOptions
            {
                UseHelpLinkAsProblemDetailsType = true,
                DefaultHelpLink = new Uri("http://www.example.com/help-page")
            };
            var optionsMock = new Mock <IOptions <HttpExceptionsOptions> >();

            optionsMock.Setup(o => o.Value).Returns(options);

            var mapper            = new ExposeProtectedProblemDetailsHttpResponseMapper(optionsMock.Object);
            var teapotHttpContext = new DefaultHttpContext();

            teapotHttpContext.Request.Path        = "/api/test/i-am-a-teapot";
            teapotHttpContext.Response.StatusCode = 418;

            var result = mapper.MapType(teapotHttpContext.Response);

            result.Should().Be("http://www.example.com/help-page");
        }