Example #1
0
        public void AddValidInvoiceLines()
        {
            //arrange
            var invoice      = new Invoice();
            var invoiceItem1 = new InvoiceLine()
            {
                InvoiceLineId = 1,
                Cost          = 10.21,
                Quantity      = 4,
                Description   = "Banana"
            };

            var invoiceItem2 = new InvoiceLine()
            {
                InvoiceLineId = 2,
                Cost          = 5.21,
                Quantity      = 1,
                Description   = "Orange"
            };

            //act
            invoice.AddInvoiceLine(invoiceItem1);
            invoice.AddInvoiceLine(invoiceItem2);

            //Assert
            Assert.IsTrue(invoice.LineItems.Count == 2, "LineItems not added successfully");
            Assert.AreSame(invoice.LineItems[0], invoiceItem1, "AddInvoiceLine does not return same result as inserted");
        }
Example #2
0
        public decimal RemoveItem()
        {
            var invoice = new Invoice();

            invoice.AddInvoiceLine(new InvoiceLine()
            {
                InvoiceLineId = 1,
                Cost          = 5.21m,
                Quantity      = 1,
                Description   = "Orange"
            });

            invoice.AddInvoiceLine(new InvoiceLine()
            {
                InvoiceLineId = 2,
                Cost          = 10.99m,
                Quantity      = 4,
                Description   = "Banana"
            });

            invoice.RemoveInvoiceLine(1);
            var total = invoice.GetTotal();

            new LogManager().Log($"RemoveItem(). Total: {total}");
            return(total);
        }
Example #3
0
        public void TestClone()
        {
            //arrange
            var originalInvoice = new Invoice();
            var invoiceItem1    = new InvoiceLine()
            {
                InvoiceLineId = 1,
                Cost          = 10.21,
                Quantity      = 4,
                Description   = "Banana"
            };

            var invoiceItem2 = new InvoiceLine()
            {
                InvoiceLineId = 2,
                Cost          = 5.21,
                Quantity      = 1,
                Description   = "Orange"
            };

            //act
            originalInvoice.AddInvoiceLine(invoiceItem1);
            originalInvoice.AddInvoiceLine(invoiceItem2);
            var clonedInvoice = originalInvoice.Clone();

            //Assert
            Assert.IsTrue(originalInvoice.GetHashCode() == clonedInvoice.GetHashCode(), "cloned object is different to source object");
            Assert.IsFalse(ReferenceEquals(clonedInvoice.LineItems[0], originalInvoice.LineItems[0]), "cloned object must not have any references to original object");
            Assert.IsFalse(ReferenceEquals(clonedInvoice.LineItems[1], originalInvoice.LineItems[1]), "cloned object must not have any references to original object");
        }
Example #4
0
        public decimal CreateInvoiceWithMultipleItemsAndQuantities()
        {
            var invoice = new Invoice();

            invoice.AddInvoiceLine(new InvoiceLine()
            {
                InvoiceLineId = 1,
                Cost          = 10.21m,
                Quantity      = 4,
                Description   = "Banana"
            });

            invoice.AddInvoiceLine(new InvoiceLine()
            {
                InvoiceLineId = 2,
                Cost          = 5.21m,
                Quantity      = 1,
                Description   = "Orange"
            });

            invoice.AddInvoiceLine(new InvoiceLine()
            {
                InvoiceLineId = 3,
                Cost          = 5.21m,
                Quantity      = 5,
                Description   = "Pineapple"
            });
            var total = invoice.GetTotal();

            new LogManager().Log($"CreateInvoiceWithMultipleItemsAndQuantities(). Total: {total}");
            return(total);
        }
Example #5
0
        public decimal CloneInvoice()
        {
            var invoice = new Invoice();

            invoice.AddInvoiceLine(new InvoiceLine()
            {
                InvoiceLineId = 1,
                Cost          = 6.99m,
                Quantity      = 1,
                Description   = "Apple"
            });

            invoice.AddInvoiceLine(new InvoiceLine()
            {
                InvoiceLineId = 2,
                Cost          = 6.27m,
                Quantity      = 3,
                Description   = "Blueberries"
            });

            var clonedInvoice = invoice.Clone();
            var total         = clonedInvoice.GetTotal();

            new LogManager().Log($"CloneInvoice(). Total: {total}");
            return(total);
        }
Example #6
0
        public void TestToString()
        {
            Invoice invoice = new Invoice();

            invoice.AddInvoiceLine(itemRepo.QueryByDescription("Apple"), 2);
            invoice.AddInvoiceLine(itemRepo.QueryByDescription("Orange"), 3);
            Assert.IsTrue(invoice.GetTotal() == 6.99m * 2 + 5.21m * 3,
                          "Fail to caculate total cost");
        }
