Exemple #1
0
        public void GetCardPrice_ByName_DoesntExist()
        {
            string name = "Goblin War XXXX";

            CardPrice actual = priceStore.GetCardPrice(name);

            Assert.Null(actual);
        }
Exemple #2
0
        public void GetCardPrice_ByName()
        {
            string name = "Dr%";

            CardPrice actual = priceStore.GetCardPrice(name);

            Assert.NotNull(actual);
        }
Exemple #3
0
        public void GetCardPrice_ByNameSet_SetDoesntExist()
        {
            string name    = "Goblin War Paint";
            string setCode = "XXX";

            CardPrice actual = priceStore.GetCardPrice(name, setCode);

            Assert.Null(actual);
        }
Exemple #4
0
        public void GetCardPrice_ByNameSet()
        {
            string name    = "%a%";
            string setCode = "DTK";

            CardPrice actual = priceStore.GetCardPrice(name, setCode);

            Assert.NotNull(actual);
        }
        public void RemoveCardPrice_DoesntExist()
        {
            CardPrice card = new CardPrice()
            {
                Name        = "Remove me",
                SetCode     = "XXX",
                PriceDiff   = "1%",
                PriceLow    = "$1.00",
                PriceMid    = "$2.00",
                PriceFoil   = "$3.00",
                SearchName  = this.GetSearchValue("Remove me"),
                Url         = testDataTag,
                LastUpdated = DateTime.Now.AddDays(-5)
            };
            bool actual = priceStore.RemoveCardPrice(card);

            Assert.True(actual);
        }
Exemple #6
0
        public void FindAndModifyCardPrice_MultipleButUpdateOne()
        {
            CardPrice expected = new CardPrice()
            {
                Name         = "Find Modify 1",
                SetCode      = "XXX",
                PriceDiff    = "10%",
                PriceLow     = "$10.00",
                PriceMid     = "$20.00",
                PriceFoil    = "$30.00",
                SearchName   = this.GetSearchValue("Find Modify 1"),
                Url          = testDataTag,
                LastUpdated  = DateTime.Now,
                ImageUrl     = "http://localhost/1000.jpg",
                MultiverseId = 1000
            };

            CardPrice actual = priceStore.FindAndModifyCardPrice(expected, true);

            Assert.AreEqual(expected.PriceDiff, actual.PriceDiff);
            Assert.AreEqual(expected.PriceLow, actual.PriceLow);
            Assert.AreEqual(expected.PriceMid, actual.PriceMid);
            Assert.AreEqual(expected.PriceFoil, actual.PriceFoil);
        }
        private void AddTestData()
        {
            var client          = new MongoClient(connectionString);
            var server          = client.GetServer();
            var database        = server.GetDatabase(databaseName);
            var card_collection = database.GetCollection <CardPrice>("echo_prices");
            var set_collection  = database.GetCollection <SetPrice>("echo_set_prices");

            // Card 1
            CardPrice card1 = new CardPrice()
            {
                Name        = "Remove me 1",
                SetCode     = "XXX",
                PriceDiff   = "1%",
                PriceLow    = "$1.00",
                PriceMid    = "$2.00",
                PriceFoil   = "$3.00",
                SearchName  = this.GetSearchValue("Remove me 1"),
                Url         = testDataTag,
                LastUpdated = DateTime.Now.AddDays(-5)
            };

            CardPrice card2 = new CardPrice()
            {
                Name        = "Remove me 2",
                SetCode     = "XXX",
                PriceDiff   = "12%",
                PriceLow    = "$12.00",
                PriceMid    = "$22.00",
                PriceFoil   = "$32.00",
                SearchName  = this.GetSearchValue("Remove me 2"),
                Url         = testDataTag,
                LastUpdated = DateTime.Now.AddDays(-6)
            };

            CardPrice card3 = new CardPrice()
            {
                Name        = "Remove me 3",
                SetCode     = "XXX",
                PriceDiff   = "2%",
                PriceLow    = "$2.00",
                PriceMid    = "$3.00",
                PriceFoil   = "$4.00",
                SearchName  = this.GetSearchValue("Remove me 3"),
                Url         = testDataTag,
                LastUpdated = DateTime.Now.AddDays(-7)
            };

            cardPriceToRemove = new CardPrice()
            {
                Name        = "Remove me X",
                SetCode     = "XXX",
                PriceDiff   = "1%",
                PriceLow    = "$1.00",
                PriceMid    = "$2.00",
                PriceFoil   = "$3.00",
                SearchName  = this.GetSearchValue("Remove me X"),
                Url         = testDataTag,
                LastUpdated = DateTime.Now.AddDays(-2)
            };

            card_collection.Save(card1);
            card_collection.Save(card2);
            card_collection.Save(card3);
            card_collection.Save(cardPriceToRemove);

            SetPrice set1 = new SetPrice()
            {
                Name         = "Find Modify 1",
                SetCode      = "XXX",
                TotalCards   = 1,
                SetValue     = "$2.00",
                FoilSetValue = "$10.00",
                SearchName   = this.GetSearchValue("Find Modify 1"),
                Url          = testDataTag,
                LastUpdated  = DateTime.Now.AddDays(-1)
            };

            SetPrice set2 = new SetPrice()
            {
                Name         = "Find Modify 2",
                SetCode      = "YYY",
                TotalCards   = 1,
                SetValue     = "$2.00",
                FoilSetValue = "$10.00",
                SearchName   = this.GetSearchValue("Find Modify 2"),
                Url          = testDataTag,
                LastUpdated  = DateTime.Now.AddDays(-1)
            };

            SetPrice set3 = new SetPrice()
            {
                Name         = "Find Modify 1",
                SetCode      = "XXX",
                TotalCards   = 1,
                SetValue     = "$4.00",
                FoilSetValue = "$4.00",
                SearchName   = this.GetSearchValue("Find Modify 1"),
                Url          = testDataTag,
                LastUpdated  = DateTime.Now.AddDays(-1)
            };

            SetPrice setToRemove = new SetPrice()
            {
                Name         = "Remove me 1",
                SetCode      = "XXX",
                TotalCards   = 1,
                SetValue     = "$4.00",
                FoilSetValue = "$4.00",
                SearchName   = this.GetSearchValue("Remove me 1"),
                Url          = testDataTag,
                LastUpdated  = DateTime.Now.AddDays(-2)
            };

            set_collection.Save(set1);
            set_collection.Save(set2);
            set_collection.Save(set3);
            set_collection.Save(setToRemove);
        }
