def test_get_next_line_number_fill_gap(): """get the number for the next invoice line""" invoice = InvoiceFactory() InvoiceLineFactory(invoice=invoice, line_number=1) InvoiceLineFactory(invoice=invoice, line_number=2) InvoiceLineFactory(invoice=invoice, line_number=4) assert 3 == invoice.get_next_line_number()
def test_invoice_create_pdf_not_draft(self): """Cannot create a PDF if the invoice has already been printed""" InvoiceSettingsFactory() VatSettingsFactory() invoice = InvoiceFactory() InvoiceLineFactory(invoice=invoice) InvoicePrint().create_pdf(invoice, None) self.assertRaises(InvoiceError, InvoicePrint().create_pdf, invoice, None)
def test_report_total_by_user(): contact = ContactFactory() invoice = InvoiceFactory(contact=contact) InvoiceSettingsFactory() # no time records InvoiceLineFactory(invoice=invoice) # u1's time records invoice_line = InvoiceLineFactory(invoice=invoice) t1 = TicketFactory(contact=contact) TimeRecordFactory( ticket=t1, user=UserFactory(username='******'), invoice_line=invoice_line ) # u2's time records invoice_line = InvoiceLineFactory(invoice=invoice) u2 = UserFactory(username='******') t2 = TicketFactory(contact=contact) TimeRecordFactory(ticket=t2, user=u2, invoice_line=invoice_line) invoice_line = InvoiceLineFactory(invoice=invoice) t3 = TicketFactory(contact=contact) TimeRecordFactory(ticket=t3, user=u2, invoice_line=invoice_line) result = invoice.time_analysis() # invoice has a line with no time records assert '' in result # fred recorded time on one ticket assert 'u1' in result u1 = result['u1'] assert 1 == len(u1) assert t1.pk in u1 # sara recorded time on two tickets assert 'u2' in result u2 = result['u2'] assert 2 == len(u2) assert t2.pk in u2 assert t3.pk in u2 # web user added an invoice line, but didn't record time assert 'web' not in result # check net total matches invoice net = Decimal() for user, tickets in result.items(): for ticket_pk, totals in tickets.items(): net = net + totals['net'] assert invoice.net == net
def test_has_lines(): """does the invoice have any lines""" invoice = InvoiceFactory() InvoiceLineFactory( invoice=invoice, quantity=Decimal('1.3'), units='hours', price=Decimal('300.00'), ) assert invoice.has_lines is True
def test_user_can_edit_invoice(): InvoiceSettingsFactory() VatSettingsFactory() invoice = InvoiceFactory() line = InvoiceLineFactory(invoice=invoice) TimeRecordFactory(invoice_line=line) InvoicePrint().create_pdf(invoice, None) # refresh line = InvoiceLine.objects.get(pk=line.pk) assert line.user_can_edit is False
def test_report_total_by_user(): contact = ContactFactory() invoice = InvoiceFactory(contact=contact) InvoiceSettingsFactory() # no time records InvoiceLineFactory(invoice=invoice) # u1's time records invoice_line = InvoiceLineFactory(invoice=invoice) t1 = TicketFactory(contact=contact) TimeRecordFactory(ticket=t1, user=UserFactory(username='******'), invoice_line=invoice_line) # u2's time records invoice_line = InvoiceLineFactory(invoice=invoice) u2 = UserFactory(username='******') t2 = TicketFactory(contact=contact) TimeRecordFactory(ticket=t2, user=u2, invoice_line=invoice_line) invoice_line = InvoiceLineFactory(invoice=invoice) t3 = TicketFactory(contact=contact) TimeRecordFactory(ticket=t3, user=u2, invoice_line=invoice_line) result = invoice.time_analysis() # invoice has a line with no time records assert '' in result # fred recorded time on one ticket assert 'u1' in result u1 = result['u1'] assert 1 == len(u1) assert t1.pk in u1 # sara recorded time on two tickets assert 'u2' in result u2 = result['u2'] assert 2 == len(u2) assert t2.pk in u2 assert t3.pk in u2 # web user added an invoice line, but didn't record time assert 'web' not in result # check net total matches invoice net = Decimal() for user, tickets in result.items(): for ticket_pk, totals in tickets.items(): net = net + totals['net'] assert invoice.net == net
def test_create(): """ Create a simple invoice """ invoice = InvoiceFactory() invoice.full_clean() invoice.save() assert invoice.pk > 0 assert invoice.number > 0
def test_get_next_line_number_two_invoices(): """get the number for the next invoice line""" invoice_1 = InvoiceFactory() InvoiceLineFactory(invoice=invoice_1, line_number=1) InvoiceLineFactory(invoice=invoice_1, line_number=2) invoice_2 = InvoiceFactory() InvoiceLineFactory(invoice=invoice_2, line_number=1) assert 3 == invoice_1.get_next_line_number() assert 2 == invoice_2.get_next_line_number()
def test_create_with_lines(): """ Create a simple invoice with lines """ VatSettingsFactory() invoice = InvoiceFactory() line = InvoiceLineFactory( invoice=invoice, quantity=Decimal('1.3'), units='hours', price=Decimal('300.00'), ) line = InvoiceLineFactory( invoice=invoice, quantity=Decimal('2.4'), units='hours', price=Decimal('200.23'), ) assert invoice.pk > 0 assert Decimal('870.55') == invoice.net assert Decimal('1044.66') == invoice.gross assert line.is_credit is False
def test_invoice_detail(perm_check): invoice = InvoiceFactory() url = reverse('invoice.detail', kwargs={'pk': invoice.pk}) perm_check.staff(url)
def test_invoice_create_pdf_no_lines(self): """Cannot create a PDF if the invoice has no lines""" invoice = InvoiceFactory() self.assertRaises(InvoiceError, InvoicePrint().create_pdf, invoice, None)
def test_invoice_update(perm_check): invoice = InvoiceFactory() url = reverse('invoice.update', kwargs={'pk': invoice.pk}) perm_check.staff(url)
def test_has_lines_not(): invoice = InvoiceFactory() assert invoice.has_lines is False
def test_get_first_line_number(): """get the number for the first invoice line""" invoice = InvoiceFactory() assert 1 == invoice.get_next_line_number()
def test_description(): invoice = InvoiceFactory() assert 'Invoice' == invoice.description
def test_invoice_create_pdf(perm_check): invoice = InvoiceFactory() url = reverse('invoice.create.pdf', kwargs={'pk': invoice.pk}) perm_check.staff(url)
def test_next_number(): InvoiceFactory(number=99) assert 100 == Invoice.objects.next_number()
def test_next_number_2(): InvoiceFactory(number=99, deleted=True) InvoiceFactory(number=98, deleted_version=1) assert 1 == Invoice.objects.next_number()