public OrderController()
 {
     customerRepository = new CustomerRepository();
     orderRepository = new OrderRepository();
     inventoryRepository = new InventoryRepository();
     emailLibrary = new EmailLibrary();
 }
        public void FindCustomersTestBlankString()
        {
            // Arrange
            CustomerRepository target = new CustomerRepository
                {new Customer()
                      { CustomerId = 1,
                        FirstName="Rosie",
                        LastName = "Cotton",
                        EmailAddress = "*****@*****.**"},
                new Customer()
                      { CustomerId = 2,
                        FirstName="Bilbo",
                        LastName = "Baggins",
                        EmailAddress = "*****@*****.**"},
                new Customer()
                      { CustomerId = 3,
                        FirstName="Frodo",
                        LastName = "Baggins",
                        EmailAddress = "*****@*****.**"}};

            string customerName = "   ";
            List<Customer> expected = null;

            // Act
            var actual = target.FindCustomers(customerName);

            // Assert
            Assert.AreEqual(expected, actual);
        }
        public void RetrieveExistingWithAddress()
        {
            //-- Arrange
            var customerRepositorty = new CustomerRepository();
            var expected = new Customer(1)
            {
                EmailAddress = "*****@*****.**",
                FirstName = "Frodo",
                LastName = "Baggins",
                AddressList = new List<Address>()
                    {
                        new Address()
                        {
                            AddressType = 1,
                            StreetLine1 = "Bag End",
                            StreetLine2 = "Bagshot row",
                            City = "Hobbiton",
                            State = "Shire",
                            Country = "Middle Earth",
                            PostalCode = "144"
                        },
                        new Address()
                        {
                            AddressType = 2,
                            StreetLine1 = "Green Dragon",
                            City = "Bywater",
                            State = "Shire",
                            Country = "Middle Earth",
                            PostalCode = "146"
                        }
                    }
            };
            

            //-- Act
            var actual = customerRepositorty.Retrieve(1);

            //-- Assert
            Assert.AreEqual(expected.CustomerId, actual.CustomerId);
            Assert.AreEqual(expected.EmailAddress, actual.EmailAddress);
            Assert.AreEqual(expected.FirstName, actual.FirstName);
            Assert.AreEqual(expected.LastName, actual.LastName);

            for (int i = 0; i < 1; i++)
            {
                Assert.AreEqual(expected.AddressList[i].AddressType, actual.AddressList[i].AddressType);
                Assert.AreEqual(expected.AddressList[i].StreetLine1, actual.AddressList[i].StreetLine1);
                Assert.AreEqual(expected.AddressList[i].City, actual.AddressList[i].City);
                Assert.AreEqual(expected.AddressList[i].State, actual.AddressList[i].State);
                Assert.AreEqual(expected.AddressList[i].Country, actual.AddressList[i].Country);
                Assert.AreEqual(expected.AddressList[i].PostalCode, actual.AddressList[i].PostalCode);
            }

        }
        public void RetrieveExisting()
        {
            //--Arrange
            var customerRepository = new CustomerRepository();

            var expected = new Customer(1)
            {
                EmailAddress = "*****@*****.**",
                FirstName = "Frodo",
                LastName = "Baggins"
            };

            //--Act
            var actual = customerRepository.Retrieve(1);

            //--Asset
            Assert.AreEqual(expected.EmailAddress, actual.EmailAddress);
            Assert.AreEqual(expected.FirstName, actual.FirstName);
            Assert.AreEqual(expected.LastName, actual.LastName);
            Assert.AreEqual(expected.CustomerId, actual.CustomerId);
        }
        public void FindCustomersTestValidString()
        {
            // Arrange
            CustomerRepository target = new CustomerRepository
                {new Customer()
                      { CustomerId = 1,
                        FirstName="Rosie",
                        LastName = "Cotton",
                        EmailAddress = "*****@*****.**"},
                new Customer()
                      { CustomerId = 2,
                        FirstName="Bilbo",
                        LastName = "Baggins",
                        EmailAddress = "*****@*****.**"},
                new Customer()
                      { CustomerId = 3,
                        FirstName="Frodo",
                        LastName = "Baggins",
                        EmailAddress = "*****@*****.**"}};

            string searchString = "agg";
            List<Customer> expected = new List<Customer>
                {new Customer()
                      { CustomerId = 2,
                        FirstName="Bilbo",
                        LastName = "Baggins",
                        EmailAddress = "*****@*****.**"},
                new Customer()
                      { CustomerId = 3,
                        FirstName="Frodo",
                        LastName = "Baggins",
                        EmailAddress = "*****@*****.**"}};

            // Act
            var actual = target.FindCustomers(searchString);

            // Assert
            TestContext.WriteLine(searchString);
            Debug.WriteLine("Using Debug: " + searchString);
            Assert.AreEqual(expected.Count, actual.Count);

            foreach (Customer item in actual)
            {
                TestContext.WriteLine(item.ToString());

                // Find the item in the expected list
                Customer expectedItem = expected.FirstOrDefault(c => c.CustomerId == item.CustomerId);

                Assert.AreEqual(expectedItem.LastName, item.LastName);
                Assert.AreEqual(expectedItem.FirstName, item.FirstName);
                Assert.AreEqual(expectedItem.EmailAddress, item.EmailAddress);
            }
        }