public void GetSavedDraftOrdersRetrievesOrdersWithDraftStatusAndForCurrentUser()
        {
            OrdersManagementDataSet ds = new OrdersManagementDataSet();

            OrdersManagementDataSet.OrdersRow ordersRow = ds.Orders.NewOrdersRow();
            ordersRow.Approver    = "WhoCares";
            ordersRow.Creator     = "CurrentUser";
            ordersRow.OrderName   = "Test Order";
            ordersRow.OrderStatus = (int)OrderStatusEnum.Draft;
            ds.Orders.AddOrdersRow(ordersRow);
            OrdersManagementDataSet.OrderDetailsRow detailRow = ds.OrderDetails.NewOrderDetailsRow();
            detailRow.OrdersRow = ordersRow;
            detailRow.ProductId = 11;
            detailRow.Quantity  = 3;
            ds.OrderDetails.AddOrderDetailsRow(detailRow);
            ds.AcceptChanges();

            FakeProductService productService = new FakeProductService();

            productService.Products.Add(new Product(11, null, null, 2.99m, null));
            OrdersService ordersService = new OrdersService(ds, productService);

            IList <Order> orders = ordersService.GetSavedDraftOrders("CurrentUser");

            Assert.IsNotNull(orders);
            Assert.AreEqual(1, orders.Count);
            Order order = orders[0];

            Assert.AreEqual("Test Order", order.OrderName);
            Assert.IsNotNull(order);
            Assert.AreEqual(1, order.Details.Count);
            Assert.AreEqual((short)3, order.Details[0].Quantity);
            Assert.AreEqual(2.99m, order.Details[0].UnitPrice);
        }
        public void SaveAsDraftWithExistingOrderUpdatesDetailsInRepository()
        {
            Order order = GetPopulatedOrder();

            order.OrderId = 0;
            order.Details.Add(new OrderDetail(0, 10, 1, 1.99m));

            OrdersManagementDataSet ds            = new OrdersManagementDataSet();
            OrdersService           ordersService = new OrdersService(ds, GetPopulatedProductService());

            ordersService.SaveAsDraft(order);
            int orderID = order.OrderId;

            order         = GetPopulatedOrder();
            order.OrderId = orderID;
            order.Details.Add(new OrderDetail(0, 20, 3, 2.50m));
            int detailsCount = order.Details.Count;

            ordersService.SaveAsDraft(order);

            Assert.AreEqual(detailsCount, ds.OrderDetails.Count);
            OrdersManagementDataSet.OrderDetailsRow detailRow = ds.OrderDetails.FindByOrderIdProductId(order.OrderId, 20);
            Assert.IsNotNull(detailRow);
            Assert.AreEqual((short)3, detailRow.Quantity);

            OrdersManagementDataSet.OrderDetailsRow deletedDetailRow = ds.OrderDetails.FindByOrderIdProductId(order.OrderId, 10);
            Assert.IsNull(deletedDetailRow);
        }
        public void SubmitOrderAddsOrderDetails()
        {
            Order order = GetPopulatedOrder();

            order.OrderId = 0;
            OrdersManagementDataSet ds            = new OrdersManagementDataSet();
            OrdersService           ordersService = new OrdersService(ds, new FakeProductService());

            order.Details.Add(new OrderDetail(0, 10, 1, 1.99m));
            int detailsCount = order.Details.Count;

            ordersService.SaveAsDraft(order);

            Assert.AreEqual(detailsCount, ds.OrderDetails.Count);
            OrdersManagementDataSet.OrderDetailsRow detailRow = ds.OrderDetails.FindByOrderIdProductId(order.OrderId, 10);
            Assert.IsNotNull(detailRow);
            Assert.AreEqual((short)1, detailRow.Quantity);
        }
        private int PersistOrder(Order order, int newStatus)
        {
            OrdersManagementDataSet.OrdersRow ordersRow;
            if (order.OrderId <= 0)
            {
                ordersRow = repository.Orders.NewOrdersRow();
            }
            else
            {
                ordersRow = repository.Orders.FindByOrderId(order.OrderId);
                foreach (OrdersManagementDataSet.OrderDetailsRow detailRow in ordersRow.GetOrderDetailsRows())
                {
                    detailRow.Delete();
                }
            }
            TranslateFromOrderEntityToOrdersRow(order, ordersRow);
            ordersRow.OrderStatus = newStatus;

            if (order.Details != null)
            {
                foreach (OrderDetail detail in order.Details)
                {
                    OrdersManagementDataSet.OrderDetailsRow detailRow = repository.OrderDetails.NewOrderDetailsRow();
                    detailRow.OrdersRow = ordersRow;
                    detailRow.ProductId = detail.ProductId;
                    detailRow.Quantity  = detail.Quantity;
                    repository.OrderDetails.AddOrderDetailsRow(detailRow);
                }
            }

            if (order.OrderId <= 0)
            {
                repository.Orders.AddOrdersRow(ordersRow);
            }

            int newOrderId = ordersRow.OrderId;

            return(newOrderId);
        }
        public void GetOrderWithDetailsGetsBothOrderAndDetails()
        {
            OrdersManagementDataSet ds = new OrdersManagementDataSet();

            OrdersManagementDataSet.OrdersRow ordersRow = ds.Orders.NewOrdersRow();
            ordersRow.CustomerId     = "11";
            ordersRow.Description    = "MyDescription";
            ordersRow.Approver       = "MyEmployeeId";
            ordersRow.Creator        = "MyEmployeeId";
            ordersRow.OrderName      = "MyOrderName";
            ordersRow.OrderStatus    = (int)OrderStatusEnum.Draft;
            ordersRow.ShipAddress    = "MyShipAddress";
            ordersRow.ShipCity       = "MyShipCity";
            ordersRow.ShipPostalCode = "MyZip";
            ordersRow.ShipRegion     = "MyShipRegion";
            ds.Orders.AddOrdersRow(ordersRow);
            OrdersManagementDataSet.OrderDetailsRow detailRow = ds.OrderDetails.NewOrderDetailsRow();
            detailRow.OrdersRow = ordersRow;
            detailRow.ProductId = 11;
            detailRow.Quantity  = 3;
            ds.OrderDetails.AddOrderDetailsRow(detailRow);
            ds.AcceptChanges();

            FakeProductService productService = new FakeProductService();

            productService.Products.Add(new Product(11, null, null, 2.99m, null));

            OrdersService ordersService = new OrdersService(ds, productService);

            Order order = ordersService.GetOrderWithDetails(ordersRow.OrderId);

            Assert.IsNotNull(order);
            Assert.AreEqual(ordersRow.OrderId, order.OrderId);
            Assert.AreEqual("MyDescription", order.Description);
            Assert.IsNotNull(order.Details);
            Assert.AreEqual(1, order.Details.Count);
            Assert.AreEqual((short)3, order.Details[0].Quantity);
            Assert.AreEqual(2.99m, order.Details[0].UnitPrice);
        }
        public void DeleteRemovesOrderDetailsFromRepository()
        {
            OrdersManagementDataSet ds = new OrdersManagementDataSet();

            OrdersManagementDataSet.OrdersRow ordersRow = ds.Orders.NewOrdersRow();
            ordersRow.OrderId     = 2;
            ordersRow.Approver    = "CurrentUser";
            ordersRow.Creator     = "CurrentUser";
            ordersRow.OrderName   = "Test Order";
            ordersRow.OrderStatus = (int)OrderStatusEnum.Draft;
            ds.Orders.AddOrdersRow(ordersRow);
            OrdersManagementDataSet.OrderDetailsRow detailRow = ds.OrderDetails.NewOrderDetailsRow();
            detailRow.OrdersRow = ordersRow;
            detailRow.ProductId = 11;
            detailRow.Quantity  = 3;
            ds.OrderDetails.AddOrderDetailsRow(detailRow);
            ds.AcceptChanges();
            OrdersService ordersService = new OrdersService(ds, new FakeProductService());

            ordersService.DeleteOrder(2);

            Assert.AreEqual(0, ds.Orders.Count);
            Assert.AreEqual(0, ds.OrderDetails.Count);
        }