Exemple #1
0
        public async Task <IActionResult> AddItemToBasket(BasketItemCreateViewModel model)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest("Invalid model"));
            }

            BasketViewModel basket = await _basketViewModelService.GetOrCreateBasketForUserAsync(User.Identity.Name);

            var priceResult = Pounds.Create(model.PriceInPounds);

            if (priceResult.IsFailure)
            {
                return(BadRequest(priceResult.Error));
            }

            var result = await _basketService.AddItemToBasketAsync(basket.Id, model.ProductId, model.Quantity, priceResult.Value);

            if (result.IsFailure)
            {
                return(NotFound(result.Error));
            }

            BasketItemViewModel item = await _basketViewModelService.GetBasketItemForUserAsync(User.Identity.Name, result.Value);

            return(CreatedAtAction("GetItem", new { id = item.Id }, item));
        }
Exemple #2
0
        public void Create_WithPartOfPennyAmount_ShouldReturnFailure()
        {
            // Arrange
            var result = Pounds.Create(0.001m);

            // Assert
            Assert.True(result.IsFailure);
        }
Exemple #3
0
        public void Create_WithNegativeAmount_ShouldReturnFailure()
        {
            // Arrange
            var result = Pounds.Create(-1);

            // Assert
            Assert.True(result.IsFailure);
        }
Exemple #4
0
        public void Constructor_WithNegativeQuantity_ShouldThrowContractException()
        {
            // Arrange
            Func <BasketItem> createBasketItem = () => new BasketItem(1, -1, Pounds.Of(1));

            // Assert
            Assert.Throws <ContractException>(createBasketItem);
        }
Exemple #5
0
        public void Constructor_WithPriceZero_ShouldThrowContractException()
        {
            // Arrange
            Func <BasketItem> createBasketItem = () => new BasketItem(1, 1, Pounds.Of(0));

            // Assert
            Assert.Throws <ContractException>(createBasketItem);
        }
        public void Convert_Kilograms_and_Pounds()
        {
            double kgs_lbs = new Kilograms(12).To<Pounds>();   // 26.4555
            double lbs_kgs = new Pounds(25).To<Kilograms>();   // 11.3398

            Assert.AreEqual(26.4555, Math.Round(kgs_lbs, 4));
            Assert.AreEqual(11.3398, Math.Round(lbs_kgs, 4));
        }
Exemple #7
0
        public void Create_WithBigAmount_ShouldReturnFailure()
        {
            // Arrange
            var result = Pounds.Create(Pounds.MaxPoundAmount + 1);

            // Assert
            Assert.True(result.IsFailure);
        }
Exemple #8
0
        public void Create_WithValidAmount_ShouldReturnSuccess()
        {
            // Arrange
            var result = Pounds.Create(1);

            // Assert
            Assert.True(result.IsSuccess);
        }
        public void Convert_Kilograms_and_Pounds()
        {
            double kgs_lbs = new Kilograms(12).To <Pounds>();   // 26.4555
            double lbs_kgs = new Pounds(25).To <Kilograms>();   // 11.3398

            Assert.AreEqual(26.4555, Math.Round(kgs_lbs, 4));
            Assert.AreEqual(11.3398, Math.Round(lbs_kgs, 4));
        }
Exemple #10
0
        public void ChangeQuantity_WithNegativeQuantity_ShouldThrowContractException()
        {
            // Arrange
            var    basketItem     = new BasketItem(1, 2, Pounds.Of(3));
            Action changeQuantity = () => basketItem.ChangeQuantity(-1);

            // Assert
            Assert.Throws <ContractException>(changeQuantity);
        }
Exemple #11
0
        public void Constructor_WithValidArguments_ShouldInitializeFields()
        {
            // Arrange
            var basketItem = new BasketItem(1, 2, Pounds.Of(3));

            // Assert
            Assert.Equal(1, basketItem.ProductId);
            Assert.Equal(2, basketItem.Quantity);
            Assert.Equal(Pounds.Of(3), basketItem.PriceInPounds);
        }
Exemple #12
0
        public void ChangeQuantity_WithValidQuantity_ShouldChangeQuantity()
        {
            // Arrange
            var basketItem = new BasketItem(1, 2, Pounds.Of(3));

            // Act
            basketItem.ChangeQuantity(4);

            // Assert
            Assert.Equal(4, basketItem.Quantity);
        }
