示例#1
0
        public void AddBooksToSessionBasket_CheckAddItemToEmptyBasket(int id, int quantity)
        {
            using (var homeController = new HomeController(MockData.MoqLogger(), MockData.MoqShopContext(),
                                                           MockData.MoqEmailSender(), MockData.MoqMyLogger()))
            {
                OrderedBook orderedBook = new OrderedBook {
                    BookId = id, Quantity = quantity
                };
                List <OrderedBook> expectedOrderedBookList = new List <OrderedBook>();
                expectedOrderedBookList.Add(orderedBook);

                var controllerContext = new ControllerContext()
                {
                    HttpContext = new DefaultHttpContext()
                    {
                        Session = new MockHttpSession()
                    }
                };

                homeController.ControllerContext = controllerContext;

                var result = homeController.AddBooksToSessionBasket(id, quantity).ToList();

                int actualQuantity = result.FirstOrDefault(x => x.BookId == id)?.Quantity ?? 0;
                int actualId       = result.FirstOrDefault(x => x.BookId == id)?.BookId ?? 0;

                Assert.Equal(id, actualId);
                Assert.Equal(quantity, actualQuantity);
            }
        }
示例#2
0
        public async Task <MainViewModel> RemoveFromOrder(HttpContext httpContext, int page, int bookId)
        {
            MainViewModel model = await GetModelForUser(httpContext, page);

            if (model.HaveError)
            {
                return(model);
            }

            if (model.UserOrder == null)
            {
                model.ErrorMessage = "Заказ не не найден.";
                return(model);
            }

            if (model.UserOrder.IsСheckouted)
            {
                model.ErrorMessage = "Заказ уже оформлен. Изменить его невозможно.";
                return(model);
            }

            OrderedBook orderedBook = model.UserOrder.OrderedBooks.FirstOrDefault(ob => ob.BookId == bookId);

            if (orderedBook == null)
            {
                model.ErrorMessage = "Удаляемая книга в заказе не найдена";
                return(model);
            }

            model.UserOrder.OrderedBooks.Remove(orderedBook);
            _db.Orders.Update(model.UserOrder);
            await _db.SaveChangesAsync();

            return(model);
        }
示例#3
0
文件: MockData.cs 项目: Aviatore/shop
        public static IEnumerable <OrderedBook> GetRandomMoqOrderedBooksList()
        {
            shopContext        context          = MoqShopContext();
            Random             random           = new Random();
            List <int>         tmp              = new List <int>();
            List <OrderedBook> mockOrderedBooks = new List <OrderedBook>();

            int i = 0;

            while (i < 4)
            {
                int randomBookId   = random.Next(1, 12);
                int randomQuantity = random.Next(1, 8);

                if (!tmp.Contains(randomBookId))
                {
                    OrderedBook orderedBook = new OrderedBook
                    {
                        BookId   = randomBookId,
                        Quantity = randomQuantity,
                        Title    = context.Books.First(x => x.BookId == randomBookId).Title,
                        Price    = context.Books.First(x => x.BookId == randomBookId).Price
                    };

                    tmp.Add(randomBookId);
                    mockOrderedBooks.Add(orderedBook);

                    i++;
                }
            }

            return(mockOrderedBooks);
        }
示例#4
0
        protected void ddlRentOrBuy_SelectedIndexChanged(object sender, EventArgs e)
        {
            DropDownList ddl      = (DropDownList)sender;
            GridViewRow  row      = (GridViewRow)ddl.NamingContainer;
            OrderedBook  modified = OrderedBook.CreateOrder(row);

            UpdatePrice(modified, row);
        }
示例#5
0
        protected void txtQuantity_TextChanged(object sender, EventArgs e)
        {
            TextBox     text     = (TextBox)sender;
            GridViewRow row      = (GridViewRow)text.NamingContainer;
            OrderedBook modified = OrderedBook.CreateOrder(row);

            UpdatePrice(modified, row);
        }
