コード例 #1
0
        public void WillGetNonExpiredCssUrlFromDb()
        {
            var testable = new TestableRepository();
            var id       = Guid.NewGuid();
            var file     = new RequestReduceFile()
            {
                Content             = new byte[] { 1 },
                FileName            = "fileName1" + new CssResource().FileName,
                Key                 = id,
                LastUpdated         = new DateTime(2010, 1, 1),
                OriginalName        = "originalName",
                RequestReduceFileId = id,
                IsExpired           = true
            };

            testable.ClassUnderTest.Save(file);
            var file2 = new RequestReduceFile()
            {
                Content             = new byte[] { 2 },
                FileName            = "fileName2" + new CssResource().FileName,
                Key                 = id,
                LastUpdated         = new DateTime(2011, 1, 1),
                OriginalName        = "originalName",
                RequestReduceFileId = Guid.NewGuid()
            };

            testable.ClassUnderTest.Save(file2);

            var result = testable.ClassUnderTest.GetActiveUrlByKey(id, typeof(CssResource));

            Assert.Equal(file2.FileName, result);
            testable.Dispose();
        }
コード例 #2
0
            public void WillSaveToDatabaseUsingConnectionString()
            {
                var testable = new TestableRepository("Data Source=:memory:;Version=3;New=True");
                var id       = Guid.NewGuid();
                var file     = new RequestReduceFile()
                {
                    Content             = new byte[] { 1 },
                    FileName            = "fileName",
                    Key                 = Guid.NewGuid(),
                    LastUpdated         = DateTime.Now,
                    OriginalName        = "originalName",
                    RequestReduceFileId = id
                };

                testable.ClassUnderTest.Save(file);

                var savedFile = testable.ClassUnderTest.SingleOrDefault <RequestReduceFile>(id);

                Assert.Equal(file.Content.Length, savedFile.Content.Length);
                Assert.Equal(file.Content[0], savedFile.Content[0]);
                Assert.Equal(file.FileName, savedFile.FileName);
                Assert.Equal(file.Key, savedFile.Key);
                Assert.Equal(file.OriginalName, savedFile.OriginalName);
                Assert.Equal(file.RequestReduceFileId, savedFile.RequestReduceFileId);
                Assert.True((file.LastUpdated - savedFile.LastUpdated) <= TimeSpan.FromMilliseconds(4));
            }
コード例 #3
0
            public void WillUpdateContentAndLastUpdatedTime()
            {
                var testable = new TestableRepository();
                var id       = Guid.NewGuid();
                var file     = new RequestReduceFile()
                {
                    Content             = new byte[] { 1 },
                    FileName            = "fileName",
                    Key                 = Guid.NewGuid(),
                    LastUpdated         = new DateTime(2010, 1, 1),
                    OriginalName        = "originalName",
                    RequestReduceFileId = id
                };

                testable.ClassUnderTest.Save(file);
                var file2 = new RequestReduceFile()
                {
                    Content             = new byte[] { 2 },
                    FileName            = "fileName",
                    Key                 = Guid.NewGuid(),
                    OriginalName        = "originalName",
                    RequestReduceFileId = id
                };

                testable.ClassUnderTest.Save(file2);

                var savedFile = testable.ClassUnderTest.SingleOrDefault <RequestReduceFile>(id);

                Assert.Equal(2, savedFile.Content[0]);
                Assert.True(savedFile.LastUpdated > new DateTime(2011, 1, 1));
            }
