示例#1
0
        public void PurchaseProduct_When_TwoOneEuroCoinsAddedChickenSoupProductPurchased_Then_ReturnSuccess()
        {
            //Arrange
            var coin         = Coin.OneEuro;
            var product      = Product.ChickenSoup;
            var coinReturned = new List <CoinSlot>
            {
                new CoinSlot(Coin.TwentyCents)
            };
            var inventory = new List <ProductSlot>
            {
                new ProductSlot(product)
            };
            var purse = new List <CoinSlot>
            {
                new CoinSlot(Coin.TwentyCents),
                new CoinSlot(Coin.FiftyCents)
            };
            var vendingMachine = new VendingMachine(inventory, purse);
            var sut            = new PurchaseProductUseCase(vendingMachine);

            //Act
            sut.InsertCoin(coin);
            sut.InsertCoin(coin);
            var actual = sut.PurchaseProduct(product);

            //Assert
            actual.HasFailed.Should().BeFalse();
            actual.ProductPurchased.Should().Be(product);
            actual.CoinsReturned.Should().BeEquivalentTo(coinReturned);
        }
示例#2
0
        public void PurchaseProduct_When_OneEuroCoinsAddedEspressoProductPurchased_Then_ReturnFailed()
        {
            //Arrange
            var coin      = Coin.OneEuro;
            var product   = Product.Espresso;
            var inventory = new List <ProductSlot>
            {
                new ProductSlot(product)
            };
            var purse = new List <CoinSlot>
            {
                new CoinSlot(Coin.TwentyCents)
            };
            var vendingMachine = new VendingMachine(inventory, purse);
            var sut            = new PurchaseProductUseCase(vendingMachine);

            //Act
            sut.InsertCoin(coin);
            var actual = sut.PurchaseProduct(product);

            //Assert
            actual.HasFailed.Should().BeTrue();
            actual.PurchaseFailedReason.Should().Be(PurchaseFailedType.InsufficientCoins);
            actual.ProductPurchased.Should().Be(product);
        }
示例#3
0
        public void CancelPurchase_When_PurchaseCanceled_Then_ReturnSuccess()
        {
            //Arrange
            var inventory      = new List <ProductSlot>();
            var purse          = new List <CoinSlot>();
            var vendingMachine = new VendingMachine(inventory, purse);
            var sut            = new PurchaseProductUseCase(vendingMachine);

            //Act
            var actual = sut.CancelPurchase();

            //Assert
            actual.HasFailed.Should().BeFalse();
        }
示例#4
0
        public void InsertCoin_When_FiftyCentCoinInserted_Then_ReturnSuccess()
        {
            //Arrange
            decimal expectedCurrentAmount = 0.50m;
            var     inventory             = new List <ProductSlot>();
            var     purse          = new List <CoinSlot>();
            var     vendingMachine = new VendingMachine(inventory, purse);
            var     coin           = Coin.FiftyCents;
            var     sut            = new PurchaseProductUseCase(vendingMachine);

            //Act
            var actual = sut.InsertCoin(coin);

            //Assert
            actual.HasFailed.Should().BeFalse();
            actual.CurrentAmount.Should().Be(expectedCurrentAmount);
        }
示例#5
0
        public void CancelPurchase_When_TenCentCoinAddedAndPurchaseCanceled_Then_ReturnSuccess()
        {
            //Arrange
            var coin          = Coin.TwentyCents;
            var coinsReturned = new List <CoinSlot>
            {
                new CoinSlot(Coin.TwentyCents)
            };
            var inventory      = new List <ProductSlot>();
            var purse          = new List <CoinSlot>();
            var vendingMachine = new VendingMachine(inventory, purse);
            var sut            = new PurchaseProductUseCase(vendingMachine);

            //Act
            sut.InsertCoin(coin);
            var actual = sut.CancelPurchase();

            //Assert
            actual.HasFailed.Should().BeFalse();
            actual.CoinsReturned.Should().BeEquivalentTo(coinsReturned);
        }
示例#6
0
        public VendingMachineHub(PurchaseProductUseCase useCase)
        {
            Guard.AgainstNull(useCase, nameof(useCase));

            _useCase = useCase;
        }