示例#6
0
        public void AddBooksToSessionBasket_CheckAddItemToNonEmptyBasket(int id, int quantity)
        {
            using (var homeController = new HomeController(MockData.MoqLogger(), MockData.MoqShopContext(),
                                                           MockData.MoqEmailSender(), MockData.MoqMyLogger()))
            {
                OrderedBook orderedBook1 = new OrderedBook {
                    BookId = 1, Quantity = 3
                };
                OrderedBook orderedBook2 = new OrderedBook {
                    BookId = 2, Quantity = 4
                };
                OrderedBook orderedBook3 = new OrderedBook {
                    BookId = 3, Quantity = 1
                };
                List <OrderedBook> mockOrderedBookList = new List <OrderedBook>();
                mockOrderedBookList.Add(orderedBook1);
                mockOrderedBookList.Add(orderedBook2);
                mockOrderedBookList.Add(orderedBook3);

                int quantityFromSession = mockOrderedBookList.FirstOrDefault(x => x.BookId == id)?.Quantity ?? 0;

                var controllerContext = new ControllerContext()
                {
                    HttpContext = new DefaultHttpContext()
                    {
                        Session = new MockHttpSession()
                    }
                };

                homeController.ControllerContext = controllerContext;

                homeController.HttpContext.Session.Set(WebConst.SessionCart, mockOrderedBookList);

                var result = homeController.AddBooksToSessionBasket(id, quantity).ToList();

                int actualQuantity = result.FirstOrDefault(x => x.BookId == id)?.Quantity ?? 0;
                int actualId       = result.FirstOrDefault(x => x.BookId == id)?.BookId ?? 0;

                if (actualId == 0 && actualQuantity == 0)
                {
                    Assert.True(mockOrderedBookList.Count == result.Count + 1);
                }
                else
                {
                    Assert.Equal(id, actualId);
                    Assert.Equal(quantity + quantityFromSession, actualQuantity);
                }
            }
        }
示例#7
0
文件: MockData.cs 项目: Aviatore/shop
        /// <summary>
        /// Returns first four Book in List of OrderedBook.
        /// </summary>
        /// <returns></returns>
        public static IEnumerable <OrderedBook> GetMoqOrderedBooksList()
        {
            shopContext        context          = MoqShopContext();
            List <OrderedBook> mockOrderedBooks = new List <OrderedBook>();

            OrderedBook orderedBook1 = new OrderedBook
            {
                BookId   = 1,
                Quantity = 3,
                Title    = context.Books.First(x => x.BookId == 1).Title,
                Price    = context.Books.First(x => x.BookId == 1).Price
            };

            OrderedBook orderedBook2 = new OrderedBook
            {
                BookId   = 2,
                Quantity = 4,
                Title    = context.Books.First(x => x.BookId == 2).Title,
                Price    = context.Books.First(x => x.BookId == 2).Price
            };

            OrderedBook orderedBook3 = new OrderedBook
            {
                BookId   = 3,
                Quantity = 2,
                Title    = context.Books.First(x => x.BookId == 3).Title,
                Price    = context.Books.First(x => x.BookId == 3).Price
            };

            OrderedBook orderedBook4 = new OrderedBook
            {
                BookId   = 4,
                Quantity = 1,
                Title    = context.Books.First(x => x.BookId == 4).Title,
                Price    = context.Books.First(x => x.BookId == 4).Price
            };

            mockOrderedBooks.Add(orderedBook1);
            mockOrderedBooks.Add(orderedBook2);
            mockOrderedBooks.Add(orderedBook3);
            mockOrderedBooks.Add(orderedBook4);

            return(mockOrderedBooks);
        }
示例#8
0
 protected void Page_Load(object sender, EventArgs e)
 {
     if (!IsPostBack)
     {
         customer = new Customer();
         DataSet ds = dbc.GetDataSet("Select * FROM Books");
         Session["DataSet"]  = ds;
         Session["Customer"] = customer;
         UpdateInputBooksGridView();
         foreach (GridViewRow row in gvBooksInput.Rows)
         {
             OrderedBook defaultPrice = OrderedBook.CreateOrder(row);
             UpdatePrice(defaultPrice, row);
         }
     }
     if (Session["OrderComplete"] != null && (bool)Session["OrderComplete"] == true)
     {
         Session["OrderComplete"] = false;
         ClearInputs();
     }
 }
