public void WillExcludeFilesWithNoKeys() { var testable = new TestableLocalDiskStore(); testable.Mock <IRRConfiguration>().Setup(x => x.ResourcePhysicalPath).Returns("dir"); var guid1 = Guid.Empty; var guid2 = Guid.NewGuid(); var sig1 = Guid.Empty.RemoveDashes(); var sig2 = Guid.NewGuid().RemoveDashes(); testable.Mock <IUriBuilder>().Setup(x => x.BuildResourceUrl(guid1, sig1, typeof(CssResource))).Returns("url1"); testable.Mock <IUriBuilder>().Setup(x => x.BuildResourceUrl(guid2, sig2, typeof(CssResource))).Returns("url2"); var files = new List <DatedFileEntry> { new DatedFileEntry(string.Format("dir\\somerandomname-{0}", new CssResource().FileName), DateTime.Now), new DatedFileEntry(string.Format("dir\\{0}-{1}-{2}", guid2.RemoveDashes(), sig2, new CssResource().FileName), DateTime.Now), }; testable.Mock <IFileWrapper>().Setup(x => x.GetDatedFiles("dir", "*RequestReduce*")).Returns(files); testable.Mock <IUriBuilder>().Setup(x => x.ParseKey(files[0].FileName.Replace("\\", "/"))).Returns(Guid.Empty); testable.Mock <IUriBuilder>().Setup(x => x.ParseKey(files[1].FileName.Replace("\\", "/"))).Returns(guid2); testable.Mock <IUriBuilder>().Setup(x => x.ParseSignature(files[0].FileName.Replace("\\", "/"))).Returns(Guid.Empty.RemoveDashes()); testable.Mock <IUriBuilder>().Setup(x => x.ParseSignature(files[1].FileName.Replace("\\", "/"))).Returns(sig2); var result = testable.ClassUnderTest.GetSavedUrls(); Assert.Equal(1, result.Count); Assert.True(result[guid2] == "url2"); testable.Dispose(); }
public void WillFlushAllKeysWhenPassedGuidIsEmpty() { var testable = new TestableLocalDiskStore(); var urlBuilder = new UriBuilder(testable.Mock <IRRConfiguration>().Object); testable.Inject(urlBuilder); var guid1 = Guid.NewGuid(); var guid2 = Guid.NewGuid(); testable.Mock <IRRConfiguration>().Setup(x => x.ResourceVirtualPath).Returns("/dir"); testable.Mock <IRRConfiguration>().Setup(x => x.ResourcePhysicalPath).Returns("c:\\web\\dir"); testable.Inject <IUriBuilder>(urlBuilder); var file1 = new DatedFileEntry(urlBuilder.BuildResourceUrl <CssResource>(guid1, new byte[] { 1 }).Replace("/dir", "c:\\dir").Replace('/', '\\'), DateTime.Now); var file2 = new DatedFileEntry(urlBuilder.BuildResourceUrl <CssResource>(guid2, new byte[] { 1 }).Replace("/dir", "c:\\dir").Replace('/', '\\'), DateTime.Now); testable.Mock <IFileWrapper>().Setup(x => x.GetDatedFiles("c:\\web\\dir", "*RequestReduce*")).Returns(new List <DatedFileEntry> { file1, file2 }); testable.Mock <IFileWrapper>().Setup(x => x.GetFiles("c:\\web\\dir")).Returns(new string[] { file1.FileName, file2.FileName }); testable.ClassUnderTest.Flush(Guid.Empty); testable.Mock <IFileWrapper>().Verify(x => x.RenameFile(file1.FileName, file1.FileName.Replace(guid1.RemoveDashes(), guid1.RemoveDashes() + "-Expired"))); testable.Mock <IFileWrapper>().Verify(x => x.RenameFile(file2.FileName, file2.FileName.Replace(guid2.RemoveDashes(), guid2.RemoveDashes() + "-Expired"))); }
public void WillPullMostRecentActiveUrlPerKey() { var testable = new TestableLocalDiskStore(); testable.Mock <IRRConfiguration>().Setup(x => x.ResourcePhysicalPath).Returns("dir"); var guid1 = Guid.NewGuid(); var guid2 = Guid.NewGuid(); var sig1 = Guid.NewGuid().RemoveDashes(); var sig2 = Guid.NewGuid().RemoveDashes(); var sig3 = Guid.NewGuid().RemoveDashes(); testable.Mock <IUriBuilder>().Setup(x => x.BuildResourceUrl(guid1, sig1, typeof(CssResource))).Returns("url1"); testable.Mock <IUriBuilder>().Setup(x => x.BuildResourceUrl(guid2, sig2, typeof(CssResource))).Returns("url2"); testable.Mock <IUriBuilder>().Setup(x => x.BuildResourceUrl(guid2, sig3, typeof(CssResource))).Returns("url3"); var files = new List <DatedFileEntry> { new DatedFileEntry(string.Format("dir\\{0}-Expired-{1}-{2}", guid1.RemoveDashes(), sig1, new CssResource().FileName), DateTime.Now), new DatedFileEntry(string.Format("dir\\{0}-{1}-{2}", guid2.RemoveDashes(), sig2, new CssResource().FileName), DateTime.Now), new DatedFileEntry(string.Format("dir\\{0}-{1}-{2}", guid2.RemoveDashes(), sig3, new CssResource().FileName), DateTime.Now.Subtract(new TimeSpan(0, 1, 1))) }; testable.Mock <IFileWrapper>().Setup(x => x.GetDatedFiles("dir", "*RequestReduce*")).Returns(files); testable.Mock <IUriBuilder>().Setup(x => x.ParseKey(files[0].FileName.Replace("\\", "/"))).Returns(guid1); testable.Mock <IUriBuilder>().Setup(x => x.ParseKey(files[1].FileName.Replace("\\", "/"))).Returns(guid2); testable.Mock <IUriBuilder>().Setup(x => x.ParseKey(files[2].FileName.Replace("\\", "/"))).Returns(guid2); testable.Mock <IUriBuilder>().Setup(x => x.ParseSignature(files[0].FileName.Replace("\\", "/"))).Returns(sig1); testable.Mock <IUriBuilder>().Setup(x => x.ParseSignature(files[1].FileName.Replace("\\", "/"))).Returns(sig2); testable.Mock <IUriBuilder>().Setup(x => x.ParseSignature(files[2].FileName.Replace("\\", "/"))).Returns(sig3); var result = testable.ClassUnderTest.GetSavedUrls(); Assert.Equal(1, result.Count); Assert.True(result[guid2] == "url2"); testable.Dispose(); }
public void WillNormalizeCasingOfCofigsAndPasedUrl() { var testable = new TestableLocalDiskStore(); testable.Mock <IRRConfiguration>().Setup(x => x.ContentHost).Returns("http://Server"); testable.Mock <IRRConfiguration>().Setup(x => x.ResourceVirtualPath).Returns("/RequestReduce"); testable.Mock <IRRConfiguration>().Setup(x => x.ResourcePhysicalPath).Returns("c:\\phys\\rr"); var result = testable.ClassUnderTest.GetFileNameFromConfig("http://serVer/requestreDuce/fiLe"); Assert.Equal("c:\\phys\\rr\\file", result); }
public void WillGetPhysicalPathFromUrl() { var testable = new TestableLocalDiskStore(); var content = new byte[] { 1 }; testable.Mock <IRRConfiguration>().Setup(x => x.ResourceVirtualPath).Returns("/url"); testable.Mock <IRRConfiguration>().Setup(x => x.ResourcePhysicalPath).Returns("c:\\web\\url"); testable.Mock <IUriBuilder>().Setup(x => x.ParseSignature("/url/myid-style.cc")).Returns("style"); testable.ClassUnderTest.Save(content, "/url/myid-style.cc", null); testable.Mock <IFileWrapper>().Verify(x => x.Save(content, "c:\\web\\url\\myid-style.cc")); }
public void WillTransmitFileToResponseAndReturnTrue() { var testable = new TestableLocalDiskStore(); var content = new byte[] { 1 }; testable.Mock <IRRConfiguration>().Setup(x => x.ResourceVirtualPath).Returns("/url"); testable.Mock <IRRConfiguration>().Setup(x => x.ResourcePhysicalPath).Returns("c:\\web\\url"); var response = new Mock <HttpResponseBase>(); var result = testable.ClassUnderTest.SendContent("/url/myid-style.cc", response.Object); Assert.True(result); response.Verify(x => x.TransmitFile("c:\\web\\url\\myid-style.cc"), Times.Once()); }
public void WillTransmitExpiredFileIfFileotFoundandExpired() { var testable = new TestableLocalDiskStore(); testable.Mock <IRRConfiguration>().Setup(x => x.ResourceVirtualPath).Returns("/url"); testable.Mock <IRRConfiguration>().Setup(x => x.ResourcePhysicalPath).Returns("c:\\web\\url"); var response = new Mock <HttpResponseBase>(); response.Setup(x => x.TransmitFile("c:\\web\\url\\myid-style.cc")).Throws(new FileNotFoundException()); var result = testable.ClassUnderTest.SendContent("/url/myid-style.cc", response.Object); Assert.True(result); response.Verify(x => x.TransmitFile("c:\\web\\url\\myid-Expired-style.cc"), Times.Once()); }
public void WillRemoveExpiredFileIfExists() { var testable = new TestableLocalDiskStore(); var content = new byte[] { 1 }; testable.Mock <IRRConfiguration>().Setup(x => x.SpriteVirtualPath).Returns("/url"); testable.Mock <IRRConfiguration>().Setup(x => x.SpritePhysicalPath).Returns("c:\\web\\url"); testable.Mock <IFileWrapper>().Setup(x => x.FileExists("c:\\web\\url\\myid-Expired-style.cc")).Returns( true); testable.Mock <IUriBuilder>().Setup(x => x.ParseSignature("/url/myid-style.cc")).Returns("style"); testable.ClassUnderTest.Save(content, "/url/myid-style.cc", null); testable.Mock <IFileWrapper>().Verify(x => x.DeleteFile("c:\\web\\url\\myid-Expired-style.cc")); }
public void WillNotAddToReductionRepositoryIfPng() { var testable = new TestableLocalDiskStore(); var content = new byte[] { 1 }; testable.Mock <IRRConfiguration>().Setup(x => x.ResourceVirtualPath).Returns("/url"); testable.Mock <IRRConfiguration>().Setup(x => x.ResourcePhysicalPath).Returns("c:\\web\\url"); testable.Mock <IUriBuilder>().Setup(x => x.ParseSignature("/url/myid-style.png")).Returns("style"); var expectedKey = Guid.NewGuid(); testable.Mock <IUriBuilder>().Setup(x => x.ParseKey("/url/myid-style.png")).Returns(expectedKey); testable.ClassUnderTest.Save(content, "/url/myid-style.png", null); testable.Mock <IReductionRepository>().Verify(x => x.AddReduction(expectedKey, "/url/myid-style.png"), Times.Never()); }
public void WillExpireFile() { var testable = new TestableLocalDiskStore(); var key = Guid.NewGuid(); var urlBuilder = new UriBuilder(testable.Mock <IRRConfiguration>().Object); testable.Mock <IRRConfiguration>().Setup(x => x.ResourceVirtualPath).Returns("/RRContent"); testable.Mock <IRRConfiguration>().Setup(x => x.ResourcePhysicalPath).Returns("c:\\RRContent"); testable.Inject <IUriBuilder>(urlBuilder); var file1 = urlBuilder.BuildResourceUrl <CssResource>(key, new byte[] { 1 }).Replace("/RRContent", "c:\\RRContent").Replace('/', '\\'); var file2 = urlBuilder.BuildSpriteUrl(key, new byte[] { 1 }).Replace("/RRContent", "c:\\RRContent").Replace('/', '\\'); testable.Mock <IFileWrapper>().Setup(x => x.GetFiles("c:\\RRContent")).Returns(new string[] { file1, file2 }); testable.ClassUnderTest.Flush(key); testable.Mock <IFileWrapper>().Verify(x => x.RenameFile(file1, file1.Replace(key.RemoveDashes(), key.RemoveDashes() + "-Expired"))); testable.Mock <IFileWrapper>().Verify(x => x.RenameFile(file2, file2.Replace(key.RemoveDashes(), key.RemoveDashes() + "-Expired"))); }
public void WillResolveFilesInLowerCase() { var testable = new TestableLocalDiskStore(); testable.Mock <IRRConfiguration>().Setup(x => x.ResourcePhysicalPath).Returns("dir"); var guid1 = Guid.NewGuid(); var sig1 = Guid.NewGuid().RemoveDashes(); testable.Mock <IUriBuilder>().Setup(x => x.BuildResourceUrl(guid1, sig1, typeof(CssResource))).Returns("url1"); var files = new List <DatedFileEntry> { new DatedFileEntry(string.Format("dir\\{0}-{1}-{2}", guid1.RemoveDashes(), sig1, new CssResource().FileName.ToLower()), DateTime.Now), }; testable.Mock <IFileWrapper>().Setup(x => x.GetDatedFiles("dir", "*RequestReduce*")).Returns(files); testable.Mock <IUriBuilder>().Setup(x => x.ParseKey(files[0].FileName.Replace("\\", "/"))).Returns(guid1); testable.Mock <IUriBuilder>().Setup(x => x.ParseSignature(files[0].FileName.Replace("\\", "/"))).Returns(sig1); var result = testable.ClassUnderTest.GetSavedUrls(); Assert.Equal(1, result.Count); testable.Dispose(); }