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); }
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(); }
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>()); }
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(); }
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(); }
public void SetUp() { _sut = new YgoProExtraDeckValidator(); _inputModel = new YgoProDeck(); _fixture = new Fixture(); }