示例#1
0
        public void Test_Extract_Default()
        {
            var source = new Mock <ISourceSpecification>();

            source.Setup(x => x.GetDiscriminatingFilePairs()).Returns(() => { return(new [] { default(Pair) }); });

            var downloader = new Mock <IDownloader>();

            downloader.Setup(x => x.TryDownload(default(FormatObject))).Returns(default(TryDownloadResult));
            downloader.SetupAllProperties();

            var target = new Extracter()
            {
                TempDownloadLocation = TempLocation,
                Source     = source.Object,
                Downloader = downloader.Object,
            };

            var expected = new FileNameExtractionResult[] { };

            var actual = target.Extract(default(FormatObject));

            Assert.IsTrue(actual.SequenceEqual(expected.Cast <IExtractionResult <FormatObject> >()));

            // twice - as attempts to load the default datetime twice in a row
            downloader.Verify(x => x.TryDownload(default(FormatObject)), Times.Exactly(2));
        }
示例#2
0
        public void Extracter_Extract_Default()
        {
            var format = new FormatObject("test", DateTime.Now, TimeZoneInfo.Utc);

            var source = new Mock <ISourceSpecification>();

            source.Setup(x => x.GetUpperBoundExclusive(It.IsAny <FormatObject>())).Returns <FormatObject>(y => y.DateTime.AddDays(1));

            var downloader = new Mock <IDownloader>();

            downloader.Setup(x => x.TryDownload(default(FormatObject))).Returns(default(TryDownloadResult));
            downloader.SetupAllProperties();

            var formatIterator = new Mock <IFormatIterator>();

            formatIterator.Setup(x => x.GetNextCandidates(It.IsAny <FormatObject>()))
            .Returns <FormatObject>(y =>
            {
                if (y.DateTime == default(FormatObject).DateTime)
                {
                    return(new[] { format });
                }
                else
                {
                    var ret = y;
                    ret.DateTime.AddDays(1);
                    return(new[] { ret });
                }
            });

            var downloadAggregator = new DownloadAggregator()
            {
                NumberOfFilesToAggregate = 2,
                Source         = source.Object,
                Downloader     = downloader.Object,
                FormatIterator = formatIterator.Object
            };

            downloadAggregator.Initialize();

            var target = new Extracter()
            {
                Source = source.Object,
                TempDownloadLocation = TempLocation,
                Aggregator           = downloadAggregator
            };

            var expected = new FileNameExtractionResult[] { };

            var actual = target.Extract(default(FormatObject));

            AreEqual(expected, actual.Cast <FileNameExtractionResult>());

            formatIterator.Verify(x => x.GetNextCandidates(default(FormatObject)), Times.Exactly(1));
            downloader.Verify(x => x.TryDownload(format), Times.Exactly(1));
        }
示例#3
0
        public void Test_Extract_OnlyStopsWhenCurrentDate()
        {
            var source = new Mock <ISourceSpecification>();

            source.Setup(x => x.GetDiscriminatingFilePairs()).Returns(() => { return(new[] { default(Pair) }); });

            var formatObject1 = new FormatObject("test", DateTime.Now.AddDays(-2));
            var formatObject2 = new FormatObject("test", DateTime.Now.AddDays(-1));

            var downloader = new Mock <IDownloader>();

            downloader.Setup(x => x.TryDownload(default(FormatObject))).Returns(
                new TryDownloadResult()
            {
                IsSuccess           = false,
                DestinationFile     = new FileInfo(@"d:\test.test"),
                FormatObject        = formatObject1,
                UpperBoundExclusive = DateTimeOffset.Now.AddDays(-1),
            });

            downloader.Setup(x => x.TryDownload(It.Is <FormatObject>(y => y.LocalDateTime == formatObject1.LocalDateTime))).Returns(
                new TryDownloadResult()
            {
                IsSuccess           = false,
                DestinationFile     = new FileInfo(@"d:\test.test"),
                FormatObject        = formatObject2,
                UpperBoundExclusive = DateTimeOffset.Now.AddDays(0),
            });

            downloader.Setup(x => x.TryDownload(It.Is <FormatObject>(y => y.LocalDateTime == formatObject2.LocalDateTime))).Returns(
                new TryDownloadResult()
            {
                IsSuccess           = false,
                DestinationFile     = new FileInfo(@"d:\test.test"),
                FormatObject        = formatObject2,
                UpperBoundExclusive = DateTimeOffset.Now.AddDays(1),
            });

            var target = new Extracter()
            {
                TempDownloadLocation = TempLocation,
                Source     = source.Object,
                Downloader = downloader.Object,
            };

            var expected = new FileNameExtractionResult[] {};

            var actual = target.Extract(default(FormatObject));

            Assert.IsTrue(actual.SequenceEqual(expected.Cast <IExtractionResult <FormatObject> >()));

            downloader.Verify(x => x.TryDownload(default(FormatObject)), Times.Exactly(1));
            downloader.Verify(x => x.TryDownload(formatObject1), Times.Exactly(1));
            downloader.Verify(x => x.TryDownload(formatObject2), Times.Exactly(1));
        }
