public void Can_Rebuild_Invoice_Index()
        {
            //// Arrange
            PreTestDataWorker.DeleteAllInvoices();
            var invoice1 = MockInvoiceDataMaker.InvoiceForInserting(_address, 100);
            var invoice2 = MockInvoiceDataMaker.InvoiceForInserting(_address, 200);

            PreTestDataWorker.InvoiceService.Save(invoice1);
            PreTestDataWorker.InvoiceService.Save(invoice2);

            //// Act
            var timer = new Stopwatch();

            timer.Start();
            ExamineManager.Instance.IndexProviderCollection["MerchelloInvoiceIndexer"].RebuildIndex();
            timer.Stop();
            Console.Write("Time to index: " + timer.Elapsed.ToString());

            //// Assert
            var searcher = ExamineManager.Instance.SearchProviderCollection["MerchelloInvoiceSearcher"];

            var criteria = searcher.CreateSearchCriteria(Merchello.Examine.IndexTypes.Invoice);

            criteria.Field("allDocs", "1");
            var results = searcher.Search(criteria);

            Assert.AreEqual(2, results.Count());
        }
        public void Can_Add_An_Invoice_ToIndex()
        {
            //// Arrange
            var invoice3 = MockInvoiceDataMaker.InvoiceForInserting(_address, 300);

            invoice3.Items.Add(new InvoiceLineItem(LineItemType.Product, "test", "test", 1, 100));
            invoice3.Items.Add(new InvoiceLineItem(LineItemType.Product, "test2", "test2", 2, 100));
            PreTestDataWorker.InvoiceService.Save(invoice3);
            var order = invoice3.PrepareOrder(Core.MerchelloContext.Current);

            Core.MerchelloContext.Current.Services.OrderService.Save(order);
            var key = invoice3.Key;

            //// Act
            Core.MerchelloContext.Current.Services.InvoiceService.GetByKey(key);
            var searcher = ExamineManager.Instance.SearchProviderCollection["MerchelloInvoiceSearcher"];

            var criteria = searcher.CreateSearchCriteria(Merchello.Examine.IndexTypes.Invoice);

            criteria.Field("invoiceKey", key.ToString());
            var results = searcher.Search(criteria);

            //// Assert
            Assert.AreEqual(1, results.Count());
        }
        public void Can_Create_InvoiceDiplay_From_Index_Document()
        {
            //// Arrange
            var invoice = MockInvoiceDataMaker.InvoiceForInserting(_address, 300);

            invoice.Items.Add(new InvoiceLineItem(LineItemType.Product, "test", "test", 1, 100));
            invoice.Items.Add(new InvoiceLineItem(LineItemType.Product, "test2", "test2", 2, 100));
            PreTestDataWorker.InvoiceService.Save(invoice);

            //// Act
            var invoiceDisplay = InvoiceQuery.GetByKey(invoice.Key);

            //// Assert
            Assert.NotNull(invoiceDisplay);
            Assert.AreEqual(Constants.DefaultKeys.InvoiceStatus.Unpaid, invoiceDisplay.InvoiceStatus.Key);
            Assert.AreEqual(invoice.Items.Count, invoiceDisplay.Items.Count());
        }
        public void Init()
        {
            var address = new Address()
            {
                Name       = "Mindfly",
                Address1   = "114 W. Magnolia St.",
                Address2   = "Suite 300",
                Locality   = "Bellingham",
                Region     = "WA",
                PostalCode = "98225",
                Email      = "*****@*****.**",
                Phone      = "555-555-5555"
            };

            _invoice = MockInvoiceDataMaker.InvoiceForInserting(address, 599.99M);
            ((Invoice)_invoice).InvoiceNumber = 123;
            _invoice.Items.Add(new InvoiceLineItem(LineItemType.Product, "Xbox One", "Xbox1", 1, 486M));
            _invoice.Items.Add(new InvoiceLineItem(LineItemType.Product, "Xbox One TitanFall", "XB1-TitanFall", 2, 49.99M));
            _invoice.Items.Add(new InvoiceLineItem(LineItemType.Shipping, "Shipping", "Shipping", 1, 30.00M));
            _invoice.Items.Add(new InvoiceLineItem(LineItemType.Tax, "Sales Tax", "Tax", 1, 14.01M));


            _message
                = @"{{BillToName}}
Your address
{{BillToAddress1}}
{{BillToAddress2}}
{{BillToLocality}}, {{BillToRegion}} {{BillToPostalCode}}

Email : {{BillToEmail}}
Phone : {{BillToPhone}}

Invoice Number : {{InvoiceNumber}}

Items Purchased:

{{IterationStart[Invoice.Items]}}
+ {{Item.Name}} -> {{Item.Sku}} -> {{Item.UnitPrice}} -> {{Item.Quantity}} -> {{Item.TotalPrice}}
{{IterationEnd[Invoice.Items]}}

Thanks for the order.
";
        }
        public void Can_Create_OrderDisplay_From_Index_Document()
        {
            //// Arrange
            var invoice = MockInvoiceDataMaker.InvoiceForInserting(_address, 300);

            invoice.Items.Add(new InvoiceLineItem(LineItemType.Product, "test", "test", 1, 100));
            invoice.Items.Add(new InvoiceLineItem(LineItemType.Product, "test2", "test2", 2, 100));
            PreTestDataWorker.InvoiceService.Save(invoice);

            var order = invoice.PrepareOrder();

            Core.MerchelloContext.Current.Services.OrderService.Save(order);

            //// Act
            var orderDisplay = OrderQuery.GetByKey(order.Key);

            //// Assert
            Assert.NotNull(orderDisplay);
            Assert.AreEqual(Constants.DefaultKeys.OrderStatus.NotFulfilled, orderDisplay.OrderStatus.Key);
            Assert.AreEqual(order.Items.Count, orderDisplay.Items.Count());
        }
        public void Can_Updates_Index_With_InvoiceService_SaveEvent()
        {
            //// Arrange

            //// Act
            var invoice3 = MockInvoiceDataMaker.InvoiceForInserting(_address, 300);

            invoice3.Items.Add(new InvoiceLineItem(LineItemType.Product, "test", "test", 1, 100));
            invoice3.Items.Add(new InvoiceLineItem(LineItemType.Product, "test2", "test2", 2, 100));
            PreTestDataWorker.InvoiceService.Save(invoice3);

            var searcher = ExamineManager.Instance.SearchProviderCollection["MerchelloInvoiceSearcher"];

            var criteria = searcher.CreateSearchCriteria(Merchello.Examine.IndexTypes.Invoice);

            criteria.Field("invoiceKey", invoice3.Key.ToString());
            var results = searcher.Search(criteria);

            //// Assert
            Assert.AreEqual(1, results.Count());
        }
        public void Can_Retrieve_Invoices_By_Customer_From_The_Index()
        {
            //// Arrange

            var customer = PreTestDataWorker.CustomerService.CreateCustomerWithKey(
                "rusty",
                "firstName",
                "lastName",
                "*****@*****.**");

            var invoice1 = MockInvoiceDataMaker.InvoiceForInserting(_address, 300);

            invoice1.Items.Add(new InvoiceLineItem(LineItemType.Product, "test", "test", 1, 100));
            invoice1.Items.Add(new InvoiceLineItem(LineItemType.Product, "test2", "test2", 2, 100));
            ((Invoice)invoice1).CustomerKey = customer.Key;

            var invoice2 = MockInvoiceDataMaker.InvoiceForInserting(_address, 100);

            invoice2.Items.Add(new InvoiceLineItem(LineItemType.Product, "test", "test", 1, 100));
            ((Invoice)invoice2).CustomerKey = customer.Key;

            var invoice3 = MockInvoiceDataMaker.InvoiceForInserting(_address, 300);

            invoice3.Items.Add(new InvoiceLineItem(LineItemType.Product, "test2", "test2", 3, 100));
            ((Invoice)invoice3).CustomerKey = customer.Key;

            PreTestDataWorker.InvoiceService.Save(invoice1);
            PreTestDataWorker.InvoiceService.Save(invoice2);
            PreTestDataWorker.InvoiceService.Save(invoice3);

            //// Act
            var merchello = new MerchelloHelper();

            var invoices = merchello.InvoicesByCustomer(customer.Key);

            //// Assert
            Assert.NotNull(invoices, "invoices was null");
            Assert.IsTrue(invoices.Any());
            Assert.AreEqual(3, invoices.Count());
        }
 public void Init()
 {
     PreTestDataWorker.DeleteAllInvoices();
     _invoice = MockInvoiceDataMaker.InvoiceForInserting(_address, 150);
     PreTestDataWorker.InvoiceService.Save(_invoice);
 }