public void TestInteractorReturnsContentFromInformationSource()
        {
            var repository = new WebContentRepositoryReturnsSpecificContentStub("emptyHtml.stub");
            var interactor = new GetInformationItemInteractor(repository);
            var response   = interactor.Execute(new GetInformationItemInteractorRequest());

            Assert.Equal("<html></html>", response.WebContent);
        }
        public void TestCallsRepositoryToGetContentFromInformationSource()
        {
            var interactor = new GetInformationItemInteractor(this.webContentRepositorySpy);

            interactor.Execute(new GetInformationItemInteractorRequest());

            Assert.Equal(1, this.webContentRepositorySpy.GetWebContentAsStringCalls);
        }
        public void TestInteractorUsesUriFromRequestToGetWebContent()
        {
            var interactor = new GetInformationItemInteractor(this.webContentRepositorySpy);

            interactor.Execute(new GetInformationItemInteractorRequest
            {
                Uri = new Uri("http://store.steampowered.com/app/22370/Fallout_3_Game_of_the_Year_Edition/")
            });

            Assert.Equal(
                "http://store.steampowered.com/app/22370/Fallout_3_Game_of_the_Year_Edition/",
                this.webContentRepositorySpy.LastRequestedUri.ToString()
                );
        }
        public void TestInteractorReturnsEmptyPropertyValueWhenParsingCommandIsReturnEmpty()
        {
            var interactor = new GetInformationItemInteractor(new WebContentRepositoryReturnsSpecificContentStub("Fallout4Goty.stub"));
            var response   = interactor.Execute(new GetInformationItemInteractorRequest
            {
                ContentParsingCommands = new[] {
                    new ParseCommand {
                        Type             = ParseCommandType.ReturnEmpty,
                        TargetPropertyId = "Example"
                    },
                }
            });

            Assert.Equal(new[] { string.Empty }, response.Properties["Example"]);
        }
        public void TestInteractorReturnsPriceInformationFromWithinHtmlUsingCssParsingCommands()
        {
            var interactor = new GetInformationItemInteractor(new WebContentRepositoryReturnsSpecificContentStub("Fallout4Goty.stub"));
            var response   = interactor.Execute(new GetInformationItemInteractorRequest
            {
                ContentParsingCommands = new[] {
                    new ParseCommand {
                        Selector = "meta[itemProp=price]", TargetPropertyId = "SalePrices", Attribute = "content"
                    },
                    new ParseCommand {
                        Selector = "meta[itemProp=priceCurrency]", TargetPropertyId = "PriceCurrencys", Attribute = "content"
                    }
                }
            });

            Assert.Equal(new[] { "9,99" }, response.Properties["SalePrices"]);
            Assert.Equal(new[] { "EUR" }, response.Properties["PriceCurrencys"]);
        }
        public void TestInteractorReturnsImagesFromWithWithinHtmlUsingCssParsingCommands()
        {
            var interactor = new GetInformationItemInteractor(new WebContentRepositoryReturnsSpecificContentStub("Fallout4Goty.stub"));
            var response   = interactor.Execute(new GetInformationItemInteractorRequest
            {
                ContentParsingCommands = new[] {
                    new ParseCommand
                    {
                        Selector         = ".highlight_screenshot_link",
                        Attribute        = "href",
                        TargetPropertyId = "Images"
                    }
                }
            });

            Assert.Equal(
                new[] {
                "http://cdn.edgecast.steamstatic.com/steam/apps/22370/ss_87fb57e11912a692f29614f88411d0db2cba405a.1920x1080.jpg?t=1449019604",
                "http://cdn.edgecast.steamstatic.com/steam/apps/22370/ss_d770133d0a0c1b9b73fa31f20f29fe6617b73cfb.1920x1080.jpg?t=1449019604",
                "http://cdn.edgecast.steamstatic.com/steam/apps/22370/ss_2405f21839a5cec01918a5f6fe7cae0b80422107.1920x1080.jpg?t=1449019604",
                "http://cdn.edgecast.steamstatic.com/steam/apps/22370/ss_37398576af0f80af58744b56a24b8526833f2efb.1920x1080.jpg?t=1449019604",
                "http://cdn.edgecast.steamstatic.com/steam/apps/22370/ss_b37fe0d332ed8877e06a2b18efc95b1dab2a54af.1920x1080.jpg?t=1449019604",
                "http://cdn.edgecast.steamstatic.com/steam/apps/22370/ss_be899cfc4b2716f77d0a07737d519895ae0919f2.1920x1080.jpg?t=1449019604",
                "http://cdn.edgecast.steamstatic.com/steam/apps/22370/ss_bc45b3514bd9d10450e0f56cf6ca110d487ab9f1.1920x1080.jpg?t=1449019604",
                "http://cdn.edgecast.steamstatic.com/steam/apps/22370/ss_4ea123bae2967a081baf183f99af485a8fe54fd3.1920x1080.jpg?t=1449019604",
                "http://cdn.edgecast.steamstatic.com/steam/apps/22370/ss_da809b52f47085205a8eb1f116e22c73bee18c81.1920x1080.jpg?t=1449019604",
                "http://cdn.edgecast.steamstatic.com/steam/apps/22370/ss_e5eca12ac4678e10d7c0ee86ba6cb423e413ef58.1920x1080.jpg?t=1449019604",
                "http://cdn.edgecast.steamstatic.com/steam/apps/22370/ss_a6caf368d14ba1d5a2ad548ae419a05a7cced29d.1920x1080.jpg?t=1449019604",
                "http://cdn.edgecast.steamstatic.com/steam/apps/22370/ss_f4923635e94cd2c09799f797b5f89ac3dda2eb15.1920x1080.jpg?t=1449019604",
                "http://cdn.edgecast.steamstatic.com/steam/apps/22370/ss_ac1a49312f09178c78c3b4464cfc743bc4c380b1.1920x1080.jpg?t=1449019604",
                "http://cdn.edgecast.steamstatic.com/steam/apps/22370/ss_56f0c65d34f78a4b2b468fa71773ce297c18ba7a.1920x1080.jpg?t=1449019604",
                "http://cdn.edgecast.steamstatic.com/steam/apps/22370/ss_69399123132dcb4fe3691b4dd6b84077bf4da656.1920x1080.jpg?t=1449019604",
                "http://cdn.edgecast.steamstatic.com/steam/apps/22370/ss_18517b1865f2ea003836002dbdd4f88001a40913.1920x1080.jpg?t=1449019604",
                "http://cdn.edgecast.steamstatic.com/steam/apps/22370/ss_30d31f35608dcf8ad940eef06b06b72668a58c63.1920x1080.jpg?t=1449019604",
                "http://cdn.edgecast.steamstatic.com/steam/apps/22370/ss_417951e16be2418b9ea8294f9957d40723c20d83.1920x1080.jpg?t=1449019604",
                "http://cdn.edgecast.steamstatic.com/steam/apps/22370/ss_9ebd8b126b6b0e7f7de5ba46cd52e52079e0247f.1920x1080.jpg?t=1449019604",
                "http://cdn.edgecast.steamstatic.com/steam/apps/22370/ss_515508f4c22bbc5988765988b20ef3f9b042709f.1920x1080.jpg?t=1449019604",
                "http://cdn.edgecast.steamstatic.com/steam/apps/22370/ss_908adced631b238e775ea49caf086578efba22f5.1920x1080.jpg?t=1449019604",
                "http://cdn.edgecast.steamstatic.com/steam/apps/22370/ss_dd703a2d5c329d19a9caaca425c4e3d5d3ba1f8c.1920x1080.jpg?t=1449019604"
            },
                response.Properties["Images"].ToArray()
                );
        }
        public void TestInteractorReturnsReleaseDateFromWithinHtmlUsingCssParsingCommands()
        {
            var interactor = new GetInformationItemInteractor(new WebContentRepositoryReturnsSpecificContentStub("Fallout4Goty.stub"));
            var response   = interactor.Execute(new GetInformationItemInteractorRequest
            {
                ContentParsingCommands = new[] {
                    new ParseCommand
                    {
                        Selector         = ".release_date .date",
                        TargetPropertyId = "ReleaseDate"
                    }
                }
            });

            Assert.Equal(
                new[] { "13. Okt. 2009" },
                response.Properties["ReleaseDate"]
                );
        }
        public void TestInteractorReturnsPropertyFromFirstGroupWhenTargetIndexForRegexWasNotGiven()
        {
            var interactor = new GetInformationItemInteractor(new WebContentRepositoryReturnsSpecificContentStub("Fallout4Goty.stub"));
            var response   = interactor.Execute(new GetInformationItemInteractorRequest
            {
                ContentParsingCommands = new[] {
                    new ParseCommand {
                        Selector = ".block_content_inner",
                        ContentParsingCommand = new ParseCommand
                        {
                            Selector = @"<b>Publisher:<\/b>.*?<a.*?>(.*?)<\/a>",
                            Type     = ParseCommandType.RegEx
                        },
                        TargetPropertyId = "Publishers"
                    },
                }
            });

            Assert.Equal(new[] { "Bethesda Softworks" }, response.Properties["Publishers"]);
        }
        public void TestInteractorReturnsEmptyPropertyWhenRegexForParsingDoesNotReturnEnoughGroups()
        {
            var interactor = new GetInformationItemInteractor(new WebContentRepositoryReturnsSpecificContentStub("Fallout4Goty.stub"));
            var response   = interactor.Execute(new GetInformationItemInteractorRequest
            {
                ContentParsingCommands = new[] {
                    new ParseCommand {
                        Selector = ".block_content_inner",
                        ContentParsingCommand = new ParseCommand
                        {
                            Selector    = @"<b>Publisher:<\/b>.*?<a.*?>(.*?)<\/a>",
                            TargetIndex = 3,
                            Type        = ParseCommandType.RegEx
                        },
                        TargetPropertyId = "Publishers"
                    },
                }
            });

            Assert.Equal(new[] { string.Empty }, response.Properties["Publishers"]);
        }