示例#4
0
        public void Test_Extract_ExtractBreaksOutOfLoopIfAttemptSameDownloadTwice()
        {
            var source = new Mock <ISourceSpecification>();

            source.Setup(x => x.GetDiscriminatingFilePairs()).Returns(() => { return(new[] { default(Pair) }); });

            var formatObject = new FormatObject("test", new DateTime(2003, 1, 1));

            var downloader = new Mock <IDownloader>();

            downloader.Setup(x => x.TryDownload(default(FormatObject)))
            .Returns(new TryDownloadResult()
            {
                IsSuccess       = true,
                DestinationFile = new FileInfo(@"d:\test.test"),
                FormatObject    = formatObject,
            });

            var target = new Extracter()
            {
                TempDownloadLocation = TempLocation,
                Source     = source.Object,
                Downloader = downloader.Object,
            };

            var expected = new FileNameExtractionResult[]
            {
                new FileNameExtractionResult()
                {
                    FileFullName    = @"d:\test.test",
                    Pair            = default(Pair),
                    CurrentPosition = formatObject,
                    IsSuccess       = true
                },
            };

            var actual = target.Extract(default(FormatObject));

            Assert.IsTrue(actual.SequenceEqual(expected.Cast <IExtractionResult <FormatObject> >()));

            downloader.Verify(x => x.TryDownload(default(FormatObject)), Times.Exactly(1));
            downloader.Verify(x => x.TryDownload(formatObject), Times.Exactly(1));
        }
示例#5
0
        public void Test_Extract_EscapesIfDownloadSameTwice()
        {
            var source = new Mock <ISourceSpecification>();

            source.Setup(x => x.GetDiscriminatingFilePairs()).Returns(() => { return(new[] { default(Pair) }); });

            var downloader = new Mock <IDownloader>();

            downloader.Setup(x => x.TryDownload(default(FormatObject)))
            .Returns(new TryDownloadResult()
            {
                IsSuccess       = true,
                DestinationFile = new FileInfo(@"d:\test.test"),
            });

            var target = new Extracter()
            {
                TempDownloadLocation = TempLocation,
                Source     = source.Object,
                Downloader = downloader.Object,
            };

            var expected = new FileNameExtractionResult[]
            {
                new FileNameExtractionResult()
                {
                    FileFullName = @"d:\test.test", Pair = default(Pair), CurrentPosition = default(FormatObject)
                },
            };

            var actual = target.Extract(default(FormatObject));

            Task.Factory.StartNew(() => actual.ToList()).Wait(TimeSpan.FromSeconds(1));

            downloader.Verify(x => x.TryDownload(default(FormatObject)), Times.Exactly(2));
        }
