public void GetCardPrice_ByName_DoesntExist() { string name = "Goblin War XXXX"; CardPrice actual = priceStore.GetCardPrice(name); Assert.Null(actual); }
public void GetCardPrice_ByName() { string name = "Dr%"; CardPrice actual = priceStore.GetCardPrice(name); Assert.NotNull(actual); }
public void GetCardPrice_ByNameSet_SetDoesntExist() { string name = "Goblin War Paint"; string setCode = "XXX"; CardPrice actual = priceStore.GetCardPrice(name, setCode); Assert.Null(actual); }
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); }
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); }
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); } }