public void ResponseCache_SetsAllHeaders() { // Arrange var responseCache = new ResponseCacheAttribute() { Duration = 100, Location = ResponseCacheLocation.Any, VaryByHeader = "Accept" }; var filter = (ResponseCacheFilter)responseCache.CreateInstance(GetServiceProvider(cacheProfiles: null)); var context = GetActionExecutingContext(filter); // Act filter.OnActionExecuting(context); // Assert var response = context.HttpContext.Response; StringValues values; Assert.True(response.Headers.TryGetValue("Cache-Control", out values)); var data = Assert.Single(values); AssertHeaderEquals("public, max-age=100", data); Assert.True(response.Headers.TryGetValue("Vary", out values)); data = Assert.Single(values); Assert.Equal("Accept", data); }
public void OnActionExecuting_CanSetCacheControlHeaders(ResponseCacheAttribute cache, string output) { // Arrange var context = GetActionExecutingContext(new List <IFilter> { cache }); // Act cache.OnActionExecuting(context); // Assert Assert.Equal(output, context.HttpContext.Response.Headers.Get("Cache-control")); }
public void OnActionExecuting_DoesNotSetLocationOrDuration_IfNoStoreIsSet( ResponseCacheAttribute cache, string output) { // Arrange var context = GetActionExecutingContext(new List <IFilter> { cache }); // Act cache.OnActionExecuting(context); // Assert Assert.Equal(output, context.HttpContext.Response.Headers.Get("Cache-control")); }
public void CreateInstance_ThrowsIfThereAreNoMatchingCacheProfiles() { // Arrange var responseCache = new ResponseCacheAttribute() { CacheProfileName = "HelloWorld" }; var cacheProfiles = new Dictionary<string, CacheProfile>(); cacheProfiles.Add("Cache20Sec", new CacheProfile { NoStore = true }); cacheProfiles.Add("Test", new CacheProfile { Duration = 20 }); // Act var ex = Assert.Throws<InvalidOperationException>( () => responseCache.CreateInstance(GetServiceProvider(cacheProfiles))); Assert.Equal("The 'HelloWorld' cache profile is not defined.", ex.Message); }
public void CreateInstance_HonorsOverrides( ResponseCacheAttribute responseCache, Dictionary <string, CacheProfile> cacheProfiles, CacheProfile expectedProfile) { // Arrange & Act var createdFilter = responseCache.CreateInstance(GetServiceProvider(cacheProfiles)); // Assert var responseCacheFilter = Assert.IsType <ResponseCacheFilter>(createdFilter); Assert.Equal(expectedProfile.Duration, responseCacheFilter.Duration); Assert.Equal(expectedProfile.Location, responseCacheFilter.Location); Assert.Equal(expectedProfile.NoStore, responseCacheFilter.NoStore); Assert.Equal(expectedProfile.VaryByHeader, responseCacheFilter.VaryByHeader); }
public void OnActionExecuting_DoesNotThrow_WhenNoStoreIsTrue() { // Arrange var cache = new ResponseCacheAttribute() { NoStore = true }; var context = GetActionExecutingContext(new List <IFilter> { cache }); // Act cache.OnActionExecuting(context); // Assert Assert.Equal("no-store", context.HttpContext.Response.Headers.Get("Cache-control")); }
public void CreateInstance_SelectsTheAppropriateCacheProfile(string profileName) { // Arrange var responseCache = new ResponseCacheAttribute() { CacheProfileName = profileName }; var cacheProfiles = new Dictionary<string, CacheProfile>(); cacheProfiles.Add("Cache20Sec", new CacheProfile { NoStore = true }); cacheProfiles.Add("Test", new CacheProfile { Duration = 20 }); // Act var createdFilter = responseCache.CreateInstance(GetServiceProvider(cacheProfiles)); // Assert var responseCacheFilter = Assert.IsType<ResponseCacheFilter>(createdFilter); Assert.True(responseCacheFilter.NoStore); }
public void OnActionExecuting_ThrowsIfDurationIsNotSet_WhenNoStoreIsFalse() { // Arrange var cache = new ResponseCacheAttribute() { NoStore = false }; var context = GetActionExecutingContext(new List <IFilter> { cache }); // Act & Assert var exception = Assert.Throws <InvalidOperationException>(() => { cache.OnActionExecuting(context); }); Assert.Equal("If the 'NoStore' property is not set to true, 'Duration' property must be specified.", exception.Message); }
public void CreateInstance_DoesNotThrowWhenTheDurationIsNotSet_WithNoStoreFalse() { // Arrange var responseCache = new ResponseCacheAttribute() { CacheProfileName = "Test" }; var cacheProfiles = new Dictionary <string, CacheProfile>(); cacheProfiles.Add("Test", new CacheProfile { NoStore = false }); // Act var filter = responseCache.CreateInstance(GetServiceProvider(cacheProfiles)); // Assert Assert.NotNull(filter); }
public void SetsPragmaOnNoCache() { // Arrange var cache = new ResponseCacheAttribute() { NoStore = true, Location = ResponseCacheLocation.None, Duration = 0 }; var context = GetActionExecutingContext(new List <IFilter> { cache }); // Act cache.OnActionExecuting(context); // Assert Assert.Equal("no-store,no-cache", context.HttpContext.Response.Headers.Get("Cache-control")); Assert.Equal("no-cache", context.HttpContext.Response.Headers.Get("Pragma")); }
public void ResponseCache_SetsDifferentCacheControlHeaders( ResponseCacheAttribute responseCacheAttribute, string expected) { // Arrange var filter = (ResponseCacheFilter)responseCacheAttribute.CreateInstance( GetServiceProvider(cacheProfiles: null)); var context = GetActionExecutingContext(filter); // Act filter.OnActionExecuting(context); // Assert StringValues values; Assert.True(context.HttpContext.Response.Headers.TryGetValue("Cache-Control", out values)); var data = Assert.Single(values); AssertHeaderEquals(expected, data); }
public void ThrowsWhenDurationIsNotSet() { // Arrange var responseCacheAttribute = new ResponseCacheAttribute() { VaryByHeader = "Accept" }; var filter = (ResponseCacheFilter)responseCacheAttribute.CreateInstance( GetServiceProvider(cacheProfiles: null)); var context = GetActionExecutingContext(filter); // Act & Assert var exception = Assert.Throws <InvalidOperationException>(() => { filter.OnActionExecuting(context); }); Assert.Equal( "If the 'NoStore' property is not set to true, 'Duration' property must be specified.", exception.Message); }
public void CreateInstance_ThrowsWhenTheDurationIsNotSet_WithNoStoreFalse() { // Arrange var responseCache = new ResponseCacheAttribute() { CacheProfileName = "Test" }; var cacheProfiles = new Dictionary <string, CacheProfile>(); cacheProfiles.Add("Test", new CacheProfile { NoStore = false }); // Act & Assert var ex = Assert.Throws <InvalidOperationException>( () => responseCache.CreateInstance(GetServiceProvider(cacheProfiles))); Assert.Equal( "If the 'NoStore' property is not set to true, 'Duration' property must be specified.", ex.Message); }
public void SetsCacheControlPublicByDefault() { // Arrange var responseCacheAttribute = new ResponseCacheAttribute() { Duration = 40 }; var filter = (ResponseCacheFilter)responseCacheAttribute.CreateInstance( GetServiceProvider(cacheProfiles: null)); var context = GetActionExecutingContext(filter); // Act filter.OnActionExecuting(context); // Assert StringValues values; Assert.True(context.HttpContext.Response.Headers.TryGetValue("Cache-Control", out values)); var data = Assert.Single(values); AssertHeaderEquals("public, max-age=40", data); }
public void CreateInstance_ThrowsIfThereAreNoMatchingCacheProfiles() { // Arrange var responseCache = new ResponseCacheAttribute() { CacheProfileName = "HelloWorld" }; var cacheProfiles = new Dictionary <string, CacheProfile>(); cacheProfiles.Add("Cache20Sec", new CacheProfile { NoStore = true }); cacheProfiles.Add("Test", new CacheProfile { Duration = 20 }); // Act var ex = Assert.Throws <InvalidOperationException>( () => responseCache.CreateInstance(GetServiceProvider(cacheProfiles))); Assert.Equal("The 'HelloWorld' cache profile is not defined.", ex.Message); }
public void CreateInstance_SelectsTheAppropriateCacheProfile(string profileName) { // Arrange var responseCache = new ResponseCacheAttribute() { CacheProfileName = profileName }; var cacheProfiles = new Dictionary <string, CacheProfile>(); cacheProfiles.Add("Cache20Sec", new CacheProfile { NoStore = true }); cacheProfiles.Add("Test", new CacheProfile { Duration = 20 }); // Act var createdFilter = responseCache.CreateInstance(GetServiceProvider(cacheProfiles)); // Assert var responseCacheFilter = Assert.IsType <ResponseCacheFilter>(createdFilter); Assert.True(responseCacheFilter.NoStore); }
public void ThrowsWhenDurationIsNotSet() { // Arrange var responseCacheAttribute = new ResponseCacheAttribute() { VaryByHeader = "Accept" }; var filter = (ResponseCacheFilter)responseCacheAttribute.CreateInstance( GetServiceProvider(cacheProfiles: null)); var context = GetActionExecutingContext(filter); // Act & Assert var exception = Assert.Throws<InvalidOperationException>(() => { filter.OnActionExecuting(context); }); Assert.Equal( "If the 'NoStore' property is not set to true, 'Duration' property must be specified.", exception.Message); }
public void CreateInstance_ThrowsWhenTheDurationIsNotSet_WithNoStoreFalse() { // Arrange var responseCache = new ResponseCacheAttribute() { CacheProfileName = "Test" }; var cacheProfiles = new Dictionary<string, CacheProfile>(); cacheProfiles.Add("Test", new CacheProfile { NoStore = false }); // Act & Assert var ex = Assert.Throws<InvalidOperationException>( () => responseCache.CreateInstance(GetServiceProvider(cacheProfiles))); Assert.Equal( "If the 'NoStore' property is not set to true, 'Duration' property must be specified.", ex.Message); }
public void CreateInstance_DoesNotThrowWhenTheDurationIsNotSet_WithNoStoreFalse() { // Arrange var responseCache = new ResponseCacheAttribute() { CacheProfileName = "Test" }; var cacheProfiles = new Dictionary<string, CacheProfile>(); cacheProfiles.Add("Test", new CacheProfile { NoStore = false }); // Act var filter = responseCache.CreateInstance(GetServiceProvider(cacheProfiles)); // Assert Assert.NotNull(filter); }
public void CreateInstance_HonorsOverrides( ResponseCacheAttribute responseCache, Dictionary<string, CacheProfile> cacheProfiles, CacheProfile expectedProfile) { // Arrange & Act var createdFilter = responseCache.CreateInstance(GetServiceProvider(cacheProfiles)); // Assert var responseCacheFilter = Assert.IsType<ResponseCacheFilter>(createdFilter); Assert.Equal(expectedProfile.Duration, responseCacheFilter.Duration); Assert.Equal(expectedProfile.Location, responseCacheFilter.Location); Assert.Equal(expectedProfile.NoStore, responseCacheFilter.NoStore); Assert.Equal(expectedProfile.VaryByHeader, responseCacheFilter.VaryByHeader); }