Example #7
0
        public void TestToString()
        {
            Invoice invoice = new Invoice();

            invoice.AddInvoiceLine(itemRepo.QueryByDescription("Apple"), 2);
            invoice.AddInvoiceLine(itemRepo.QueryByDescription("Orange"), 3);
            Assert.IsTrue(invoice.ToString()
                          == string.Format("Invoice Number: {0}, InvoiceDate: {1:dd/MM/yyyy}, LineItemCount: {2}",
                                           invoice.InvoiceNumber, invoice.InvoiceDate, invoice.LineItems.Count));
        }
Example #8
0
        public void AddInvalidInvoiceLineIdInvoiceLine()
        {
            //arrange
            var invoice = new Invoice();

            //act
            var result = invoice.AddInvoiceLine(new InvoiceLine()
            {
                InvoiceLineId = 2,
                Cost          = 5,
                Quantity      = 0,
                Description   = "Orange"
            });

            //Assert
            Assert.IsFalse(result.Success, "Invoice Item must have a non-zero quantity");

            //arrange
            invoice = new Invoice();

            //act
            result = invoice.AddInvoiceLine(new InvoiceLine()
            {
                InvoiceLineId = -2,
                Cost          = 5,
                Quantity      = 5,
                Description   = "Orange"
            });

            //Assert
            Assert.IsFalse(result.Success, "Invoice Item must have a non-negative quantity");

            //arrange
            invoice = new Invoice();

            //act
            invoice.AddInvoiceLine(new InvoiceLine()
            {
                InvoiceLineId = 1,
                Cost          = 5,
                Quantity      = 5,
                Description   = "Orange"
            });

            result = invoice.AddInvoiceLine(new InvoiceLine()
            {
                InvoiceLineId = 1,
                Cost          = 5,
                Quantity      = 5,
                Description   = "Orange"
            });

            //Assert
            Assert.IsFalse(result.Success, "Invoice Line Id must be unique.");
        }
Example #9
0
        public void TestRemoveLine()
        {
            Invoice invoice = new Invoice();

            invoice.AddInvoiceLine(itemRepo.QueryByDescription("Apple"), 2);
            invoice.AddInvoiceLine(itemRepo.QueryByDescription("Orange"), 3);
            Assert.IsTrue(invoice.LineItems.Count == 2, "Did not remove a line");
            invoice.RemoveInvoiceLine(1);
            Assert.IsTrue(invoice.LineItems.Count == 1 && invoice.LineItems[0].Description == "Orange",
                          "Did not remove the right line");
            invoice.AddInvoiceLine(itemRepo.QueryByDescription("Pineapple"), 3);
            invoice.RemoveInvoiceLine("00000004");
            Assert.IsTrue(invoice.LineItems.Count == 1 && invoice.LineItems[0].Description == "Orange",
                          "Did not remove the right line");
        }
Example #10
0
        public void AddInvoiceLine_Update_Success()
        {
            var invoice = new Invoice()
            {
                InvoiceNumber = 1210,
                InvoiceDate   = DateTime.Now,
                LineItems     = new List <InvoiceLine>()
                {
                    new InvoiceLine()
                    {
                        InvoiceLineId = 1234,
                        Description   = "Test Invoice Item",
                        Quantity      = 2,
                        Cost          = 20
                    }
                }
            };
            var invoiceLine = new InvoiceLine()
            {
                InvoiceLineId = 1234,
                Description   = "Test Invoice Item",
                Quantity      = 1,
                Cost          = 10
            };

            invoice.AddInvoiceLine(invoiceLine);
            var expected = invoiceLine;
            var actual   = invoice.LineItems.First();

            Assert.Equal(expected, actual);
        }
Example #11
0
        public void AddInvalidCostInvoiceLine()
        {
            //arrange
            var invoice = new Invoice();

            //act
            var result = invoice.AddInvoiceLine(new InvoiceLine()
            {
                InvoiceLineId = 2,
                Cost          = 0,
                Quantity      = 1,
                Description   = "Orange"
            });

            //Assert
            Assert.IsFalse(result.Success, "Invoice Item must have a non-zero cost");

            //arrange
            invoice = new Invoice();

            //act
            result = invoice.AddInvoiceLine(new InvoiceLine()
            {
                InvoiceLineId = 2,
                Cost          = -1,
                Quantity      = 1,
                Description   = "Orange"
            });

            //Assert
            Assert.IsFalse(result.Success, "Invoice Item must have a non-negative quantity");
        }