コード例 #4
0
            public void WillNotReturnExpiredKeys()
            {
                var testable = new TestableRepository();
                var builder  = new RequestReduce.Utilities.UriBuilder(testable.Mock <IRRConfiguration>().Object);
                var id       = Guid.NewGuid();
                var id2      = Guid.NewGuid();
                var file     = new RequestReduceFile()
                {
                    Content             = new byte[] { 1 },
                    FileName            = builder.BuildResourceUrl <CssResource>(id, new byte[] { 1 }),
                    Key                 = id,
                    LastUpdated         = DateTime.Now,
                    OriginalName        = "originalName",
                    RequestReduceFileId = Hasher.Hash(new byte[] { 1 }),
                    IsExpired           = true
                };
                var file2 = new RequestReduceFile()
                {
                    Content             = new byte[] { 1 },
                    FileName            = builder.BuildResourceUrl <CssResource>(id2, new byte[] { 2 }),
                    Key                 = id2,
                    LastUpdated         = DateTime.Now,
                    OriginalName        = "originalName2",
                    RequestReduceFileId = Hasher.Hash(new byte[] { 2 })
                };

                testable.ClassUnderTest.Save(file);
                testable.ClassUnderTest.Save(file2);

                var result = testable.ClassUnderTest.GetActiveFiles();

                Assert.Equal(1, result.Count());
                Assert.Equal(file2.FileName, result.First());
                Assert.True(result.Contains(file2.FileName));
            }
コード例 #5
0
            public void WillSaveCssToRepository()
            {
                var testable           = new TestableSqlServerStore();
                var content            = new byte[] { 1 };
                var url                = "url";
                var originalUrls       = "originalUrls";
                RequestReduceFile file = null;

                testable.Mock <IFileRepository>().Setup(x => x.Save(It.IsAny <RequestReduceFile>())).Callback
                <RequestReduceFile>(x => file = x);
                testable.Mock <IUriBuilder>().Setup(x => x.ParseFileName(url)).Returns("file.css");
                var key = Guid.NewGuid();
                var id  = Hasher.Hash("file.css");

                testable.Mock <IUriBuilder>().Setup(x => x.ParseKey(url)).Returns(key);

                testable.ClassUnderTest.Save(content, url, originalUrls);

                Assert.Equal(content, file.Content);
                Assert.Equal("file.css", file.FileName);
                Assert.Equal(key, file.Key);
                Assert.True(DateTime.Now.Subtract(file.LastUpdated).TotalMilliseconds < 1000);
                Assert.Equal(originalUrls, file.OriginalName);
                Assert.Equal(id, file.RequestReduceFileId);
            }
コード例 #6
0
            public void WillExpireDbFileEntity()
            {
                var testable = new TestableSqlServerStore();
                var key      = Guid.NewGuid();
                var file1    = new RequestReduceFile()
                {
                    IsExpired = false, RequestReduceFileId = Guid.NewGuid()
                };
                var file2 = new RequestReduceFile()
                {
                    IsExpired = false, RequestReduceFileId = Guid.NewGuid()
                };

                testable.Mock <IFileRepository>().Setup(x => x.GetFilesFromKey(key)).Returns(new RequestReduceFile[] { file1, file2 });
                bool expire1 = false;
                bool expire2 = false;

                testable.Mock <IFileRepository>().Setup(x => x.Update(file1)).Callback <RequestReduceFile>(
                    y => expire1 = y.IsExpired);
                testable.Mock <IFileRepository>().Setup(x => x.Update(file2)).Callback <RequestReduceFile>(
                    y => expire2 = y.IsExpired);

                testable.ClassUnderTest.Flush(key);

                Assert.True(expire1);
                Assert.True(expire2);
            }
コード例 #7
0
            public void WillSaveToDatabase()
            {
                var testable = new TestableRepository();
                var id       = Guid.NewGuid();
                var file     = new RequestReduceFile()
                {
                    Content             = new byte[] { 1 },
                    FileName            = "fileName",
                    Key                 = Guid.NewGuid(),
                    LastUpdated         = DateTime.Now,
                    OriginalName        = "originalName",
                    RequestReduceFileId = id
                };

                testable.ClassUnderTest.Save(file);

                var savedFile = testable.ClassUnderTest[id];

                Assert.Equal(file.Content.Length, savedFile.Content.Length);
                Assert.Equal(file.Content[0], savedFile.Content[0]);
                Assert.Equal(file.FileName, savedFile.FileName);
                Assert.Equal(file.Key, savedFile.Key);
                Assert.Equal(file.OriginalName, savedFile.OriginalName);
                Assert.Equal(file.RequestReduceFileId, savedFile.RequestReduceFileId);
                Assert.Equal(file.LastUpdated, savedFile.LastUpdated);
            }
