public async Task CreatedRepositoryStubWithIntKey_AddShouldBeToDeleteAndInsert()
        {
            // Arrange
            var cardEntities = CreateSomeCards().ToArray();
            var repo         = CreateCardsRepository(cardEntities);

            // Act
            const int newCardId  = 100;
            var       newCardPan = "9999888877776666";
            var       newCard    = new CardEntity(newCardId, newCardPan);
            await repo.AddAsync(newCard);

            newCardPan = Guid.NewGuid().ToString();
            var newCard1 = new CardEntity(newCardId, newCardPan);
            await repo.AddAsync(newCard1);

            // Assert
            var updatedCard = await repo.GetAsync(newCardId);

            Assert.AreEqual(newCardPan, updatedCard.Pan);
        }
        public void Execute_WhenCalledMultipleTimes_ShouldReturnResultAndSaveEachCommandPassed()
        {
            // Arrange
            const int expectedResult = 1;
            var       card1          = new CardEntity(123, "123");
            var       card2          = new CardEntity(456, "456");

            var command1 = new ExpireCardCommand(card1);
            var command2 = new ExpireCardCommand(card2);

            var commandExecutorStub = CommandExecutorStub.Create <ExpireCardCommand>(expectedResult);

            // Act
            var result1 = commandExecutorStub.Execute(command1);
            var result2 = commandExecutorStub.Execute(command2);

            // Assert
            Assert.That(result1, Is.EqualTo(expectedResult));
            Assert.That(result2, Is.EqualTo(expectedResult));

            Assert.That(commandExecutorStub.CommandsCalled, Is.EquivalentTo(new[] { command1, command2 }));
        }