示例#9
0
        public void ShoppingCart_ShouldReturnValidModel()
        {
            using (var homeController = new HomeController(MockData.MoqLogger(), MockData.MoqShopContext(),
                                                           MockData.MoqEmailSender(), MockData.MoqMyLogger()))
            {
                OrderedBook orderedBook1 = new OrderedBook {
                    BookId = 1, Quantity = 3
                };
                OrderedBook orderedBook2 = new OrderedBook {
                    BookId = 2, Quantity = 4
                };
                OrderedBook orderedBook3 = new OrderedBook {
                    BookId = 3, Quantity = 2
                };
                List <OrderedBook> mockOrderedBookList = new List <OrderedBook>();
                mockOrderedBookList.Add(orderedBook1);
                mockOrderedBookList.Add(orderedBook2);
                mockOrderedBookList.Add(orderedBook3);

                var controllerContext = new ControllerContext()
                {
                    HttpContext = new DefaultHttpContext()
                    {
                        Session = new MockHttpSession()
                    }
                };

                homeController.ControllerContext = controllerContext;
                homeController.HttpContext.Session.Set(WebConst.SessionCart, mockOrderedBookList);

                var result = homeController.ShoppingCart() as ViewResult;
                var model  = result?.Model as ShoppingCartViewModel;

                Assert.NotNull(model);
                Assert.NotNull(model.Basket);
                Assert.Equal("The House in the Cerulean Sea", model.Basket.FirstOrDefault(x => x.BookId == 3)?.Title);
                Assert.Equal(2, model.Basket.FirstOrDefault(x => x.BookId == 3)?.Quantity);
                Assert.Equal(70.1, model.Basket.FirstOrDefault(x => x.BookId == 3)?.Price);
            }
        }
示例#10
0
        public void ShoppingCartUpdate_CheckRedirection(int id, int value)
        {
            using (var homeController = new HomeController(MockData.MoqLogger(), MockData.MoqShopContext(),
                                                           MockData.MoqEmailSender(), MockData.MoqMyLogger()))
            {
                OrderedBook orderedBook1 = new OrderedBook {
                    BookId = 1, Quantity = 3
                };
                OrderedBook orderedBook2 = new OrderedBook {
                    BookId = 2, Quantity = 4
                };
                OrderedBook orderedBook3 = new OrderedBook {
                    BookId = 4, Quantity = 2
                };
                OrderedBook orderedBook4 = new OrderedBook {
                    BookId = 3, Quantity = 3
                };
                List <OrderedBook> mockOrderedBookList = new List <OrderedBook>();
                mockOrderedBookList.Add(orderedBook1);
                mockOrderedBookList.Add(orderedBook2);
                mockOrderedBookList.Add(orderedBook3);
                mockOrderedBookList.Add(orderedBook4);

                var controllerContext = new ControllerContext()
                {
                    HttpContext = new DefaultHttpContext()
                    {
                        Session = new MockHttpSession()
                    }
                };

                homeController.ControllerContext = controllerContext;
                homeController.HttpContext.Session.Set(WebConst.SessionCart, mockOrderedBookList);

                var action = homeController.ShoppingCartUpdate(id, value) as RedirectToActionResult;

                Assert.Equal("ShoppingCart", action.ActionName);
            }
        }
示例#11
0
        private void AddBook(BookAmount bookAmount)
        {
            if (bookAmount == null)
            {
                return;
            }

            var orderedBook = Order.OrderedBooks.FirstOrDefault(ob => ob.BookId == bookAmount.BookId);

            if (orderedBook == null)
            {
                orderedBook = new OrderedBook
                {
                    Amount = 1,
                    Book   = bookAmount.Book,
                    BookId = bookAmount.BookId,
                    Price  = bookAmount.Book.Price
                };

                Order.OrderedBooks.Add(orderedBook);
            }
        }
示例#12
0
        public void GetListFromCookies_IfNotEmptyReturnList()
        {
            using (var homeController = new HomeController(MockData.MoqLogger(), MockData.MoqShopContext(),
                                                           MockData.MoqEmailSender(), MockData.MoqMyLogger()))
            {
                OrderedBook orderedBook1 = new OrderedBook {
                    BookId = 1, Quantity = 3
                };
                OrderedBook orderedBook2 = new OrderedBook {
                    BookId = 2, Quantity = 4
                };
                OrderedBook orderedBook3 = new OrderedBook {
                    BookId = 3, Quantity = 1
                };
                List <OrderedBook> mockOrderedBookList = new List <OrderedBook>();
                mockOrderedBookList.Add(orderedBook1);
                mockOrderedBookList.Add(orderedBook2);
                mockOrderedBookList.Add(orderedBook3);

                var controllerContext = new ControllerContext()
                {
                    HttpContext = new DefaultHttpContext()
                    {
                        Session = new MockHttpSession()
                    }
                };

                homeController.ControllerContext = controllerContext;
                homeController.HttpContext.Session.Set(WebConst.SessionCart, mockOrderedBookList);

                var result = homeController.GetListFromCookies();

                Assert.Equal(3, result.Count);
                Assert.Equal(4, result.FirstOrDefault(x => x.BookId == 2)?.Quantity ?? 0);
            }
        }
