def test_validation_filters(self): """ Test the admin validation filters. This filters receipts by the validation status. """ validated_receipt = factories.ReceiptFactory() failed_validation_receipt = factories.ReceiptFactory() not_validated_receipt = factories.ReceiptFactory() factories.ReceiptValidationFactory(receipt=validated_receipt) factories.ReceiptValidationFactory( result=models.ReceiptValidation.RESULT_REJECTED, receipt=failed_validation_receipt, ) client = Client() client.force_login(User.objects.first()) response = client.get("/admin/afip/receipt/?status=validated") self.assertContains( response, '<input class="action-select" name="_selected_action" value="{}" ' 'type="checkbox">'.format(validated_receipt.pk), html=True, ) self.assertNotContains( response, '<input class="action-select" name="_selected_action" value="{}" ' 'type="checkbox">'.format(not_validated_receipt.pk), html=True, ) self.assertNotContains( response, '<input class="action-select" name="_selected_action" value="{}" ' 'type="checkbox">'.format(failed_validation_receipt.pk), html=True, ) response = client.get("/admin/afip/receipt/?status=not_validated") self.assertNotContains( response, '<input class="action-select" name="_selected_action" value="{}" ' 'type="checkbox">'.format(validated_receipt.pk), html=True, ) self.assertContains( response, '<input class="action-select" name="_selected_action" value="{}" ' 'type="checkbox">'.format(not_validated_receipt.pk), html=True, ) self.assertContains( response, '<input class="action-select" name="_selected_action" value="{}" ' 'type="checkbox">'.format(failed_validation_receipt.pk), html=True, )
def test_failed_validation(self): # These should never really exist,but oh well: receipt = factories.ReceiptFactory() factories.ReceiptValidationFactory( receipt=receipt, result=models.ReceiptValidation.RESULT_REJECTED, ) self.assertEqual(receipt.is_validated, False) receipt = factories.ReceiptFactory(receipt_number=1) factories.ReceiptValidationFactory( receipt=receipt, result=models.ReceiptValidation.RESULT_REJECTED, ) self.assertEqual(receipt.is_validated, False)
def test_validate_empty(self): factories.ReceiptFactory() errs = models.Receipt.objects.none().validate() self.assertEqual(errs, []) self.assertEqual(models.ReceiptValidation.objects.count(), 0)
def test_generate_barcode(self): """ Test that barcode generation matches that from a pre-generated example. """ receipt = factories.ReceiptFactory( point_of_sales__number=1, receipt_type__code=11, ) factories.ReceiptValidationFactory(receipt=receipt,) generator = ReceiptBarcodeGenerator(receipt) barcode = generator.generate_barcode(SVGWriter) # Remove the line that stamps the pyBarcode version # Otherwise this test will break as soon as a new release comes out. lines = [ line for line in barcode.splitlines() if b'Autogenerated with python-barcode' not in line ] directory = os.path.dirname(os.path.abspath(__file__)) path = os.path.join(directory, 'barcode.svg') with open(path, 'rb') as f: self.assertEqual(lines, f.read().splitlines())
def setUp(self): super().setUp() self.receipt = factories.ReceiptFactory( point_of_sales=models.PointOfSales.objects.first(), ) factories.VatFactory(vat_type__code=5, receipt=self.receipt) factories.TaxFactory(tax_type__code=3, receipt=self.receipt)
def test_download_name(self): factories.ReceiptFactory(pk=9, receipt_number=32) view = views.ReceiptPDFView() view.kwargs = {"pk": 9} self.assertEqual(view.get_download_name(), "0001-00000032.pdf")
def _bad_receipt(self): receipt = factories.ReceiptFactory( point_of_sales=models.PointOfSales.objects.first(), document_type__code=80, ) factories.VatFactory(vat_type__code=5, receipt=receipt) factories.TaxFactory(tax_type__code=3, receipt=receipt) return receipt
def test_validate(self): receipt = factories.ReceiptFactory() ticket = MagicMock() self.called = False def fake_validate(qs, ticket=None): self.assertQuerysetEqual(qs, [receipt.pk], lambda r: r.pk) self.called = True with patch( "django_afip.models.ReceiptQuerySet.validate", fake_validate, ): receipt.validate(ticket) self.assertTrue(self.called)
def test_validation_good_without_tax(self): """Test validating valid receipts.""" receipt = factories.ReceiptFactory( point_of_sales=models.PointOfSales.objects.first(), total_amount=121, ) factories.VatFactory(vat_type__code=5, receipt=receipt) errs = models.Receipt.objects.all().validate() self.assertEqual(len(errs), 0) self.assertEqual( receipt.validation.result, models.ReceiptValidation.RESULT_APPROVED, ) self.assertEqual(models.ReceiptValidation.objects.count(), 1)
def test_validate(self): receipt = factories.ReceiptFactory() queryset = models.Receipt.objects.filter(pk=receipt.pk) ticket = MagicMock() with patch( "django_afip.models.ReceiptQuerySet._assign_numbers", spec=True, ) as mocked_assign_numbers, patch( "django_afip.models.ReceiptQuerySet._validate", spec=True, ) as mocked__validate: queryset.validate(ticket) self.assertEqual(mocked_assign_numbers.call_count, 1) self.assertEqual(mocked__validate.call_count, 1) self.assertEqual(mocked__validate.call_args, call(ticket))
def test_validation_with_observations(self): receipt = factories.ReceiptFactory( document_number=20291144404, document_type__code=80, point_of_sales=models.PointOfSales.objects.first(), receipt_type__code=1, ) factories.VatFactory(vat_type__code=5, receipt=receipt) factories.TaxFactory(tax_type__code=3, receipt=receipt) errs = models.Receipt.objects.all().validate() self.assertEqual(len(errs), 0) self.assertEqual( receipt.validation.result, models.ReceiptValidation.RESULT_APPROVED, ) self.assertEqual(models.ReceiptValidation.objects.count(), 1) self.assertEqual(models.Observation.objects.count(), 1) self.assertEqual(receipt.validation.observations.count(), 1)
def test_unauthorized_receipt_generation(self): """ Test PDF file generation for unauthorized receipts. Confirm that attempting to generate a PDF for an unauthorized receipt raises. """ taxpayer = factories.TaxPayerFactory() factories.TaxPayerProfileFactory(taxpayer=taxpayer) receipt = factories.ReceiptFactory( receipt_number=None, point_of_sales__owner=taxpayer, ) pdf = models.ReceiptPDF.objects.create_for_receipt( receipt=receipt, client_name="John Doe", client_address="12 Green Road\nGreenville\nUK", ) with self.assertRaisesMessage( Exception, "Cannot generate pdf for non-authorized receipt" ): pdf.save_pdf()
def test_proper_filtering(self): receipt = factories.ReceiptFactory() factories.TaxFactory(receipt=receipt) factories.TaxFactory() self.assertEqual(receipt.total_tax, 9)
def test_multiple_taxes(self): receipt = factories.ReceiptFactory() factories.TaxFactory(receipt=receipt) factories.TaxFactory(receipt=receipt) self.assertEqual(receipt.total_tax, 18)
def test_no_tax(self): receipt = factories.ReceiptFactory() self.assertEqual(receipt.total_tax, 0)
def test_proper_filtering(self): receipt = factories.ReceiptFactory() factories.VatFactory(receipt=receipt) factories.VatFactory() self.assertEqual(receipt.total_vat, 21)
def test_multiple_vats(self): receipt = factories.ReceiptFactory() factories.VatFactory(receipt=receipt) factories.VatFactory(receipt=receipt) self.assertEqual(receipt.total_vat, 42)
def test_validated(self): receipt = factories.ReceiptFactory(receipt_number=1) factories.ReceiptValidationFactory(receipt=receipt) self.assertEqual(receipt.is_validated, True)
def test_not_validated(self): receipt = factories.ReceiptFactory() self.assertEqual(receipt.is_validated, False)