diff --git a/src/CompressR.MVCUnitTests/CompressR.MVCUnitTests.csproj b/src/CompressR.MVCUnitTests/CompressR.MVCUnitTests.csproj index 34dc299..6988f13 100644 --- a/src/CompressR.MVCUnitTests/CompressR.MVCUnitTests.csproj +++ b/src/CompressR.MVCUnitTests/CompressR.MVCUnitTests.csproj @@ -33,8 +33,45 @@ 4 + + ..\..\packages\Castle.Core.3.3.3\lib\net45\Castle.Core.dll + True + + + ..\..\packages\Microsoft.Web.Infrastructure.1.0.0.0\lib\net40\Microsoft.Web.Infrastructure.dll + True + + + ..\..\packages\Moq.4.5.10\lib\net45\Moq.dll + True + + + + ..\..\packages\Microsoft.AspNet.WebPages.3.2.3\lib\net45\System.Web.Helpers.dll + True + + + ..\..\packages\Microsoft.AspNet.Mvc.5.2.3\lib\net45\System.Web.Mvc.dll + True + + + ..\..\packages\Microsoft.AspNet.Razor.3.2.3\lib\net45\System.Web.Razor.dll + True + + + ..\..\packages\Microsoft.AspNet.WebPages.3.2.3\lib\net45\System.Web.WebPages.dll + True + + + ..\..\packages\Microsoft.AspNet.WebPages.3.2.3\lib\net45\System.Web.WebPages.Deployment.dll + True + + + ..\..\packages\Microsoft.AspNet.WebPages.3.2.3\lib\net45\System.Web.WebPages.Razor.dll + True + @@ -60,6 +97,7 @@ + @@ -70,6 +108,10 @@ {256f0ecd-0310-4de9-8334-31a3d3867925} CompressR.MVC5 + + {c94378c3-4aa8-4f49-8720-77d14b62f72e} + CompressR + diff --git a/src/CompressR.MVCUnitTests/CompressionFactoryTests.cs b/src/CompressR.MVCUnitTests/CompressionFactoryTests.cs new file mode 100644 index 0000000..3f800e7 --- /dev/null +++ b/src/CompressR.MVCUnitTests/CompressionFactoryTests.cs @@ -0,0 +1,126 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.IO.Compression; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Web; +using System.Web.Mvc; +using System.Web.Routing; +using Moq; +using Xunit; + +namespace CompressR.MVCUnitTests +{ + public class CompressionFactoryTests + { + [Fact] + public void ShouldThrowWhenRequired() + { + var request = new Mock(); + request.Setup(a => a.Headers).Returns(new System.Collections.Specialized.NameValueCollection() { }); + var httpContext = new Moq.Mock(); + httpContext.Setup(a => a.Request).Returns(request.Object); + Assert.Throws(typeof(CompressR.Exceptions.CompressRException), () => { + + CompressR.MVC.CompressFactory.Compress(new System.Web.Mvc.ActionExecutingContext() + { + HttpContext = httpContext.Object + }, true); + }); + + } + [Fact] + public void ShouldNotThrowButAlsoNotCompressIfFalse() + { + var request = new Mock(); + request.Setup(a => a.Headers).Returns(new System.Collections.Specialized.NameValueCollection() { }); + var httpContext = new Moq.Mock(); + httpContext.Setup(a => a.Request).Returns(request.Object); + var response = new Mock(); + httpContext.Setup(a => a.Response).Returns(response.Object); + var contextObject = httpContext.Object; + CompressR.MVC.CompressFactory.Compress(new System.Web.Mvc.ActionExecutingContext() + { + HttpContext = contextObject + }, false); + Assert.Null(contextObject.Response.Filter); + + } + [Fact] + public void ShouldGzipWhenRequested() + { + + var request = new Mock(); + request.Setup(a => a.Headers).Returns(new System.Collections.Specialized.NameValueCollection() { ["Accept-Encoding"] = "gzip" }); + var requestContextBase = new Mock(); + requestContextBase.Setup(a => a.Request).Returns(request.Object); + var requestContext = new Mock(); + requestContext.Setup(a => a.HttpContext).Returns(requestContextBase.Object); + var cachePolicy = new Mock(); + cachePolicy.Setup(a => a.VaryByHeaders).Returns(new HttpCacheVaryByHeaders()); + //var httpContext = new Moq.Mock(); + var response = new Mock(); + response.Setup(a => a.Headers).Returns(new System.Collections.Specialized.NameValueCollection()); + response.SetupProperty(a => a.Filter, new MemoryStream(Encoding.UTF8.GetBytes("awesome")) { }); + response.Setup(a => a.Cache).Returns(cachePolicy.Object); + var responseContext = new Mock(); + responseContext.Setup(a => a.Response).Returns(response.Object); + + requestContextBase.Setup(a => a.Response).Returns(response.Object); + var httpContext = new ActionExecutingContext() + { + RequestContext = new System.Web.Routing.RequestContext() + { + HttpContext = requestContextBase.Object + } + }; + + //httpContext.Setup(a=>a.RequestContext.Filter).Returns(new MemoryStream(Encoding.UTF8.GetBytes("awesome")) { } ); + //var response = new Mock(); + //httpContext.Setup(a => a.Response).Returns(response.Object); + //var contextObject = httpContext; + CompressR.MVC.CompressFactory.Compress(httpContext, false); + Assert.IsType(httpContext.RequestContext.HttpContext.Response.Filter); + + } + [Fact] + public void ShouldDeflateWhenRequested() + { + + var request = new Mock(); + request.Setup(a => a.Headers).Returns(new System.Collections.Specialized.NameValueCollection() { ["Accept-Encoding"] = "deflate" }); + var requestContextBase = new Mock(); + requestContextBase.Setup(a => a.Request).Returns(request.Object); + var requestContext = new Mock(); + requestContext.Setup(a => a.HttpContext).Returns(requestContextBase.Object); + var cachePolicy = new Mock(); + cachePolicy.Setup(a => a.VaryByHeaders).Returns(new HttpCacheVaryByHeaders()); + //var httpContext = new Moq.Mock(); + var response = new Mock(); + response.Setup(a => a.Headers).Returns(new System.Collections.Specialized.NameValueCollection()); + response.SetupProperty(a => a.Filter, new MemoryStream(Encoding.UTF8.GetBytes("awesome")) { }); + response.Setup(a => a.Cache).Returns(cachePolicy.Object); + var responseContext = new Mock(); + responseContext.Setup(a => a.Response).Returns(response.Object); + + requestContextBase.Setup(a => a.Response).Returns(response.Object); + var httpContext = new ActionExecutingContext() + { + RequestContext = new System.Web.Routing.RequestContext() + { + HttpContext = requestContextBase.Object + } + }; + + //httpContext.Setup(a=>a.RequestContext.Filter).Returns(new MemoryStream(Encoding.UTF8.GetBytes("awesome")) { } ); + //var response = new Mock(); + //httpContext.Setup(a => a.Response).Returns(response.Object); + //var contextObject = httpContext; + CompressR.MVC.CompressFactory.Compress(httpContext, false); + Assert.IsType(httpContext.RequestContext.HttpContext.Response.Filter); + + } + } +} diff --git a/src/CompressR.MVCUnitTests/packages.config b/src/CompressR.MVCUnitTests/packages.config index 30b6958..5f34474 100644 --- a/src/CompressR.MVCUnitTests/packages.config +++ b/src/CompressR.MVCUnitTests/packages.config @@ -1,5 +1,11 @@  + + + + + +