示例#6
0
        public void Extracter_Extract_Sequence()
        {
            var firstDate = new DateTimeOffset(new DateTime(2001, 1, 1), TimeSpan.FromHours(0));

            var formatObject1 = new FormatObject("test", DateTime.Now.AddDays(-2), TimeZoneInfo.FindSystemTimeZoneById("W. Europe Standard Time"));
            var formatObject2 = new FormatObject("test", DateTime.Now.AddDays(-1), TimeZoneInfo.FindSystemTimeZoneById("W. Europe Standard Time"));
            var formatObject3 = new FormatObject("test", DateTime.Now.AddDays(0), TimeZoneInfo.FindSystemTimeZoneById("W. Europe Standard Time"));
            var formatObject4 = new FormatObject("test", DateTime.Now.AddDays(1), TimeZoneInfo.FindSystemTimeZoneById("W. Europe Standard Time"));

            var source = new Mock <ISourceSpecification>();

            source.Setup(x => x.GetUpperBoundExclusive(It.IsAny <FormatObject>())).Returns <FormatObject>(y => y.DateTime.AddDays(1));
            source.SetupGet(x => x.FirstDateTimeOffset).Returns(firstDate);
            source.Setup(x => x.GetPossibleFormatObjects(firstDate)).Returns(new[] { formatObject1 });

            var downloadAggregator = new Mock <IDownloadAggregator>();

            downloadAggregator.Setup(x => x.DownloadFirst(It.Is <FormatObject>(y => y.DateTime == formatObject1.DateTime))).Returns(new DownloadAggregatorResult()
            {
                IsSuccess       = false,
                CurrentPosition = formatObject1,
            });

            downloadAggregator.Setup(x => x.DownloadNext(It.Is <FormatObject>(y => y.DateTime == formatObject1.DateTime))).Returns(new DownloadAggregatorResult()
            {
                IsSuccess        = true,
                CurrentPosition  = formatObject2,
                DestinationFiles = new[] { new FileInfo(@"d:\test1.test"), new FileInfo(@"d:\test2.test") }
            });

            downloadAggregator.Setup(x => x.DownloadNext(It.Is <FormatObject>(y => y.DateTime == formatObject2.DateTime))).Returns(new DownloadAggregatorResult()
            {
                IsSuccess        = true,
                CurrentPosition  = formatObject3,
                DestinationFiles = new[] { new FileInfo(@"d:\test2.test"), new FileInfo(@"d:\test3.test") }
            });

            downloadAggregator.Setup(x => x.DownloadNext(It.Is <FormatObject>(y => y.DateTime == formatObject3.DateTime))).Returns(new DownloadAggregatorResult()
            {
                IsSuccess        = true,
                CurrentPosition  = formatObject4,
                DestinationFiles = new[] { new FileInfo(@"d:\test3.test"), new FileInfo(@"d:\test4.test") }
            });


            var target = new Extracter()
            {
                Source = source.Object,
                TempDownloadLocation = TempLocation,
                Aggregator           = downloadAggregator.Object
            };

            var expected = new FileNameExtractionResult[]
            {
                new FileNameExtractionResult()
                {
                    FileFullNames   = new [] { @"d:\test1.test", @"d:\test2.test" },
                    CurrentPosition = formatObject2,
                    IsSuccess       = true
                },
                new FileNameExtractionResult()
                {
                    FileFullNames   = new [] { @"d:\test2.test", @"d:\test3.test" },
                    CurrentPosition = formatObject3,
                    IsSuccess       = true
                },
            };

            var actual = target.Extract(default(FormatObject));

            AreEqual(expected, actual.Cast <FileNameExtractionResult>());
            downloadAggregator.Verify(x => x.Initialize(), Times.Once());
            source.Verify(x => x.GetPossibleFormatObjects(firstDate), Times.Once());
            downloadAggregator.Verify(x => x.DownloadFirst(formatObject1), Times.Once());
            downloadAggregator.Verify(x => x.DownloadNext(formatObject1), Times.Once());
            downloadAggregator.Verify(x => x.DownloadNext(formatObject2), Times.Once());
            downloadAggregator.Verify(x => x.DownloadNext(formatObject3), Times.Never());
            downloadAggregator.Verify(x => x.DownloadNext(formatObject4), Times.Never());
        }
