Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 3
0
        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"));
        }