Exemple #8
0
        public void UpdatePrices(Set set)
        {
            if (set == null)
            {
                throw new ArgumentNullException("set");
            }

            string url = string.Format(cUrl, set.Code);

            this.mLoggingService.Info("Getting page for set '{0}' from '{1}'...",
                                      set.Code,
                                      url);

            string pageSource = this.mHttpClient.GetPageSource(url);

            this.mLoggingService.Trace(pageSource);

            HtmlDocument htmlDoc = new HtmlDocument();

            htmlDoc.LoadHtml(pageSource);

            this.mLoggingService.Debug("Loaded page into memory");

            // Create set price
            HtmlNode setPrices = htmlDoc.DocumentNode.SelectSingleNode(@"//*[contains(@class,'todaysprices')]");

            if (setPrices != null)
            {
                SetPrice setPrice = new SetPrice();

                setPrice.Name        = set.Name;
                setPrice.SetCode     = set.Code;
                setPrice.SearchName  = set.SearchName;
                setPrice.Url         = url;
                setPrice.LastUpdated = DateTime.Now;

                if (setPrices.SelectSingleNode("./div[@class=' mid'][1]/span[@class='numbers price_mid']") != null)
                {
                    string totalCards = setPrices.SelectSingleNode("./div[@class=' mid'][1]/span[@class='numbers price_mid']").InnerText;
                    totalCards = totalCards.Trim();

                    setPrice.TotalCards = Convert.ToInt32(totalCards);
                }

                if (setPrices.SelectSingleNode("./div[@class=' mid'][2]/span[@class='numbers price_mid']") != null)
                {
                    string setComplPrice = setPrices.SelectSingleNode("./div[@class=' mid'][2]/span[@class='numbers price_mid']").InnerText;
                    setComplPrice = setComplPrice.Trim();

                    setPrice.SetValue = setComplPrice;
                }

                if (setPrices.SelectSingleNode("./div[@class='foil']/span[@class='numbers price_low']") != null)
                {
                    string setFoilPrice = setPrices.SelectSingleNode("./div[@class='foil']/span[@class='numbers price_low']").InnerText;
                    setFoilPrice = setFoilPrice.Trim();

                    setPrice.FoilSetValue = setFoilPrice;
                }

                string msg = string.Format("Inserting set price for '{0} [{1}]'... ",
                                           setPrice.Name,
                                           setPrice.SetCode);

                Console.WriteLine(msg);
                this.mLoggingService.Debug(msg);

                SetPrice newSetPrice = this.mPriceStore.FindAndModifySetPrice(setPrice, true);

                this.mLoggingService.Debug("Saved price for set '{0}'.", setPrice.Name);
            }

            HtmlNode cardsNode = htmlDoc.DocumentNode.SelectSingleNode(@"/html/body/div[4]/div/div[5]/table/tbody");

            this.mLoggingService.Debug("Parsed cards node");

            if (cardsNode == null)
            {
                this.mLoggingService.Warning("CardsNode is NULL for '{0}'.", url);

                return;
            }

            if (cardsNode.SelectSingleNode("tr") == null)
            {
                string msg = string.Format("No cards for set '{0}'; skipping...", set.Code);

                Console.WriteLine(msg);
                this.mLoggingService.Warning(msg);

                return;
            }

            foreach (HtmlNode row in cardsNode.SelectNodes("tr"))
            {
                if (row == null)
                {
                    this.mLoggingService.Warning("Row is NULL");
                }

                //string href = row.Attributes["href"].Value.Trim();

                //HtmlNode nameNode = row.SelectSingleNode("td[2]");
                //HtmlNode diffNode = row.SelectSingleNode("td[3]");
                //HtmlNode midNode = row.SelectSingleNode("td[4]");
                //HtmlNode lowNode = row.SelectSingleNode("td[5]");
                //HtmlNode foilNode = row.SelectSingleNode("td[6]");

                HtmlNode nameNode = row.SelectSingleNode("td[3]");
                if (nameNode == null)
                {
                    this.mLoggingService.Warning("nameNode is NULL");
                }

                HtmlNode diffNode = row.SelectSingleNode("td[4]");
                if (diffNode == null)
                {
                    this.mLoggingService.Warning("diffNode is NULL");
                }

                HtmlNode lowNode = row.SelectSingleNode("td[5]");
                if (lowNode == null)
                {
                    this.mLoggingService.Warning("lowNode is NULL");
                }

                HtmlNode foilNode = row.SelectSingleNode("td[6]");
                if (nameNode == null)
                {
                    this.mLoggingService.Warning("foilNode is NULL");
                }

                // Skip cards that have the pattern (0-9) in the name (e.g. Plains (310)) since this are lands
                if (Regex.IsMatch(nameNode.InnerText, @"\([0-9]+\)"))
                {
                    this.mLoggingService.Warning("Skipping card '{0}' due to invalid pattern.", nameNode.InnerText);

                    continue;
                }

                CardPrice price = new CardPrice();
                price.SetCode    = set.Code;
                price.Name       = nameNode.InnerText;
                price.SearchName = this.mSearchUtility.GetSearchValue(price.Name);

                price.PriceDiff      = diffNode.InnerText;
                price.PriceDiffValue = 0;

                this.mLoggingService.Debug("Card={0}; Set={1}; PriceDiff={2}; PriceDiffVal={3}",
                                           price.Name, price.SetCode, price.PriceDiff, price.PriceDiffValue);

                // Try to parse PriceDiffValue from PriceDiff
                if (!string.IsNullOrEmpty(price.PriceDiff))
                {
                    if (price.PriceDiff.IndexOf("%") > 0)
                    {
                        try
                        {
                            price.PriceDiffValue = Convert.ToInt32(price.PriceDiff.Substring(0, price.PriceDiff.IndexOf("%")));
                        }
                        catch (Exception)
                        {
                            this.mLoggingService.Warning("Price diff for card '{0}' was not NULL (priceDiff: {5})but did not contain a correct integer.", price.PriceDiff);
                        }
                    }
                }

                string tempPrice = lowNode.InnerText;
                price.PriceLow  = "$0";
                price.PriceMid  = "$0";
                price.PriceFoil = "$0";

                this.mLoggingService.Debug("TempPrice={0}", tempPrice);

                if (string.IsNullOrEmpty(tempPrice))
                {
                    this.mLoggingService.Debug("TempPrice is NULL");
                }

                if (tempPrice.Split('/').Any())
                {
                    string[] lmPrices = tempPrice.Split('/');

                    price.PriceMid = lmPrices[0].Trim();

                    if (lmPrices.Count() == 2)
                    {
                        price.PriceLow = lmPrices[1].Trim();
                    }
                }

                // Get multiverseId
                int multiverseId = Convert.ToInt32(row.Attributes["data-id"].Value);

                HtmlNode nameChildNode = nameNode.SelectSingleNode("./a");
                if (nameChildNode != null)
                {
                    string cardUrl      = string.Format(cCardUrl, nameChildNode.Attributes["href"].Value);
                    string cardImageUrl = nameChildNode.Attributes["data-image"].Value;

                    price.Url      = cardUrl;
                    price.ImageUrl = cardImageUrl;
                }

                price.PriceFoil    = foilNode.InnerText;
                price.LastUpdated  = DateTime.Now;
                price.MultiverseId = multiverseId;

                this.mLoggingService.Debug("PriceFoil={0}; PriceLow={1}; PriceMid={2}",
                                           price.PriceFoil, price.PriceLow, price.PriceMid);

                string msg = string.Format("Inserting '{0}' from '{1}'... ",
                                           price.Name,
                                           price.SetCode);

                Console.WriteLine(msg);
                this.mLoggingService.Debug(msg);

                CardPrice card = this.mPriceStore.FindAndModifyCardPrice(price, true);

                this.mLoggingService.Debug("Saved price for card '{0}'.", card.Name);
            }
        }