public async Task Scraper_ModelsMatch() { // Arrange var systemTime = new Mock <ISystemTime>(); var utcNowA = new DateTimeOffset(2015, 1, 1, 8, 15, 30, TimeSpan.Zero); var utcNowB = utcNowA.AddMinutes(15); systemTime .SetupSequence(x => x.UtcNow) .Returns(utcNowA) .Returns(utcNowB) .Returns(utcNowA) .Returns(utcNowB); var scheduleReferenceA = BuildScheduleReference(1); var scheduleA = BuildSchedule(1); var mapA = BuildMap(1); var scheduleReferenceB = BuildScheduleReference(2); var scheduleB = BuildSchedule(2); var mapB = BuildMap(2); var client = new Mock <IClient>(); client.Setup(x => x.GetScheduleReferencesAsync()).ReturnsAsync(new [] { scheduleReferenceA, scheduleReferenceB }); client.Setup(x => x.GetScheduleAsync(scheduleReferenceA)).ReturnsAsync(scheduleA); client.Setup(x => x.GetMapAsync(scheduleA.MapReference)).ReturnsAsync(mapA); client.Setup(x => x.GetScheduleAsync(scheduleReferenceB)).ReturnsAsync(scheduleB); client.Setup(x => x.GetMapAsync(scheduleB.MapReference)).ReturnsAsync(mapB); var target = new Scraper(systemTime.Object, client.Object); var textWriter = new StringWriter(); var jsonWriter = new JsonTextWriter(textWriter); var writer = new JsonScrapeResultWriter(jsonWriter); // Act var scrapeResult = await target.ScrapeAsync(); await target.RealTimeScrapeAsync(writer); // Assert var deserialize = JsonConvert.DeserializeObject <ScrapeResult>(textWriter.ToString()); deserialize.ShouldBeEquivalentTo(scrapeResult); }
private static async Task <int> MainAsync(string[] args) { var result = Parser.Default.ParseArguments <ScrapeOptions, CollapseOptions>(args); if (result.Tag == ParserResultType.NotParsed) { return(1); } var parsedResult = (Parsed <object>)result; if (parsedResult.Value is ScrapeOptions) { // initialize var systemTime = new SystemTime(); var httpClient = new HttpClient(); var connectorClient = new Client(httpClient); var connectorScraper = new Scraper(systemTime, connectorClient); var jsonWriter = new JsonTextWriter(Console.Out); var writer = new JsonScrapeResultWriter(jsonWriter); // act await connectorScraper.RealTimeScrapeAsync(writer); return(0); } if (parsedResult.Value is CollapseOptions) { // initialize var options = (CollapseOptions)parsedResult.Value; var pathBuilder = new PathBuilder(); var collapser = new Collapser(pathBuilder); IAsyncEqualityComparer <Stream> comparer; switch (options.ComparisonType) { case ComparisonType.ScrapeResult: comparer = new ScrapeResultEqualityComparer(); break; default: comparer = new ZipArchiveEqualityComparer(); break; } var request = new CollapseRequest { ConnectionString = options.ConnectionString, PathFormat = options.PathFormat, Container = options.Container, Trace = Console.Out, Comparer = new AdapterCollapserComparer(StringComparer.Ordinal, comparer) }; // act await collapser.CollapseAsync(request); return(0); } return(0); }