public void WhenCacheForIsSet_ShouldAppendCacheHeaders() { var lastModifiedAt = Clock.UtcNow; var combination = new IncludeCombination(IncludeType.Css, new[] { "foo.css" }, "#Foo{color:red;}", lastModifiedAt, new CssTypeElement()); _mockHttpContext.Expect(hc => hc.Response).Return(_mockResponse); _mockHttpContext.Expect(hc => hc.Request).Return(_mockRequest); _mockRequest.Expect(r => r.Headers[HttpHeaders.AcceptEncoding]).Return(""); _mockResponse.Expect(r => r.ContentEncoding = Encoding.UTF8); _mockResponse.Expect(r => r.ContentType = MimeTypes.TextCss); _mockResponse.Expect(r => r.AddHeader(HttpHeaders.ContentLength, "16")); _mockResponse.Expect(r => r.OutputStream).Return(new MemoryStream(8092)).Repeat.Twice(); _mockResponse.Expect(r => r.Cache).Return(_mockCachePolicy); _mockCachePolicy.Expect(cp => cp.SetETag(Arg<string>.Matches(etag => etag.StartsWith("foo") && etag.EndsWith(combination.LastModifiedAt.Ticks.ToString())))); _stubCombiner.Expect(c => c.GetCombination("foo")).Return(combination); var cacheFor = TimeSpan.FromMinutes(30); _mockCachePolicy.Expect(cp => cp.SetCacheability(HttpCacheability.Public)); _mockCachePolicy.Expect(cp => cp.SetExpires(Clock.UtcNow.Add(cacheFor))); _mockCachePolicy.Expect(cp => cp.SetMaxAge(cacheFor)); _mockCachePolicy.Expect(cp => cp.SetValidUntilExpires(true)); _mockCachePolicy.Expect(cp => cp.SetLastModified(lastModifiedAt)); var stubSettings = _mocks.Stub<IIncludeHandlingSettings>(); var stubCss = _mocks.Stub<IIncludeTypeSettings>(); stubSettings.Replay(); stubCss.Replay(); stubSettings.Expect(s => s.Types[IncludeType.Css]).Return(stubCss); stubCss.Expect(s => s.CacheFor).Return(cacheFor); var result = new IncludeCombinationResult(_stubCombiner, "foo", lastModifiedAt, stubSettings); Assert.DoesNotThrow(() => result.ExecuteResult(_controllerContext)); _mocks.VerifyAll(); }
public void WhenCombinationExists_ShouldCorrectlySetUpResponse() { _mockHttpContext.Expect(hc => hc.Response).Return(_mockResponse); _mockHttpContext.Expect(hc => hc.Request).Return(_mockRequest); _mockRequest.Expect(r => r.Headers[HttpHeaders.AcceptEncoding]).Return(""); _mockResponse.Expect(r => r.ContentEncoding = Encoding.UTF8); _mockResponse.Expect(r => r.ContentType = MimeTypes.TextCss); _mockResponse.Expect(r => r.AddHeader(HttpHeaders.ContentLength, "16")); _mockResponse.Expect(r => r.OutputStream).Return(new MemoryStream(8092)).Repeat.Twice(); _mockResponse.Expect(r => r.Cache).Return(_mockCachePolicy); _mockCachePolicy.Expect(cp => cp.SetETag(Arg<string>.Matches(etag => etag.StartsWith("foo") && etag.EndsWith(_cssCombination.LastModifiedAt.Ticks.ToString())))); _stubCombiner.Expect(c => c.GetCombination("foo")).Return(_cssCombination); var result = new IncludeCombinationResult(_stubCombiner, "foo", Clock.UtcNow); Assert.DoesNotThrow(() => result.ExecuteResult(_controllerContext)); _mocks.VerifyAll(); }
public void WhenRequestAcceptsCompression_ShouldAppendContentEncodingHeader(string acceptEncoding, string expectedContentEncoding, string browser, int browserMajorVersion) { var lastModifiedAt = Clock.UtcNow; _mockHttpContext.Expect(hc => hc.Response).Return(_mockResponse); _mockHttpContext.Expect(hc => hc.Request).Return(_mockRequest); _mockRequest.Expect(r => r.Headers[HttpHeaders.AcceptEncoding]).Return(acceptEncoding); var stubBrowser = MockRepository.GenerateStub<HttpBrowserCapabilitiesBase>(); stubBrowser.Expect(b => b.Type).Return(browser); stubBrowser.Expect(b => b.MajorVersion).Return(browserMajorVersion); stubBrowser.Replay(); _mockRequest.Expect(r => r.Browser).Return(stubBrowser); _mockResponse.Expect(r => r.ContentEncoding = Encoding.UTF8); _mockResponse.Expect(r => r.ContentType = MimeTypes.TextCss); _mockResponse.Expect(r => r.AddHeader(Arg<string>.Is.Equal(HttpHeaders.ContentLength), Arg<string>.Is.NotNull)); _mockResponse.Expect(r => r.OutputStream).Return(new MemoryStream(8092)).Repeat.Twice(); _mockResponse.Expect(r => r.Cache).Return(_mockCachePolicy); if (expectedContentEncoding != null) { _mockResponse.Expect(r => r.AppendHeader(HttpHeaders.ContentEncoding, expectedContentEncoding)); } _mockCachePolicy.Expect(cp => cp.SetETag(Arg<string>.Matches(etag => etag.StartsWith("foo") && etag.EndsWith(_cssCombination.LastModifiedAt.Ticks.ToString())))); var cacheFor = TimeSpan.FromMinutes(30); _mockCachePolicy.Expect(cp => cp.SetCacheability(HttpCacheability.Public)); _mockCachePolicy.Expect(cp => cp.SetExpires(Clock.UtcNow.Add(cacheFor))).IgnoreArguments(); _mockCachePolicy.Expect(cp => cp.SetMaxAge(cacheFor)).IgnoreArguments(); _mockCachePolicy.Expect(cp => cp.SetValidUntilExpires(true)); _mockCachePolicy.Expect(cp => cp.SetLastModified(lastModifiedAt)).IgnoreArguments(); _stubCombiner.Expect(c => c.GetCombination("foo")).Return(_cssCombination); var stubSettings = _mocks.Stub<IIncludeHandlingSettings>(); stubSettings.Expect(x => x.Types[IncludeType.Css]).Return(new CssTypeElement()); stubSettings.Replay(); var result = new IncludeCombinationResult(_stubCombiner, "foo", Clock.UtcNow, stubSettings); Assert.DoesNotThrow(() => result.ExecuteResult(_controllerContext)); _mocks.VerifyAll(); }
public void WhenNoCombinationExists_ResponseCodeShouldBe404() { _mockHttpContext.Expect(hc => hc.Response).Return(_mockResponse); _mockResponse.Expect(r => r.ContentEncoding = Encoding.UTF8); _mockResponse.Expect(r => r.StatusCode = (int) HttpStatusCode.NotFound); _stubCombiner.Expect(c => c.GetCombination("foo")).Return(null); var result = new IncludeCombinationResult(_stubCombiner, "foo", Clock.UtcNow); Assert.DoesNotThrow(() => result.ExecuteResult(_controllerContext)); _mocks.VerifyAll(); }