Example #1
0
        public async Task <Deck> Add(YgoProDeck ygoProDeck)
        {
            var newDeck = new Deck
            {
                UserId      = ygoProDeck.UserId,
                Name        = ygoProDeck.Name,
                Description = ygoProDeck.Description,
                Created     = DateTime.UtcNow,
                Updated     = DateTime.UtcNow
            };

            var deckTypes = (await _deckTypeRepository.AllDeckTypes()).ToDictionary(dt => dt.Name, dt => dt);

            var mainDeckUniqueCards  = ygoProDeck.Main.Select(c => c).Distinct().ToList();
            var extraDeckUniqueCards = ygoProDeck.Extra.Select(c => c).Distinct().ToList();
            var sideDeckUniqueCards  = ygoProDeck.Side.Select(c => c).Distinct().ToList();

            var mainDeckCardCopies  = ygoProDeck.Main.GroupBy(c => c).ToDictionary(g => g.Key, g => g.Count());
            var extraDeckCardCopies = ygoProDeck.Extra.GroupBy(c => c).ToDictionary(g => g.Key, g => g.Count());
            var sideDeckCardCopies  = ygoProDeck.Side.GroupBy(c => c).ToDictionary(g => g.Key, g => g.Count());

            newDeck = await AddCardsToDeckByCardNumber(mainDeckUniqueCards, newDeck, deckTypes[DeckTypeConstants.Main], mainDeckCardCopies);

            newDeck = await AddCardsToDeckByCardNumber(extraDeckUniqueCards, newDeck, deckTypes[DeckTypeConstants.Extra], extraDeckCardCopies);

            newDeck = await AddCardsToDeckByCardNumber(sideDeckUniqueCards, newDeck, deckTypes[DeckTypeConstants.Side], sideDeckCardCopies);

            await _deckRepository.Add(newDeck);

            return(newDeck);
        }
Example #2
0
        public static YgoProDeck MapToYgoProDeck(string deck)
        {
            var ygoProDeck = new YgoProDeck();

            string[] delimiters = { "#main", "#extra", "!side" };

            var deckSections = deck.Split(delimiters, StringSplitOptions.None).Skip(1).ToList();

            if (deckSections.Count == 3)
            {
                var mainDeckSecion   = deckSections[0].Trim();
                var extraDeckSection = deckSections[1].Trim();
                var sideCards        = deckSections[2].Trim();

                if (!string.IsNullOrWhiteSpace(mainDeckSecion))
                {
                    ygoProDeck.Main.AddRange(ExtractCardNumbers(mainDeckSecion));
                }

                if (!string.IsNullOrWhiteSpace(extraDeckSection))
                {
                    ygoProDeck.Extra.AddRange(ExtractCardNumbers(extraDeckSection));
                }

                if (!string.IsNullOrWhiteSpace(sideCards))
                {
                    ygoProDeck.Side.AddRange(ExtractCardNumbers(sideCards));
                }
            }

            return(ygoProDeck);
        }
        public void Given_A_Description_With_More_Than_4000_Characters_Validation_Should_Fail()
        {
            // Arrange
            var ygoProDeck = new YgoProDeck
            {
                Description = new string('*', 4001)
            };

            // Act
            Action act = () => _sut.ShouldHaveValidationErrorFor(c => c.Description, ygoProDeck);

            // Assert
            act.Invoke();
        }
        public void Given_An_Invalid_Name_Validation_Should_Fail(string name)
        {
            // Arrange
            var ygoProDeck = new YgoProDeck
            {
                Name = name
            };

            // Act
            Action act = () => _sut.ShouldHaveValidationErrorFor(c => c.Name, ygoProDeck);

            // Assert
            act.Invoke();
        }
