Esempio n. 1
0
        // 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));
            }