コード例 #8
0
            public void WillFlushAllKeysWhenPassedGuidIsEmpty()
            {
                var testable  = new TestableSqlServerStore();
                var guid1     = Guid.NewGuid();
                var guid2     = Guid.NewGuid();
                var sig1      = Guid.NewGuid().RemoveDashes();
                var sig2      = Guid.NewGuid().RemoveDashes();
                var fileName1 = "1" + new CssResource().FileName;
                var fileName2 = "2" + new CssResource().FileName;

                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.ParseKey(fileName1)).Returns(guid1);
                testable.Mock <IUriBuilder>().Setup(x => x.ParseKey(fileName2)).Returns(guid2);
                testable.Mock <IUriBuilder>().Setup(x => x.ParseSignature(fileName1)).Returns(sig1);
                testable.Mock <IUriBuilder>().Setup(x => x.ParseSignature(fileName2)).Returns(sig2);
                testable.Mock <IFileRepository>().Setup(x => x.GetActiveFiles()).Returns(new List <string>()
                {
                    fileName1,
                    fileName2
                });
                var file1 = new RequestReduceFile()
                {
                    IsExpired = false, RequestReduceFileId = guid1
                };
                var file2 = new RequestReduceFile()
                {
                    IsExpired = false, RequestReduceFileId = guid2
                };

                testable.Mock <IFileRepository>().Setup(x => x.GetFilesFromKey(guid1)).Returns(new RequestReduceFile[] { file1 });
                testable.Mock <IFileRepository>().Setup(x => x.GetFilesFromKey(guid2)).Returns(new RequestReduceFile[] { file2 });
                bool expire1 = false;
                bool expire2 = false;

                testable.Mock <IFileRepository>().Setup(x => x.Update(file1)).Callback <RequestReduceFile>(
                    y => expire1 = y.IsExpired);
                testable.Mock <IFileRepository>().Setup(x => x.Update(file2)).Callback <RequestReduceFile>(
                    y => expire2 = y.IsExpired);

                testable.ClassUnderTest.Flush(Guid.Empty);

                Assert.True(expire1);
                Assert.True(expire2);
                RRContainer.Current = null;
            }
コード例 #9
0
            public void WillThrowIfContentIsNull()
            {
                var testable = new TestableRepository();
                var id       = Guid.NewGuid();
                var file     = new RequestReduceFile()
                {
                    Content             = null,
                    FileName            = "filename",
                    Key                 = Guid.NewGuid(),
                    LastUpdated         = DateTime.Now,
                    OriginalName        = "originalName",
                    RequestReduceFileId = id
                };

                var ex = Record.Exception(() => testable.ClassUnderTest.Save(file));

                Assert.NotNull(ex);
            }