Exemple #13
0
        public void OperatorConvertToDecimal_ShouldConvertPoundsToDecimal()
        {
            // Arrange
            var pounds = Pounds.Of(5);

            // Act
            decimal value = pounds;

            // Assert
            Assert.Equal(5, value);
        }
        public void AddItemToBasketAsync_WithNonExistentBasket_ShouldReturnFailure()
        {
            // Arrange
            _basketRepositoryMock.Setup(x => x.GetByIdAsync(It.IsAny<int>())).Returns(Task.FromResult<Basket>(null));

            // Act
            var result = _basketService.AddItemToBasketAsync(1, 1, 1, Pounds.Of(1)).Result;

            // Assert
            Assert.True(result.IsFailure);
        }
Exemple #15
0
        public void OperatorMultiplication_ShouldMultiplyAmounts()
        {
            // Arrange
            var pounds = Pounds.Of(2);

            // Act
            var result = pounds * 5;

            // Assert
            Assert.Equal(Pounds.Of(10), result);
        }
Exemple #16
0
        public void AddItem_WithNonExistentBasketItem_ShouldAddItemToList()
        {
            // Arrange
            var basket = new Basket();

            // Act
            basket.AddItem(1, 1, Pounds.Of(1));

            // Assert
            Assert.Equal(1, basket.Items.Count);
        }
Exemple #17
0
        public void AddItem_WithNonExistentBasketItem_ShouldReturnNewlyCreatedItem()
        {
            // Arrange
            var basket = new Basket();

            // Act
            var item = basket.AddItem(1, 1, Pounds.Of(1));

            // Assert
            Assert.NotNull(item);
        }
Exemple #18
0
        public void OperatorAdd_ShouldAddAmounts()
        {
            // Arrange
            var pounds1 = Pounds.Of(2);
            var pounds2 = Pounds.Of(3);

            // Act
            var result = pounds1 + pounds2;

            // Assert
            Assert.Equal(Pounds.Of(5), result);
        }
        public void AddItemToBasketAsync_WithExistentBasket_ShouldReturnSuccess()
        {
            // Arrange
            var basket = new Basket();
            _basketRepositoryMock.Setup(x => x.GetByIdAsync(It.IsAny<int>())).Returns(Task.FromResult(basket));

            // Act
            var result = _basketService.AddItemToBasketAsync(1, 1, 1, Pounds.Of(1)).Result;

            // Assert
            Assert.True(result.IsSuccess);
        }
        public void AddItemToBasketAsync_WithExistentBasket_ShouldCallUpdateInRepository()
        {
            // Arrange
            var basket = new Basket();
            _basketRepositoryMock.Setup(x => x.GetByIdAsync(It.IsAny<int>())).Returns(Task.FromResult(basket));
            _basketRepositoryMock.Setup(x => x.UpdateAsync(It.IsAny<Basket>())).Returns(Task.CompletedTask);

            // Act
            var result = _basketService.AddItemToBasketAsync(1, 1, 1, Pounds.Of(1)).Result;

            // Assert
            _basketRepositoryMock.Verify(x => x.UpdateAsync(basket), Times.Once);
        }
        public void ChangeItemQuantityAsync_WithExistentBasketItem_ShouldReturnSuccess()
        {
            // Arrange
            var basket = new Basket();
            basket.AddItem(1, 1, Pounds.Of(1));
            var basketItem = basket.Items.First();
            basketItem.Id = 1;
            _basketRepositoryMock.Setup(x => x.GetByUserIdAsync(It.IsAny<string>())).Returns(Task.FromResult(basket));

            // Act
            var result = _basketService.ChangeItemQuantityAsync("user", 1, 2).Result;

            // Asert
            Assert.True(result.IsSuccess);
        }
Exemple #22
0
        public void AddItem_WithExistentBasketItem_ShouldUpdateBasketItemQuantity()
        {
            // Arrange
            var basket = new Basket();

            basket.AddItem(1, 1, Pounds.Of(1));

            // Act
            basket.AddItem(1, 1, Pounds.Of(1));

            // Assert
            var item = basket.Items.First();

            Assert.Equal(2, item.Quantity);
        }
        public void ChangeItemQuantityAsync_WithExistentBasketItem_ShouldCallUpdateInRepository()
        {
            // Arrange
            var basket = new Basket();
            basket.AddItem(1, 1, Pounds.Of(1));
            var basketItem = basket.Items.First();
            basketItem.Id = 1;
            _basketRepositoryMock.Setup(x => x.GetByUserIdAsync(It.IsAny<string>())).Returns(Task.FromResult(basket));

            // Act
            var result = _basketService.ChangeItemQuantityAsync("user", 1, 2).Result;

            // Asert
            _basketRepositoryMock.Verify(x => x.UpdateAsync(basket), Times.Once);
        }