示例#7
0
        public void Extracter_Extract_OnlyStopsWhenCurrentDateNotOnDownloadFail()
        {
            var source = new Mock <ISourceSpecification>();

            source.Setup(x => x.GetUpperBoundExclusive(It.IsAny <FormatObject>())).Returns <FormatObject>((x) => x.DateTime.AddDays(1));

            var formatObject1 = new FormatObject("test", DateTime.Now.AddDays(-2), TimeZoneInfo.FindSystemTimeZoneById("W. Europe Standard Time"));
            var formatObject2 = new FormatObject("test", DateTime.Now.AddDays(-1), TimeZoneInfo.FindSystemTimeZoneById("W. Europe Standard Time"));
            var formatObject3 = new FormatObject("test", DateTime.Now.AddDays(0), TimeZoneInfo.FindSystemTimeZoneById("W. Europe Standard Time"));
            var formatObject4 = new FormatObject("test", DateTime.Now.AddDays(1), TimeZoneInfo.FindSystemTimeZoneById("W. Europe Standard Time"));

            var downloader = new Mock <IDownloader>();

            downloader.Setup(x => x.TryDownload(default(FormatObject))).Returns(
                new TryDownloadResult()
            {
                IsSuccess       = false,
                DestinationFile = new FileInfo(@"d:\test.test"),
            });

            downloader.Setup(x => x.TryDownload(It.Is <FormatObject>(y => y.DateTime == formatObject1.DateTime))).Returns(
                new TryDownloadResult()
            {
                IsSuccess       = false,
                DestinationFile = new FileInfo(@"d:\test.test"),
            });

            downloader.Setup(x => x.TryDownload(It.Is <FormatObject>(y => y.DateTime == formatObject2.DateTime))).Returns(
                new TryDownloadResult()
            {
                IsSuccess       = false,
                DestinationFile = new FileInfo(@"d:\test.test"),
            });

            downloader.Setup(x => x.TryDownload(It.Is <FormatObject>(y => y.DateTime == formatObject3.DateTime))).Returns(
                new TryDownloadResult()
            {
                IsSuccess       = false,
                DestinationFile = new FileInfo(@"d:\test.test"),
            });

            downloader.Setup(x => x.TryDownload(It.Is <FormatObject>(y => y.DateTime == formatObject4.DateTime))).Returns(
                new TryDownloadResult()
            {
                IsSuccess       = false,
                DestinationFile = new FileInfo(@"d:\test.test"),
            });

            var formatIterator = new Mock <IFormatIterator>();

            formatIterator.Setup(x => x.GetNextCandidates(default(FormatObject))).Returns(new[] { formatObject1 });
            formatIterator.Setup(x => x.GetNextCandidates(It.Is <FormatObject>(y => y.DateTime == formatObject1.DateTime))).Returns(new[] { formatObject2 });
            formatIterator.Setup(x => x.GetNextCandidates(It.Is <FormatObject>(y => y.DateTime == formatObject2.DateTime))).Returns(new[] { formatObject3 });
            formatIterator.Setup(x => x.GetNextCandidates(It.Is <FormatObject>(y => y.DateTime == formatObject3.DateTime))).Returns(new[] { formatObject4 });

            var downloadAggregator = new DownloadAggregator()
            {
                NumberOfFilesToAggregate = 2,
                Source         = source.Object,
                Downloader     = downloader.Object,
                FormatIterator = formatIterator.Object
            };

            downloadAggregator.Initialize();

            var target = new Extracter()
            {
                Source = source.Object,
                TempDownloadLocation = TempLocation,
                Aggregator           = downloadAggregator
            };

            var expected = new FileNameExtractionResult[] { };

            var actual = target.Extract(default(FormatObject));

            AreEqual(expected, actual.Cast <FileNameExtractionResult>());

            downloader.Verify(x => x.TryDownload(default(FormatObject)), Times.Exactly(0));
            downloader.Verify(x => x.TryDownload(formatObject1), Times.Exactly(1));
            downloader.Verify(x => x.TryDownload(formatObject2), Times.Exactly(1));
            downloader.Verify(x => x.TryDownload(formatObject3), Times.Exactly(1));
            downloader.Verify(x => x.TryDownload(formatObject4), Times.Exactly(0));
        }