def test_add_invoice_ok(self): """ It should add an invoice to the `InvoiceStats` storage. """ valid_invoice = Invoice(10_000, 0) invoice_stats = InvoiceStats() invoice_stats.add_invoice(valid_invoice) self.assertListEqual(invoice_stats._invoices, [valid_invoice])
def test_add_invoice_negative_raise_invalid_invoice_error(self): """ Invoice's dollars amount is negative. It should raise a `InvalidInvoiceError` error. """ negative_invoice = Invoice(-1, 0) invoice_stats = InvoiceStats() with self.assertRaises(InvalidInvoiceError) as context: invoice_stats.add_invoice(negative_invoice) self.assertEqual(context.exception.code, 2)
def test_add_invoice_too_large_raise_invalid_invoice_error(self): """ Invoice's amount is greater than maximum allowed value. It should raise a `InvalidInvoiceError` error. """ too_large_invoice = Invoice(200_000_000, 1) invoice_stats = InvoiceStats() with self.assertRaises(InvalidInvoiceError) as context: invoice_stats.add_invoice(too_large_invoice) self.assertEqual(context.exception.code, 3)
def test_add_invoice_float_raise_invalid_invoice_error(self): """ Invoice's dollars amount is not an integer. It should raise a `InvalidInvoiceError` error. """ float_invoice = Invoice(1.1, 0) invoice_stats = InvoiceStats() with self.assertRaises(InvalidInvoiceError) as context: invoice_stats.add_invoice(float_invoice) self.assertEqual(context.exception.code, 1)
def test_add_invoice_raise_maximum_number_of_invoices_reached(self): """ We shrink the `_MAX_INVOICES` value to 0 It should raise a `MaximumNumberOfInvoicesReached` error. """ invoice = Invoice(10_000, 0) invoice_stats = InvoiceStats() invoice_stats._MAX_INVOICES = 0 with self.assertRaises(MaximumNumberOfInvoicesReached) as context: invoice_stats.add_invoice(invoice) self.assertEqual(context.exception.code, 4)