Esempio n. 1
0
        public void VendingMachine_SelectProduct_CoinsEnteredAndReturnMoreThanOneCoin_IsValid()
        {
            // Arrange
            _coinService.Setup(mock => mock.GetCoin(9.5m, 22.5m, 3.15m)).Returns(CreateValidAcceptedOnePoundCoin);
            _coinService.Setup(mock => mock.GetCoin(3.25m, 18.0m, 1.7m)).Returns(CreateValidAcceptedFivePenceCoin);
            _coinService.Setup(mock => mock.GetCoin(5.0m, 21.4m, 1.7m)).Returns(CreateValidAcceptedTwentyPenceCoin);
            _productService.Setup(mock => mock.GetProduct(It.IsAny <string>())).Returns(CreateProduct());
            _productService.Setup(mock => mock.GetProductQuantity(It.IsAny <string>())).Returns(10);
            _productService.Setup(mock => mock.UpdateProductQuantity(It.IsAny <string>()));

            // Act
            var vendingMachine = new VendingMachine(_coinService.Object, _productService.Object);

            vendingMachine.AcceptCoin(CreateValidOnePoundCoin());
            vendingMachine.AcceptCoin(CreateValidFivePenceCoin());
            vendingMachine.AcceptCoin(CreateValidTwentyPenceCoin());

            VendingResponse result = vendingMachine.SelectProduct("COKE1");

            // Assert
            Assert.AreEqual(result != null, true);
            Assert.AreEqual(result.IsSuccess, true);
            Assert.AreEqual(result.Message, "Thank You");
            Assert.AreEqual(result.Change != null, true);
            Assert.AreEqual(result.Change.SingleOrDefault(item => item.Type == CoinType.FivePence).Number, 1);
            Assert.AreEqual(result.Change.SingleOrDefault(item => item.Type == CoinType.TwentyPence).Number, 1);
            Assert.AreEqual(result.Change.SingleOrDefault(item => item.Type == CoinType.FiftyPence) == null, true);
        }
Esempio n. 2
0
        public void VendingMachine_AcceptCoin_VerifyCoinServiceIsCalledOnce()
        {
            // Arrange
            _coinService.Setup(mock => mock.GetCoin(It.IsAny <decimal>(), It.IsAny <decimal>(), It.IsAny <decimal>()));

            // Act
            var vendingMachine = new VendingMachine(_coinService.Object, _productService.Object);

            VendingResponse result = vendingMachine.AcceptCoin(CreateInvalidCoin());

            // Assert
            _coinService.Verify(mock => mock.GetCoin(It.IsAny <decimal>(), It.IsAny <decimal>(), It.IsAny <decimal>()), Times.Once);
        }
Esempio n. 3
0
        public void VendingMachine_SelectProduct_NoCoinsEntered_VerifyGetProductCalledOnce()
        {
            // Arrange
            _productService.Setup(mock => mock.GetProduct(It.IsAny <string>())).Returns(CreateProduct());

            // Act
            var vendingMachine = new VendingMachine(_coinService.Object, _productService.Object);

            VendingResponse result = vendingMachine.SelectProduct("COKE1");

            // Assert
            _productService.Verify(mock => mock.GetProduct(It.IsAny <string>()), Times.Once);
        }
Esempio n. 4
0
        public void VendingMachine_SelectProduct_InvalidCodeEntered_VerifyGetProductCalledOnce()
        {
            // Arrange
            _productService.Setup(mock => mock.GetProduct(It.IsAny <string>())).Returns(() => null);

            // Act
            var vendingMachine = new VendingMachine(_coinService.Object, _productService.Object);

            VendingResponse result = vendingMachine.SelectProduct("INVALIDCODE");

            // Assert
            _productService.Verify(mock => mock.GetProduct(It.IsAny <string>()), Times.Once);
        }
Esempio n. 5
0
        public void VendingMachine_AcceptCoin_InvalidCoinEntered()
        {
            // Arrange
            _coinService.Setup(mock => mock.GetCoin(It.IsAny <decimal>(), It.IsAny <decimal>(), It.IsAny <decimal>())).Returns(() => null);

            // Act
            var vendingMachine = new VendingMachine(_coinService.Object, _productService.Object);

            VendingResponse result = vendingMachine.AcceptCoin(CreateInvalidCoin());

            // Assert
            Assert.AreEqual(result != null, true);
            Assert.AreEqual(result.IsRejectedCoin, true);
        }
Esempio n. 6
0
        public void VendingMachine_SelectProduct_NoCoinsEntered()
        {
            // Arrange
            _productService.Setup(mock => mock.GetProduct(It.IsAny <string>())).Returns(CreateProduct());

            // Act
            var vendingMachine = new VendingMachine(_coinService.Object, _productService.Object);

            VendingResponse result = vendingMachine.SelectProduct("COKE1");

            // Assert
            Assert.AreEqual(result != null, true);
            Assert.AreEqual(result.IsSuccess, false);
            Assert.AreEqual(result.Message, "Insert Coin");
        }