コード例 #10
0
            public void WillPullTheFilesWithTheSpecifiedKey()
            {
                var testable = new TestableRepository();
                var id       = Guid.NewGuid();
                var id2      = Guid.NewGuid();
                var file     = new RequestReduceFile()
                {
                    Content             = new byte[] { 1 },
                    FileName            = new CssResource().FileName,
                    Key                 = id,
                    LastUpdated         = DateTime.Now,
                    OriginalName        = "originalName",
                    RequestReduceFileId = Guid.NewGuid()
                };
                var file2 = new RequestReduceFile()
                {
                    Content             = new byte[] { 1 },
                    FileName            = new CssResource().FileName,
                    Key                 = id,
                    LastUpdated         = DateTime.Now,
                    RequestReduceFileId = Guid.NewGuid()
                };
                var file3 = new RequestReduceFile()
                {
                    Content             = new byte[] { 1 },
                    FileName            = new CssResource().FileName,
                    Key                 = id2,
                    LastUpdated         = DateTime.Now,
                    OriginalName        = "originalName2",
                    RequestReduceFileId = Guid.NewGuid()
                };

                testable.ClassUnderTest.Save(file);
                testable.ClassUnderTest.Save(file2);
                testable.ClassUnderTest.Save(file3);

                var result = testable.ClassUnderTest.GetFilesFromKey(id);

                Assert.Equal(2, result.Count());
                Assert.True(result.All(x => x.Key == id));

                Assert.NotNull(result.Single(f => f.RequestReduceFileId == file.RequestReduceFileId));
                Assert.NotNull(result.Single(f => f.RequestReduceFileId == file2.RequestReduceFileId));
            }
コード例 #11
0
            public void WillReturnMostRecentActiveEntryPerKey()
            {
                var testable = new TestableRepository();
                var builder  = new RequestReduce.Utilities.UriBuilder(testable.Mock <IRRConfiguration>().Object);
                var id       = Guid.NewGuid();
                var id2      = Guid.NewGuid();
                var file     = new RequestReduceFile()
                {
                    Content             = new byte[] { 1 },
                    FileName            = builder.BuildResourceUrl <CssResource>(id, new byte[] { 1 }),
                    Key                 = id,
                    LastUpdated         = DateTime.Now,
                    OriginalName        = "originalName",
                    RequestReduceFileId = Hasher.Hash(new byte[] { 1 }),
                    IsExpired           = true
                };
                var file2 = new RequestReduceFile()
                {
                    Content             = new byte[] { 1 },
                    FileName            = builder.BuildResourceUrl <CssResource>(id, new byte[] { 2 }),
                    Key                 = id,
                    LastUpdated         = DateTime.Now.Subtract(new TimeSpan(0, 0, 2)),
                    OriginalName        = "originalName2",
                    RequestReduceFileId = Hasher.Hash(new byte[] { 2 })
                };
                var file3 = new RequestReduceFile()
                {
                    Content             = new byte[] { 1 },
                    FileName            = builder.BuildResourceUrl <CssResource>(id, new byte[] { 3 }),
                    Key                 = id,
                    LastUpdated         = DateTime.Now.Subtract(new TimeSpan(0, 0, 3)),
                    OriginalName        = "originalName2",
                    RequestReduceFileId = Hasher.Hash(new byte[] { 3 })
                };
                var file4 = new RequestReduceFile()
                {
                    Content             = new byte[] { 1 },
                    FileName            = builder.BuildResourceUrl <CssResource>(id2, new byte[] { 4 }),
                    Key                 = id2,
                    LastUpdated         = DateTime.Now.Subtract(new TimeSpan(0, 0, 3)),
                    OriginalName        = "originalName2",
                    RequestReduceFileId = Hasher.Hash(new byte[] { 4 })
                };
                var file5 = new RequestReduceFile()
                {
                    Content             = new byte[] { 1 },
                    FileName            = "file.png",
                    Key                 = id2,
                    LastUpdated         = DateTime.Now,
                    OriginalName        = "originalName2",
                    RequestReduceFileId = Hasher.Hash(new byte[] { 5 })
                };

                testable.ClassUnderTest.Save(file);
                testable.ClassUnderTest.Save(file2);
                testable.ClassUnderTest.Save(file3);
                testable.ClassUnderTest.Save(file4);
                testable.ClassUnderTest.Save(file5);

                var result = testable.ClassUnderTest.GetActiveFiles();

                Assert.Equal(2, result.Count());
                Assert.True(result.Contains(file2.FileName));
                Assert.True(result.Contains(file4.FileName));
            }