diff --git a/src/Umbraco.Cms.Api.Delivery/Services/RequestHeaderHandler.cs b/src/Umbraco.Cms.Api.Delivery/Services/RequestHeaderHandler.cs index 08d7a916e673..37651a41587b 100644 --- a/src/Umbraco.Cms.Api.Delivery/Services/RequestHeaderHandler.cs +++ b/src/Umbraco.Cms.Api.Delivery/Services/RequestHeaderHandler.cs @@ -8,11 +8,5 @@ internal abstract class RequestHeaderHandler protected RequestHeaderHandler(IHttpContextAccessor httpContextAccessor) => _httpContextAccessor = httpContextAccessor; - protected string? GetHeaderValue(string headerName) - { - HttpContext httpContext = _httpContextAccessor.HttpContext ?? - throw new InvalidOperationException("Could not obtain an HTTP context"); - - return httpContext.Request.Headers[headerName]; - } + protected string? GetHeaderValue(string headerName) => _httpContextAccessor.HttpContext?.Request.Headers[headerName]; } diff --git a/tests/Umbraco.Tests.UnitTests/Umbraco.Cms.Api.Delivery/Services/RequestHeaderHandlerTests.cs b/tests/Umbraco.Tests.UnitTests/Umbraco.Cms.Api.Delivery/Services/RequestHeaderHandlerTests.cs new file mode 100644 index 000000000000..9b4da511ebdc --- /dev/null +++ b/tests/Umbraco.Tests.UnitTests/Umbraco.Cms.Api.Delivery/Services/RequestHeaderHandlerTests.cs @@ -0,0 +1,48 @@ +using Microsoft.AspNetCore.Http; +using Moq; +using NUnit.Framework; +using Umbraco.Cms.Api.Delivery.Services; + +namespace Umbraco.Cms.Tests.UnitTests.Umbraco.Cms.Api.Delivery.Services; + +[TestFixture] +public class RequestHeaderHandlerTests +{ + private const string HeaderName = "TestHeader"; + [Test] + public void GetHeaderValue_return_null_when_http_context_is_unavailable() + { + IHttpContextAccessor httpContextAccessor = Mock.Of(); + + var sut = new TestRequestHeaderHandler(httpContextAccessor); + + Assert.IsNull(sut.TestGetHeaderValue(HeaderName)); + } + + [Test] + public void GetHeaderValue_return_header_value_when_http_context_is_available() + { + + const string headerValue = "TestValue"; + + HttpContext httpContext = new DefaultHttpContext(); + httpContext.Request.Headers[HeaderName] = headerValue; + + IHttpContextAccessor httpContextAccessor = Mock.Of(); + Mock.Get(httpContextAccessor).Setup(x => x.HttpContext).Returns(httpContext); + + var sut = new TestRequestHeaderHandler(httpContextAccessor); + + Assert.AreEqual(headerValue, sut.TestGetHeaderValue(HeaderName)); + } +} + + +internal class TestRequestHeaderHandler : RequestHeaderHandler +{ + public TestRequestHeaderHandler(IHttpContextAccessor httpContextAccessor) : base(httpContextAccessor) + { + } + + public string? TestGetHeaderValue(string headerName) => base.GetHeaderValue(headerName); +}