public async Task TestPbnParsing_DealList()
        {
            //Arrange
            var module = new LocomotivaEventMetadataProvider(new LocomotivaEventProvider(), new UrlProviderFactory(), new ContractScoreCalculatorModule());

            //Act
            var command = await module.ExtractEventMetadata(new DateTime(2015, 7, 14));

            //Assert
            Assert.AreEqual(26, command.Deals.Count);
        }
        public async Task TestPbnParsing_DuplicateDealResultsList()
        {    //Arrange
            var module = new LocomotivaEventMetadataProvider(new LocomotivaEventProvider(), new UrlProviderFactory(), new ContractScoreCalculatorModule());

            //Act
            var command = await module.ExtractEventMetadata(new DateTime(2015, 7, 14));

            //Assert
            var deal = command.Deals.ElementAt(1);

            Assert.AreEqual(12, deal.DealResults.Count);
        }
        public async Task TestPbnParsing()
        {
            //Arrange
            var module = new LocomotivaEventMetadataProvider(new LocomotivaEventProvider(), new UrlProviderFactory(), new ContractScoreCalculatorModule());

            //Act
            var command = await module.ExtractEventMetadata(new DateTime(2015, 7, 14));

            //Assert
            Assert.AreEqual(24, command.NoOfBoards);
            Assert.AreEqual(26, command.NoOfPairs);
            Assert.AreEqual(12, command.NoOfRounds);
        }
        public async Task TestDuplicateDealAreWellExtracted()
        {
            //Arrange
            var module = new LocomotivaEventMetadataProvider(new LocomotivaEventProvider(), new UrlProviderFactory(), new ContractScoreCalculatorModule());

            //Act
            var command = await module.ExtractEventMetadata(new DateTime(2015, 7, 14));

            //Assert
            Assert.AreEqual(17, command.Deals.Count(d => d.DealResults.Count() == 12));
            Assert.AreEqual(8, command.Deals.Count(d => d.DealResults.Count() == 11));
            Assert.AreEqual(1, command.Deals.Count(d => d.DealResults.Count() == 10));
            Assert.AreEqual(26, command.Deals.Count());
        }
        public async Task TestPbnParsing_RandomDeal()
        {
            //Arrange
            var module = new LocomotivaEventMetadataProvider(new LocomotivaEventProvider(), new UrlProviderFactory(), new ContractScoreCalculatorModule());

            //Act
            var command = await module.ExtractEventMetadata(new DateTime(2015, 7, 14));

            //Assert
            var deal = command.Deals.ElementAt(7);

            Assert.AreEqual("W:42.Q.73.KQJT7632 AQJ8.KJ863.JT.54 K97653.A942.86.A T.T75.AKQ9542.98", deal.PBNRepresentation);
            Assert.AreEqual(8, deal.Index);
            Assert.AreEqual((int)SysVulnerabilityEnum.None, deal.SysVulnerabilityId);
        }
        public async Task TestPbnParsing_RandomPair()
        {
            //Arrange
            var module = new LocomotivaEventMetadataProvider(new LocomotivaEventProvider(), new UrlProviderFactory(), new ContractScoreCalculatorModule());

            //Act
            var command = await module.ExtractEventMetadata(new DateTime(2015, 7, 14));

            //Assert
            var pair = command.Pairs.ElementAt(9);

            Assert.AreEqual(10, pair.Rank);
            Assert.AreEqual((decimal)54.14, pair.Score);
            Assert.AreEqual("POSEA VLAD - RUSU VLAD", pair.Name);
            Assert.AreEqual("POSEA VLAD", pair.Player1Name);
            Assert.AreEqual("RUSU VLAD", pair.Player2Name);
            Assert.AreEqual(21, pair.PairId);
        }
        public async Task TestPbnParsing_RandomDuplicateDeal1()
        {    //Arrange
            var module = new LocomotivaEventMetadataProvider(new LocomotivaEventProvider(), new UrlProviderFactory(), new ContractScoreCalculatorModule());

            //Act
            var command = await module.ExtractEventMetadata(new DateTime(2015, 7, 14));

            //Assert
            var deal          = command.Deals.ElementAt(3);
            var duplicateDeal = deal.DealResults.ElementAt(5);

            //"13  3 13 31 4S   W 11 H6      -  "650"  6.6 15.4  30  70"
            Assert.AreEqual(13, duplicateDeal.NSPairIndex);
            Assert.AreEqual(31, duplicateDeal.EWPairIndex);
            Assert.AreEqual("4S", duplicateDeal.Contract);
            Assert.AreEqual((int)SysPlayer.W, duplicateDeal.Declarer);
            Assert.AreEqual(-650, duplicateDeal.Result);
            Assert.AreEqual(30, duplicateDeal.NSPercentage);
            Assert.AreEqual(70, duplicateDeal.EWPercentage);
        }
        public async Task TestPbnParsing_RandomDuplicateDeal2()
        {
            //Arrange
            var module = new LocomotivaEventMetadataProvider(new LocomotivaEventProvider(), new UrlProviderFactory(), new ContractScoreCalculatorModule());

            //Act
            var command = await module.ExtractEventMetadata(new DateTime(2015, 7, 14));

            //Assert
            var deal          = command.Deals.ElementAt(5);
            var duplicateDeal = deal.DealResults.ElementAt(10);

            // 5 12 27  5 1N   E  7 S8      -   "90"  3.0 19.0  14  86
            Assert.AreEqual(27, duplicateDeal.NSPairIndex);
            Assert.AreEqual(5, duplicateDeal.EWPairIndex);
            Assert.AreEqual("1N", duplicateDeal.Contract);
            Assert.AreEqual((int)SysPlayer.E, duplicateDeal.Declarer);
            Assert.AreEqual(-90, duplicateDeal.Result);
            Assert.AreEqual(14, duplicateDeal.NSPercentage);
            Assert.AreEqual(86, duplicateDeal.EWPercentage);
        }