// TODO: split into smaller commands public async Task ExecuteAsync(CancellationToken cancellationToken) { var settings = LoadSettings(); var url = settings.Url; var targetPath = Path.Combine(FileHelper.GetApplicationDataPath(), "altbau.xhtml"); var webpage = await WebsiteDownloader.GetWebsiteOrNullWithPolicyAndLoggingAsync(url, targetPath, cancellationToken); if (webpage == null) { return; } if (File.Exists(targetPath)) { var cachedWebpage = await HtmlDocumentFactory.FromFileAsync(targetPath, cancellationToken); var areEqual = HtmlDocumentComparer.Equals(webpage, cachedWebpage); if (areEqual) { Log.Information("Website has not changed"); return; } NotifyHelper.ShowNotificationThatWebsiteHasChanged("Website has changed", url); Log.Information("Parsing altbau wohnungen document."); var offers = AltbauWohnungenParser.ParseAltbauWohnungenDocumentWithLogging(webpage).ToArray(); Log.Information($"Found {offers.Length} offers."); var interestingOffers = AltbauWohnungenFilter.Filter(offers).ToArray(); Log.Information($"Found {interestingOffers.Length} interesting offers."); var postedHrefsFilePath = Path.Combine(FileHelper.GetApplicationDataPath(), "hrefs.txt"); var newOffers = interestingOffers.FilterNewOffers(postedHrefsFilePath).ToArray(); Log.Information($"Found {newOffers.Length} new and interesting offers."); //if (!SettingsManager.IsFirstRun) //{ await RegisterForOffersAndInformUserAsync(settings, newOffers, cancellationToken); //} //SettingsManager.IsFirstRun = false; Log.Information("Saving lines in file."); var lines = newOffers.Select(o => o.Href); await FileHelper.CreateFileIfNotExistsAndAppendLinesToFileAsync(postedHrefsFilePath, lines); File.Delete(targetPath); } await webpage.SaveHtmlDocumentToFileWithLoggingAsync(targetPath, cancellationToken); }
public void MustThrowInvalidOperationExceptionWhenSettingsIsNotYetSet() { var settingsManager = new SettingsManager(); var infos = new [] { An.AltbauWohnungInfo() }; var filter = new AltbauWohnungenFilter(settingsManager); Assert.That(() => filter.Filter(infos), Throws.InvalidOperationException); }
public void MustFilterResults() { var settingsManager = An.SettingsManager(); settingsManager.Settings = An.Settings(); var info1 = An.AltbauWohnungInfo(); var info2 = An.AltbauWohnungInfo2(); var infos = new[] { info1, info2, info1 }; var filter = new AltbauWohnungenFilter(settingsManager); var result = filter.Filter(infos); Assert.That(result, Is.Not.Null, "result was null"); Assert.That(result.Count(), Is.EqualTo(1), "result was not properly filtered"); Assert.That(result.First(), Is.EqualTo(info2)); }