public void MtgoDataIsParsedCorrectly() { _magicOnlineParser = new MagicOnlineTournamentParser(); //This is a live test, the handler relies on this data being accurate. If the site changes format, the parser will no longer work. //All Tests combined so they'll run quicker, since we need to go out and get data from WOTC to run the tests. var url = "http://magic.wizards.com/en/articles/archive/mtgo-standings/standard-daily-2015-08-15"; _resultSet = _magicOnlineParser.LoadTournamentResults(url); //Pilots Assert.AreEqual("sans", _resultSet.Decks[0].Pilot, "First Pilot is wrong."); Assert.AreEqual("giorno211", _resultSet.Decks[10].Pilot, "Last Pilot is wrong."); Assert.AreEqual(11, _resultSet.Decks.Select(x => x.Pilot).Distinct().ToList().Count, "11 individual pilots should be returned."); //Results Assert.AreEqual("4-0", _resultSet.Decks[0].Record, "First tourney record is wrong."); Assert.AreEqual("3-1", _resultSet.Decks[10].Record, "Last tourney record is wrong."); //Decks Assert.AreEqual(11, _resultSet.Decks.Count, "Incorrect # of decks returned."); //Tournament Information Assert.AreEqual("STANDARD DAILY #8582313 ON 08/14/2015", _resultSet.TournamentInformation.ToUpper(), "Incorrect Tourney Information."); //MTGO Flag Assert.IsTrue(_resultSet.IsMtgoResult, "MTGO Flag not getting set correctly."); }
public TournamentResults LoadTournamentResults(string url) { var doc = new HtmlWeb().Load(url); if (doc.DocumentNode != null) { var decksObj = doc.DocumentNode.SelectSingleNode("//div[@class='decklists']"); var tourneyData = new TournamentResults { Decks = new List <TournamentDeck>(), IsMtgoResult = true }; foreach (var singleDeck in decksObj.ChildNodes) { var playerObj = singleDeck.SelectSingleNode(".//span[@class='deck-meta']/h4"); var tournamentObj = singleDeck.SelectSingleNode(".//span[@class='deck-meta']/h5"); var mainDeckObj = singleDeck.SelectSingleNode(".//div[@class='deck-list-text']").ChildNodes[1]; var sideDeckObj = singleDeck.SelectSingleNode(".//div[@class='deck-list-text']").ChildNodes[3]; if (string.IsNullOrEmpty(tourneyData.TournamentInformation)) { tourneyData.TournamentInformation = tournamentObj.InnerText.Trim(); } var deck = new TournamentDeck { CardsInDeck = new List <DeckItem>() }; deck.Pilot = playerObj.InnerText.Substring(0, playerObj.InnerText.IndexOf('(')).Trim(); deck.Record = playerObj.InnerText.Substring(playerObj.InnerText.IndexOf('(')).Replace("(", "").Replace(")", ""); foreach (var mainDeckCardListing in mainDeckObj.SelectNodes(".//span[@class='row']")) { deck.CardsInDeck.Add(ParseCards(mainDeckCardListing, true)); } foreach (var sideDeckCardListing in sideDeckObj.SelectNodes(".//span[@class='row']")) { deck.CardsInDeck.Add(ParseCards(sideDeckCardListing, false)); } tourneyData.Decks.Add(deck); } return(tourneyData); } return(null); }
public IActionResult ViewBallot(JudgesBallotViewModel data) { Pairing pairing = _context.Pairing.Where(p => p.JudgeId == data.Ballot.JudgeId && p.RoundId == data.Ballot.RoundId).Single(); IndividualTeam affTeam = _context.IndividualTeam.FirstOrDefault(i => i.IndividualTeamId == pairing.AffirmativeTeamId); IndividualTeam negTeam = _context.IndividualTeam.FirstOrDefault(i => i.IndividualTeamId == pairing.NegativeTeamId); Debater firstAffSpeaker = _context.Debater.FirstOrDefault(d => d.IndividualTeamId == affTeam.IndividualTeamId && d.SpeakerPosition == 1); Debater secondAffSpeaker = _context.Debater.FirstOrDefault(d => d.IndividualTeamId == affTeam.IndividualTeamId && d.SpeakerPosition == 2); Debater firstNegSpeaker = _context.Debater.FirstOrDefault(d => d.IndividualTeamId == negTeam.IndividualTeamId && d.SpeakerPosition == 1); Debater secondNegSpeaker = _context.Debater.FirstOrDefault(d => d.IndividualTeamId == negTeam.IndividualTeamId && d.SpeakerPosition == 2); Ballot ballot = data.Ballot; Round round = _context.Round.Where(r => r.RoundId == ballot.RoundId).Single(); var winnerId = int.Parse(data.Winner); var loserId = int.Parse(data.Loser); IndividualTeam winningTeam = _context.IndividualTeam.FirstOrDefault(i => i.IndividualTeamId == winnerId); IndividualTeam losingTeam = _context.IndividualTeam.FirstOrDefault(i => i.IndividualTeamId == loserId); firstAffSpeaker.IndividualTournamentSpeakerPoints += data.Ballot.FirstAffSpeakerPoints; secondAffSpeaker.IndividualTournamentSpeakerPoints += data.Ballot.SecondAffSpeakerPoints; firstNegSpeaker.IndividualTournamentSpeakerPoints += data.Ballot.FirstNegSpeakerPoints; secondNegSpeaker.IndividualTournamentSpeakerPoints += data.Ballot.SecondNegSpeakerPoints; affTeam.SingleTournamentSpeakerPoints += (data.Ballot.FirstAffSpeakerPoints + data.Ballot.SecondAffSpeakerPoints); negTeam.SingleTournamentSpeakerPoints += (data.Ballot.FirstNegSpeakerPoints + data.Ballot.SecondNegSpeakerPoints); ballot.WinnerId = winnerId; pairing.WinnerId = winnerId; if (round.RoundNumber > 4) { winningTeam.CumulativeAnnualElminationRoundWins++; losingTeam.SingleTournamentSpeakerPoints = 0; losingTeam.SingleTournamentWins = 0; losingTeam.SingleTournamentLosses = 0; losingTeam.TournamentAffirmativeRounds = 0; losingTeam.TournamentNegativeRounds = 0; } if (round.RoundNumber == 7) { TournamentResults result = _context.TournamentResults.Where(t => t.TournamentId == pairing.TournamentId && t.IndividualTeamId == winningTeam.IndividualTeamId).Single(); result.EliminationRoundResult = "winner"; _context.Update(result); winningTeam.CumulativeAnnualElminationRoundWins++; winningTeam.SingleTournamentSpeakerPoints = 0; winningTeam.SingleTournamentWins = 0; winningTeam.SingleTournamentLosses = 0; winningTeam.TournamentAffirmativeRounds = 0; winningTeam.TournamentNegativeRounds = 0; losingTeam.SingleTournamentSpeakerPoints = 0; losingTeam.SingleTournamentWins = 0; losingTeam.SingleTournamentLosses = 0; losingTeam.TournamentAffirmativeRounds = 0; losingTeam.TournamentNegativeRounds = 0; } if (round.RoundNumber <= 4) { winningTeam.SingleTournamentWins++; losingTeam.SingleTournamentLosses++; } winningTeam.CumulativeAnnualWins++; losingTeam.CumulativeAnnualLosses++; ballot.BallotTurnedIn = true; _context.Update(ballot); _context.Update(pairing); _context.Update(winningTeam); _context.Update(losingTeam); _context.Update(firstAffSpeaker); _context.Update(secondAffSpeaker); _context.Update(firstNegSpeaker); _context.Update(secondNegSpeaker); _context.SaveChanges(); return(RedirectToAction("BallotSubmission", "Judges")); }