Exemple #24
0
        public void RemoveItem_WithExistentBasketItem_ShouldReturnSucces()
        {
            // Arrange
            var basket = new Basket();

            basket.AddItem(1, 1, Pounds.Of(1));
            var basketItem = basket.Items.First();

            basketItem.Id = 1;

            // Act
            var result = basket.RemoveItem(1);

            // Assert
            Assert.True(result.IsSuccess);
        }
Exemple #25
0
        public void RemoveItem_WithExistentBasketItem_ShouldReturnRemoveItem()
        {
            // Arrange
            var basket = new Basket();

            basket.AddItem(1, 1, Pounds.Of(1));
            var basketItem = basket.Items.First();

            basketItem.Id = 1;

            // Act
            basket.RemoveItem(1);

            // Assert
            Assert.Equal(0, basket.Items.Count);
        }
Exemple #26
0
        public void Clear_ShouldClearBasketItemsList()
        {
            // Arrange
            var basket = new Basket();

            basket.AddItem(1, 1, Pounds.Of(1));
            var basketItem = basket.Items.First();

            basketItem.Id = 1;

            // Act
            basket.Clear();

            // Assert
            Assert.Equal(0, basket.Items.Count);
        }
Exemple #27
0
        public int CompareTo(object obj)
        {
            PoundsAndOunces other = (PoundsAndOunces)obj;

            if (Pounds.CompareTo(other.Pounds) < 0)
            {
                return(-1);
            }
            else if (Pounds.CompareTo(other.Pounds) > 0)
            {
                return(1);
            }
            else
            {
                return(Ounces.CompareTo(other.Ounces));
            }
        }
Exemple #28
0
        public void InputPayrollFormDetails(string FormTypetoCreate, string CurrentOrClosedWeekending)
        {
            //Inputs all information needed to create a new payroll form
            FormType.SelectByText(FormTypetoCreate, "FormType");
            CenterDropDown.SelectByIndex(1, "Center");

            var routeNumberValue = GenerateRandomRouteNumber();

            //Save this route number value for use later
            ScenarioContext.Current["RouteNumber"] = routeNumberValue;
            RouteNumber.EnterText(routeNumberValue, "RouteNumber");
            RouteNumber.SendKeys(Keys.Tab);

            var WeekendingDateToSelect = DateTime.Now;

            if (CurrentOrClosedWeekending == "Current")
            {
                WeekendingDateToSelect = (DateTime.Now.AddDays(6 - (int)DateTime.Now.DayOfWeek));
            }
            else
            {
                DateTime StartOfWeek = DateTime.Today.AddDays(-(int)DateTime.Today.DayOfWeek);
                WeekendingDateToSelect = StartOfWeek.AddDays(-1);
            }
            var departDateValue = WeekendingDateToSelect.AddDays(-2).ToShortDateString();

            ScenarioContext.Current["DepartDate"] = departDateValue;
            DepartDate.EnterText(departDateValue, "DepartDate");
            DepartDate.SendKeys(Keys.Tab);
            WeekendingDate.EnterText(WeekendingDateToSelect.ToShortDateString(), "WeekendingDate");
            WeekendingDate.SendKeys(Keys.Tab);
            driver.RobustWait();

            if (FormTypetoCreate == "Regular")
            {
                Cases.EnterText("25", "Cases");
                Pounds.EnterText("4000", "Cases");
                Cubes.EnterText("25", "Cubes");
                Stops.EnterText("5", "Stops");
            }
        }
Exemple #29
0
        public string ToString(string format, IFormatProvider formatProvider)
        {
            if (string.IsNullOrEmpty(format))
            {
                format = "G";
            }
            formatProvider = formatProvider ?? CultureInfo.CurrentCulture;

            switch (format)
            {
            case "G":
                string price = "";
                if (Pounds > 0)
                {
                    price += "£" + Pounds.ToString(formatProvider);
                }
                if (Shillings > 0)
                {
                    price += (price.Length > 0 ? " " : "") + Shillings.ToString(formatProvider) + "s";
                }
                if (Pence > 0)
                {
                    price += (price.Length > 0 ? " " : "") + Pence.ToString(formatProvider) + "d";
                }

                if (price.Length == 0)
                {
                    price = "0";
                }

                return(price);

            case "M":
                return(ModernEquivalent.ToString("N2", formatProvider));
            }

            throw new FormatException(string.Format("Unsupported format '{0}'", format));
        }