Esempio n. 7
0
        public void VendingMachine_SelectProduct_InvalidCodeEntered()
        {
            // Arrange
            _productService.Setup(mock => mock.GetProduct(It.IsAny <string>())).Returns(() => null);

            // Act
            var vendingMachine = new VendingMachine(_coinService.Object, _productService.Object);

            VendingResponse result = vendingMachine.SelectProduct("INVALIDCODE");

            // Assert
            Assert.AreEqual(result != null, true);
            Assert.AreEqual(result.IsSuccess, false);
            Assert.AreEqual(result.Message, "Invalid Product Selected. Please try again");
        }
Esempio n. 8
0
        public void VendingMachine_AcceptCoin_ValidCoinEntered()
        {
            // Arrange
            _coinService.Setup(mock => mock.GetCoin(It.IsAny <decimal>(), It.IsAny <decimal>(), It.IsAny <decimal>())).Returns(CreateValidAcceptedFivePenceCoin);

            // Act
            var vendingMachine = new VendingMachine(_coinService.Object, _productService.Object);

            VendingResponse result = vendingMachine.AcceptCoin(CreateValidFivePenceCoin());

            // Assert
            Assert.AreEqual(result != null, true);
            Assert.AreEqual(result.IsRejectedCoin, false);
            Assert.AreEqual(result.IsSuccess, true);
            Assert.AreEqual(result.Message, "0.05");
        }
Esempio n. 9
0
        public void VendingMachine_SelectProduct_CoinsEnteredAndReturned_VerifyUpdateProductQuantityCalledOnce()
        {
            // Arrange
            _coinService.Setup(mock => mock.GetCoin(It.IsAny <decimal>(), It.IsAny <decimal>(), It.IsAny <decimal>())).Returns(CreateValidAcceptedOnePoundCoin);
            _productService.Setup(mock => mock.GetProduct(It.IsAny <string>())).Returns(CreateProduct());
            _productService.Setup(mock => mock.GetProductQuantity(It.IsAny <string>())).Returns(10);
            _productService.Setup(mock => mock.UpdateProductQuantity(It.IsAny <string>()));

            // Act
            var vendingMachine = new VendingMachine(_coinService.Object, _productService.Object);

            vendingMachine.AcceptCoin(CreateValidOnePoundCoin());

            VendingResponse result = vendingMachine.SelectProduct("COKE1");

            // Assert
            _productService.Verify(mock => mock.UpdateProductQuantity(It.IsAny <string>()), Times.Once);
        }
Esempio n. 10
0
        public void VendingMachine_SelectProduct_CoinsEntered_LessThanProductPrice()
        {
            // Arrange
            _coinService.Setup(mock => mock.GetCoin(It.IsAny <decimal>(), It.IsAny <decimal>(), It.IsAny <decimal>())).Returns(CreateValidAcceptedFivePenceCoin);
            _productService.Setup(mock => mock.GetProduct(It.IsAny <string>())).Returns(CreateProduct());

            // Act
            var vendingMachine = new VendingMachine(_coinService.Object, _productService.Object);

            vendingMachine.AcceptCoin(CreateValidFivePenceCoin());

            VendingResponse result = vendingMachine.SelectProduct("COKE1");

            // Assert
            Assert.AreEqual(result != null, true);
            Assert.AreEqual(result.IsSuccess, false);
            Assert.AreEqual(result.Message, string.Format("Price : {0}", 1.00m));
        }
Esempio n. 11
0
        public void VendingMachine_SelectProduct_CoinsEntered_IsValid()
        {
            // Arrange
            _coinService.Setup(mock => mock.GetCoin(It.IsAny <decimal>(), It.IsAny <decimal>(), It.IsAny <decimal>())).Returns(CreateValidAcceptedOnePoundCoin);
            _productService.Setup(mock => mock.GetProduct(It.IsAny <string>())).Returns(CreateProduct());
            _productService.Setup(mock => mock.GetProductQuantity(It.IsAny <string>())).Returns(10);
            _productService.Setup(mock => mock.UpdateProductQuantity(It.IsAny <string>()));

            // Act
            var vendingMachine = new VendingMachine(_coinService.Object, _productService.Object);

            vendingMachine.AcceptCoin(CreateValidOnePoundCoin());

            VendingResponse result = vendingMachine.SelectProduct("COKE1");

            // Assert
            Assert.AreEqual(result != null, true);
            Assert.AreEqual(result.IsSuccess, true);
            Assert.AreEqual(result.Message, "Thank You");
        }