Example #1
0
        public void CreateInvoice_ReturnsNewInvoice()
        {
            var client = Api.ListClients().First();

            _toDelete = Api.CreateInvoice(new InvoiceOptions()
            {
                ClientId = client.Id,
                Subject = "Test Create Invoice"
            });

            Assert.Equal("Test Create Invoice", _toDelete.Subject);
            Assert.Equal(client.Id, _toDelete.ClientId);
        }
        public void StateChangesApply()
        {
            var invoice = Api.CreateInvoice(InvoiceKind.FreeForm, GetTestId(TestId.ClientId), DateTime.Now, lineItems: new List<InvoiceItem>());
            _toDeleteInvoice = invoice;

            Assert.Equal(InvoiceState.Draft, invoice.State);

            // test send
            var success = Api.MarkInvoiceSent(invoice.Id, "MARK AS SENT");
            var messages = Api.ListInvoiceMessages(invoice.Id);
            invoice = Api.Invoice(invoice.Id);

            Assert.True(success);
            Assert.Contains("MARK AS SENT", messages.Select(m => m.Body));
            Assert.Equal(InvoiceState.Open, invoice.State);

            // test draft
            success = Api.MarkInvoiceDraft(invoice.Id);
            invoice = Api.Invoice(invoice.Id);

            Assert.True(success);
            Assert.Equal(InvoiceState.Draft, invoice.State);

            // test close
            Api.MarkInvoiceSent(invoice.Id, null);
            success = Api.MarkInvoiceClosed(invoice.Id, "MARK AS CLOSED");
            messages = Api.ListInvoiceMessages(invoice.Id);
            invoice = Api.Invoice(invoice.Id);

            Assert.True(success);
            Assert.Contains("MARK AS CLOSED", messages.Select(m => m.Body));
            Assert.Equal(InvoiceState.Closed, invoice.State);

            // test reopen
            success = Api.ReopenInvoice(invoice.Id, "RE-OPEN");
            messages = Api.ListInvoiceMessages(invoice.Id);
            invoice = Api.Invoice(invoice.Id);

            Assert.True(success);
            //Assert.Contains("RE-OPEN", messages.Select(m => m.Body)); I think there is a bug in Harvest. The body does not get saved on reopen.
            Assert.Equal(InvoiceState.Open, invoice.State);
        }
Example #3
0
        public void UpdateInvoice_ReturnsUpdatedInvoice()
        {
            var client = Api.ListClients().First();

            var invoice = Api.CreateInvoice(new InvoiceOptions()
            {
                ClientId = client.Id,
                Subject = "Test Update Invoice",
                Notes = "Notes",
                IssuedAt = DateTime.Now.AddDays(-1),
                DueAtHumanFormat = InvoiceDateAtFormat.Net15
            });

            Assert.Equal(DateTime.Now.AddDays(14).ToString("yyyy-MM-dd"), invoice.DueAt.ToString("yyyy-MM-dd"));
            Assert.Equal(DateTime.Now.AddDays(-1).ToString("yyyy-MM-dd"), invoice.IssuedAt.ToString("yyyy-MM-dd"));

            // REVIEW: Bugs in the api currently prevent setting the due-at date.
            // https://github.com/harvesthq/api/issues/66

            var updated = Api.UpdateInvoice(invoice.Id, new InvoiceOptions()
            {
                Subject = "Tested",
                //DueAtHumanFormat = InvoiceDateAtFormat.Custom,
                //DueAt = DateTime.Now.AddDays(10)
            });

            _toDelete = invoice;

            // fields that changed
            Assert.Equal("Tested", updated.Subject);
            //Assert.Equal(DateTime.Now.AddDays(-1).ToString("yyyy-MM-dd"), updated.IssuedAt.ToString("yyyy-MM-dd"));
            //Assert.Equal(DateTime.Now.AddDays(10).ToString("yyyy-MM-dd"), updated.DueAt.ToString("yyyy-MM-dd"));

            // fields that didn't change
            Assert.Equal(invoice.ClientId, updated.ClientId);
            Assert.Equal(invoice.Notes, updated.Notes);
        }
Example #4
0
        public void CreateInvoice_WithItemsContainsItems()
        {
            var client = Api.ListClients().First();

            var options = new InvoiceOptions()
            {
                ClientId = client.Id,
                Subject = "Test Items Invoice",
                Kind = InvoiceKind.FreeForm
            };

            options.SetInvoiceItems(new List<InvoiceItem>()
            {
                new InvoiceItem() { Kind = "Product", Description = "Description 1", Quantity = 1, Amount = 10 },
                new InvoiceItem() { Kind = "Product", Description = "Description 2", Quantity = 2, Amount = 10 }
            });

            _toDelete = Api.CreateInvoice(options);

            Assert.Equal(2, _toDelete.ListLineItems().Count());
        }