示例#13
0
        public async Task <MainViewModel> AddToOrder(HttpContext httpContext, int page, int bookId)
        {
            MainViewModel model = await GetModelForUser(httpContext, page);

            if (model.HaveError)
            {
                return(model);
            }

            Book book = await _db.Books.FindAsync(bookId);

            if (book == null)
            {
                model.ErrorMessage = "Добавляемая книга не найдена.";
                return(model);
            }

            if (book.Quantity < 1)
            {
                model.ErrorMessage = $"Извините, данная книга закончилась.";
                return(model);
            }

            if (model.UserOrder == null)
            {
                model.UserOrder = new Order {
                    PromoCodeValue = model.UserPromoCode
                };
                model.UserOrder.OrderedBooks = new List <OrderedBook>
                {
                    new OrderedBook
                    {
                        Order = model.UserOrder,
                        Book  = book
                    }
                };

                _db.Orders.Add(model.UserOrder);
                await _db.SaveChangesAsync();

                return(model);
            }

            if (model.UserOrder.IsСheckouted)
            {
                model.ErrorMessage = "Заказ уже оформлен. Изменить его невозможно.";
                return(model);
            }

            OrderedBook orderedBook = model.UserOrder.OrderedBooks.FirstOrDefault(ob => ob.BookId == bookId);

            if (orderedBook != null)
            {
                model.ErrorMessage = "Вы уже заказали данную книгу.";
                return(model);
            }

            orderedBook = new OrderedBook
            {
                Order = model.UserOrder,
                Book  = book
            };
            model.UserOrder.OrderedBooks.Add(orderedBook);

            _db.Orders.Update(model.UserOrder);
            await _db.SaveChangesAsync();

            return(model);
        }
示例#14
0
        protected void btnSubmitOrder_Click(object sender, EventArgs e)
        {
            //Make sure user info inputs are valid
            foreach (TextBox txt in divInputs.Controls.OfType <TextBox>().ToList())
            {
                if (!Validation.Validate(txt.Text, Regex.Split(txt.ID, "Student")[1]))
                {
                    txt.BorderColor = System.Drawing.Color.Red;
                    return;
                }
                else
                {
                    txt.BorderColor = System.Drawing.Color.LightGray;
                }
            }

            //Make sure they selected a campus
            if (ddlCampus.SelectedIndex == 0)
            {
                ddlCampus.BorderColor = System.Drawing.Color.Red;
                return;
            }
            else
            {
                ddlCampus.BorderColor = System.Drawing.Color.LightGray;
            }

            //Get every ordered book, add them to list
            List <OrderedBook> booksOrdered = new List <OrderedBook>();
            List <GridViewRow> checkedBooks = gvBooksInput.Rows.OfType <GridViewRow>()
                                              .Select(r => r.FindControl("chkBoxOrder") as CheckBox)     //Look at row's checkbox
                                              .Where(cb => cb.Checked == true)                           //If CheckBox is checked add to list
                                              .Select(cb => cb.NamingContainer as GridViewRow).ToList(); //For each checkbox in list get its row and add to final list

            //Did they order at least one book?
            if (checkedBooks.Count == 0)
            {
                lblSubmit.Text = "Must order at least one book to continue.";
                return;
            }
            else
            {
                lblSubmit.Text = "";
            }


            foreach (GridViewRow row in checkedBooks)
            {
                OrderedBook order = null;
                TextBox     txt   = (TextBox)row.FindControl("txtQuantity");
                if (Validation.Validate(txt.Text, Regex.Split(txt.ID, "txt")[1]))
                {
                    order = OrderedBook.CreateOrder(row);
                    booksOrdered.Add(order);
                    txt.BorderColor = System.Drawing.Color.LightGray;
                }
                else
                {
                    txt.BorderColor = System.Drawing.Color.Red;
                    lblSubmit.Text  = "Must provide a quantity for books you wish to order.";
                    return;
                }
            }
            Session["OrderComplete"] = true;
            //Bind ordered books to Order Gridview
            Customer customer = (Customer)Session["Customer"];

            if (!string.Equals(txtStudentID.Text, customer.StudentID))
            {
                GetCustomerInfo();
                customer = (Customer)Session["Customer"];
            }

            foreach (OrderedBook order in booksOrdered)
            {
                customer.Orders.Add(order);
            }
            gvBooksOrder.DataSource = customer.Orders;
            gvBooksOrder.DataBind();

            UpdateViewOrder();
            InventoryManagement.UpdateRecords(booksOrdered);
        }