Exemple #30
0
        public async Task <Result <int> > AddItemToBasketAsync(int basketId, int productId, int quantity, Pounds priceInPounds)
        {
            Basket basket = await _basketRepository.GetByIdAsync(basketId);

            if (basket == null)
            {
                var message = string.Format(ErrorMessage.BasketWithIdDoesntExists, basketId);
                _logger.LogInformation(message);
                return(Result.Fail <int>(message));
            }

            BasketItem basketItem = basket.AddItem(productId, quantity, priceInPounds);
            await _basketRepository.UpdateAsync(basket);

            return(Result.Ok(basketItem.Id));
        }
        public void WriteToXml(ref XmlTextWriter xw)
        {
            SortDimensions();

            xw.WriteStartElement("Package");
            xw.WriteAttributeString("ID", Id);

            // Package Info
            xw.WriteElementString("Service", TranslateServiceCodeToString(Service));

            if (Service == DomesticServiceType.FirstClass ||
                Service == DomesticServiceType.FirstClassHoldForPickupCommercial)
            {
                xw.WriteElementString("FirstClassMailType", TranslateContainerCode(Container));
            }

            xw.WriteElementString("ZipOrigination", ZipOrigination);
            xw.WriteElementString("ZipDestination", ZipDestination);
            xw.WriteElementString("Pounds", Pounds.ToString(CultureInfo.InvariantCulture));
            xw.WriteElementString("Ounces", Math.Round(Ounces, 1).ToString(CultureInfo.InvariantCulture));

            // Container and First Class Types
            if (Service == DomesticServiceType.FirstClass ||
                Service == DomesticServiceType.FirstClassHoldForPickupCommercial)
            {
                xw.WriteElementString("Container", "");
            }
            else
            {
                xw.WriteElementString("Container", TranslateContainerCode(Container));
            }

            // Size
            if (DeterminePackageSize() == DomesticPackageSize.Large)
            {
                xw.WriteElementString("Size", "LARGE");
            }
            else
            {
                xw.WriteElementString("Size", "REGULAR");
            }

            // Dimesions here
            if (DeterminePackageSize() == DomesticPackageSize.Large)
            {
                if (HasDimensions())
                {
                    xw.WriteElementString("Width", Math.Round(Width, 1).ToString(CultureInfo.InvariantCulture));
                    xw.WriteElementString("Length", Math.Round(Length, 1).ToString(CultureInfo.InvariantCulture));
                    xw.WriteElementString("Height", Math.Round(Height, 1).ToString(CultureInfo.InvariantCulture));
                }
                else
                {
                    xw.WriteElementString("Width", Math.Round(3.0, 1).ToString(CultureInfo.InvariantCulture));
                    xw.WriteElementString("Length", Math.Round(6.0, 1).ToString(CultureInfo.InvariantCulture));
                    xw.WriteElementString("Height", Math.Round(0.25, 1).ToString(CultureInfo.InvariantCulture));
                }

                if (Container == DomesticPackageType.NonRectangular ||
                    Container == DomesticPackageType.Variable ||
                    Container == DomesticPackageType.Ignore)
                {
                    xw.WriteElementString("Girth", Math.Round(Girth(), 1).ToString(CultureInfo.InvariantCulture));
                }
            }

            // Machinable
            if (IsMachinable() == DomesticMachinable.Yes)
            {
                xw.WriteElementString("Machinable", "true");
            }
            if (IsMachinable() == DomesticMachinable.No)
            {
                xw.WriteElementString("Machinable", "false");
            }

            if (DeclaredValue > 0)
            {
                xw.WriteElementString("Value", Math.Round(DeclaredValue, 2).ToString(CultureInfo.InvariantCulture));
            }
            if (AmountToCollect > 0)
            {
                xw.WriteElementString("AmountToCollect",
                                      Math.Round(AmountToCollect, 2).ToString(CultureInfo.InvariantCulture));
            }

            // Special Services
            if (SpecialServices.Count > 0)
            {
                xw.WriteStartElement("SpecialServices");
                foreach (var s in SpecialServices)
                {
                    xw.WriteElementString("SpecialService", ((int)s).ToString(CultureInfo.InvariantCulture));
                }
                xw.WriteEndElement();
            }

            // End Package
            xw.WriteEndElement();
        }