Example #5
0
        public async Task Given_A_Valid_YgoProDeck_Should_Invoke_GetCardByNumber_Method_Once()
        {
            // Arrange
            const int expected = 2;

            var ygoProDeck = new YgoProDeck
            {
                UserId      = Guid.NewGuid().ToString(),
                Name        = "Jinzo Deck",
                Description = "Machines are coming.",
                Main        = new List <long> {
                    34230233
                },
                Extra = new List <long> {
                    31386180
                },
                Side = new List <long>()
            };

            _deckTypeRepository.AllDeckTypes().Returns(new List <DeckType>
            {
                new DeckType
                {
                    Id   = 23424,
                    Name = "Main",
                },
                new DeckType
                {
                    Id   = 23424,
                    Name = "Extra",
                },
                new DeckType
                {
                    Id   = 23424,
                    Name = "Side",
                }
            });

            _cardRepository.GetCardByNumber(Arg.Any <long>()).Returns(new Card());

            // Act
            await _sut.Add(ygoProDeck);

            // Assert
            await _cardRepository.Received(expected).GetCardByNumber(Arg.Any <long>());
        }
Example #6
0
        public async Task Given_A_Valid_YgoProDeck_Should_Persist_And_Return_Newly_Created_Deck()
        {
            // Arrange
            var ygoProDeck = new YgoProDeck
            {
                UserId      = Guid.NewGuid().ToString(),
                Name        = "Jinzo Deck",
                Description = "Machines are coming.",
                Main        = new List <long> {
                    34230233, 34230233, 34230233, 99458769, 99458769, 99458769
                },
                Extra = new List <long> {
                    31386180, 6832966, 16195942, 84013237, 94380860
                },
                Side = new List <long>()
            };

            _deckTypeRepository.AllDeckTypes().Returns(new List <DeckType>
            {
                new DeckType
                {
                    Id   = 23424,
                    Name = "Main",
                },
                new DeckType
                {
                    Id   = 23424,
                    Name = "Extra",
                },
                new DeckType
                {
                    Id   = 23424,
                    Name = "Side",
                }
            });

            _cardRepository.GetCardByNumber(Arg.Any <long>()).Returns(new Card());

            // Act
            var result = await _sut.Add(ygoProDeck);

            // Assert
            result.Should().NotBeNull();
        }
Example #7
0
        public async Task Given_A_Valid_YgoProDeck_Should_Invoke_AllDeckTypes_Method_Once()
        {
            // Arrange
            var ygoProDeck = new YgoProDeck
            {
                UserId      = Guid.NewGuid().ToString(),
                Name        = "Jinzo Deck",
                Description = "Machines are coming.",
                Main        = new List <long> {
                    34230233, 34230233, 34230233, 99458769, 99458769, 99458769
                },
                Extra = new List <long> {
                    31386180, 6832966, 16195942, 84013237, 94380860
                },
                Side = new List <long>()
            };

            _deckTypeRepository.AllDeckTypes().Returns(new List <DeckType>
            {
                new DeckType
                {
                    Id   = 23424,
                    Name = "Main",
                },
                new DeckType
                {
                    Id   = 23424,
                    Name = "Extra",
                },
                new DeckType
                {
                    Id   = 23424,
                    Name = "Side",
                }
            });

            _cardRepository.GetCardByNumber(Arg.Any <long>()).Returns(new Card());

            // Act
            await _sut.Add(ygoProDeck);

            // Assert
            await _deckTypeRepository.Received(1).AllDeckTypes();
        }
        public void Given_A_Deck_If_Card_Has_More_3_Copies_Of_The_Same_Card_In_Main_Extra_And_Side_Deck_Validation_Should_Fail()
        {
            // Arrange
            var ygoProDeck = new YgoProDeck
            {
                Name        = "A Random Deck",
                Description = "A Description always helps",
                Main        = new List <long> {
                    41620959, 41620959
                },
                Extra = new List <long> {
                    41620959
                },
                Side = new List <long> {
                    41620959
                }
            };

            // Act
            var result = _sut.Validate(ygoProDeck);

            // Assert
            result.IsValid.Should().BeFalse();
        }
Example #9
0
 public void SetUp()
 {
     _sut        = new YgoProExtraDeckValidator();
     _inputModel = new YgoProDeck();
     _fixture    = new Fixture();
 }