Example #12
0
        public Invoice CreateBasedInOrder(Order order)
        {
            var invoice      = new Invoice(order);
            var invoiceLines = new List <InvoiceLine>();
            var taxLine      = new TaxLine();

            foreach (var line in order.OrderLines)
            {
                var currentTaxLine = taxLine.GetDefaultTaxes(line.TotalPrice);
                var invoiceLine    = new InvoiceLine(orderLine: line, taxLine: currentTaxLine);

                invoiceLines.Add(invoiceLine);
            }

            foreach (var line in invoiceLines)
            {
                invoice.AddInvoiceLine(line);
            }

            if (!invoice.Valid)
            {
                return(invoice);
            }

            order.Bill();

            _orderRepository.Update(order);
            _invoiceRepository.Create(invoice);

            _uow.Commit();

            return(invoice);
        }
Example #13
0
        public void AddInvoiceLine_EmptyValue_Fail()
        {
            var invoice = new Invoice()
            {
                InvoiceNumber = 1210,
                InvoiceDate   = DateTime.Now
            };
            InvoiceLine invoiceLine = null;

            Assert.False(invoice.AddInvoiceLine(invoiceLine));
        }
Example #14
0
        public void AddNullInvoiceLine()
        {
            //arrange
            var invoice = new Invoice();

            //act
            var result = invoice.AddInvoiceLine(null);

            //Assert
            Assert.IsFalse(result.Success, "should not be able to add null invoice item");
        }
Example #15
0
        public decimal MergeInvoices()
        {
            var invoice1 = new Invoice();

            invoice1.AddInvoiceLine(new InvoiceLine()
            {
                InvoiceLineId = 1,
                Cost          = 10.33m,
                Quantity      = 4,
                Description   = "Banana"
            });

            var invoice2 = new Invoice();

            invoice2.AddInvoiceLine(new InvoiceLine()
            {
                InvoiceLineId = 2,
                Cost          = 5.22m,
                Quantity      = 1,
                Description   = "Orange"
            });

            invoice2.AddInvoiceLine(new InvoiceLine()
            {
                InvoiceLineId = 3,
                Cost          = 6.27m,
                Quantity      = 3,
                Description   = "Blueberries"
            });

            invoice1.MergeInvoices(invoice2);
            var total = invoice1.GetTotal();

            new LogManager().Log($"MergeInvoices(). Total: {total}");
            return(total);
        }
Example #16
0
        public void AddInvalidDescriptionInvoiceLine()
        {
            //arrange
            var invoice = new Invoice();

            //act
            var result = invoice.AddInvoiceLine(new InvoiceLine()
            {
                InvoiceLineId = 2,
                Cost          = 5,
                Quantity      = 5,
                Description   = ""
            });

            //Assert
            Assert.IsFalse(result.Success, "InvoiceLine must have a description");
        }
Example #17
0
        public decimal CreateInvoiceWithOneItem()
        {
            var invoice = new Invoice();

            invoice.AddInvoiceLine(new InvoiceLine()
            {
                InvoiceLineId = 1,//"1"
                Cost          = 6.99m,
                Quantity      = 1,
                Description   = "Apple"
            });

            decimal total = invoice.GetTotal();

            new LogManager().Log($"CreateInvoiceWithOneItem(). Total: {total}");
            return(total);
        }
Example #18
0
        public void RemoveValidInvoiceLines()
        {
            //arrange
            var invoice      = new Invoice();
            var invoiceItem1 = new InvoiceLine()
            {
                InvoiceLineId = 1,
                Cost          = 10.21,
                Quantity      = 4,
                Description   = "Banana"
            };


            //act
            invoice.AddInvoiceLine(invoiceItem1);
            var result = invoice.RemoveInvoiceLine(1);

            //assert
            Assert.IsTrue(invoice.LineItems.Count == 0, "LineItems was not removed successfully ");
            Assert.IsTrue(result.Success, "LineItems was not removed successfully ");
        }
Example #19
0
        public void RemoveInValidInvoiceLines()
        {
            //arrange
            var invoice      = new Invoice();
            var invoiceItem1 = new InvoiceLine()
            {
                InvoiceLineId = 1,
                Cost          = 10.21,
                Quantity      = 4,
                Description   = "Banana"
            };


            //act
            invoice.AddInvoiceLine(invoiceItem1);
            var result = invoice.RemoveInvoiceLine(2);

            //assert
            Assert.IsTrue(invoice.LineItems.Count == 1, "No LineItems should have been removed");
            Assert.IsTrue(invoice.LineItems[0] == invoiceItem1, "No LineItems should have been removed");
            Assert.IsFalse(result.Success, "RemoveInvoiceLine should have failed");
        }