示例#15
0
        //Update price column for order table

        public void UpdatePrice(OrderedBook modified, GridViewRow row)
        {
            Label price = (Label)row.FindControl("upPrice").FindControl("lblPrice");

            price.Text = modified.TotalCost.ToString("c");
        }
示例#16
0
        } // end go button

        // Order book button that displays the order receipt
        protected void btnOrder_Click(object sender, EventArgs e)
        {
            DropDownList ddlBookFormat;
            DropDownList ddlRentBuy;
            TextBox      quantity;

            for (int row = 0; row < gvBooks.Rows.Count; row++)
            {
                double price = Convert.ToDouble(gvBooks.DataKeys[row].Value);
                ddlBookFormat = (DropDownList)gvBooks.Rows[row].FindControl("ddlFormat");
                ddlRentBuy    = (DropDownList)gvBooks.Rows[row].FindControl("ddlRentBuy");
                quantity      = (TextBox)gvBooks.Rows[row].FindControl("txtQuantity");

                if (ddlRentBuy.SelectedValue.ToString() == "rent" &&
                    ddlBookFormat.SelectedValue.ToString() == "hardcover")
                {
                    price = price * 2;
                }
                else if (ddlRentBuy.SelectedValue.ToString() == "rent" &&
                         ddlBookFormat.SelectedValue.ToString() == "paper-back")
                {
                    price = price * .50;
                }
                else if (ddlRentBuy.SelectedValue.ToString() == "rent" &&
                         ddlBookFormat.SelectedValue.ToString() == "e-book")
                {
                    price = price * 0.10;
                }
                else if (ddlRentBuy.SelectedValue.ToString() == "buy" &&
                         ddlBookFormat.SelectedValue.ToString() == "e-book")
                {
                    price = price * 0.25;
                }
                else if (ddlRentBuy.SelectedValue.ToString() == "buy" &&
                         ddlBookFormat.SelectedValue.ToString() == "hardcover")
                {
                    price = price * 3;
                }
                else if (ddlRentBuy.SelectedValue.ToString() == "buy" &&
                         ddlBookFormat.SelectedValue.ToString() == "paper-back")
                {
                    price = price * 1;
                }

                int rentQuantity = 0;
                int buyQuantity  = 0;

                CheckBox checkBox = (CheckBox)gvBooks.Rows[row].FindControl("chkSelectBook");
                if (checkBox.Checked)
                {
                    OrderedBook book = new OrderedBook();
                    book.Isbn    = gvBooks.Rows[row].Cells[3].Text;
                    book.Title   = gvBooks.Rows[row].Cells[1].Text;
                    book.Type    = ddlBookFormat.SelectedValue.ToString();
                    book.RentBuy = ddlRentBuy.SelectedValue.ToString();
                    book.Price   = price;

                    book.Quantity   = Int32.Parse(quantity.Text.ToString());
                    book.TotalPrice = price * Convert.ToUInt32(quantity.Text.ToString());
                    orderedBooksArrayList.Add(book);

                    if (book.RentBuy == "rent")
                    {
                        rentQuantity = rentQuantity + book.Quantity;
                    }
                    else if (book.RentBuy == "buy")
                    {
                        buyQuantity = buyQuantity + book.Quantity;
                    }
                    String sqlUpdate = "UPDATE Books SET TotalSales + " +
                                       book.TotalPrice + ", " + "TotalQuantityRented = TotalQuantityRented + "
                                       + rentQuantity + ", " + "TotalQuantitySold = TotalQuantitySold " + buyQuantity +
                                       " WHERE Title = '" + book.Title + "'";
                    bookDB.DoUpdate(sqlUpdate);
                }
            } // end loop of rows.

            makeNextGridViewVisible();
            BuildTheOrder();
            gvBooks.Visible = false;
        }  // end order button event handler