예제 #1
0
    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,
        )
예제 #2
0
    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)
예제 #3
0
    def test_validate_empty(self):
        factories.ReceiptFactory()

        errs = models.Receipt.objects.none().validate()

        self.assertEqual(errs, [])
        self.assertEqual(models.ReceiptValidation.objects.count(), 0)
예제 #4
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())
예제 #5
0
 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)
예제 #6
0
    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")
예제 #7
0
 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
예제 #8
0
    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)
예제 #9
0
    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)
예제 #10
0
    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))
예제 #11
0
    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)
예제 #12
0
    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()
예제 #13
0
    def test_proper_filtering(self):
        receipt = factories.ReceiptFactory()
        factories.TaxFactory(receipt=receipt)
        factories.TaxFactory()

        self.assertEqual(receipt.total_tax, 9)
예제 #14
0
    def test_multiple_taxes(self):
        receipt = factories.ReceiptFactory()
        factories.TaxFactory(receipt=receipt)
        factories.TaxFactory(receipt=receipt)

        self.assertEqual(receipt.total_tax, 18)
예제 #15
0
    def test_no_tax(self):
        receipt = factories.ReceiptFactory()

        self.assertEqual(receipt.total_tax, 0)
예제 #16
0
    def test_proper_filtering(self):
        receipt = factories.ReceiptFactory()
        factories.VatFactory(receipt=receipt)
        factories.VatFactory()

        self.assertEqual(receipt.total_vat, 21)
예제 #17
0
    def test_multiple_vats(self):
        receipt = factories.ReceiptFactory()
        factories.VatFactory(receipt=receipt)
        factories.VatFactory(receipt=receipt)

        self.assertEqual(receipt.total_vat, 42)
예제 #18
0
 def test_validated(self):
     receipt = factories.ReceiptFactory(receipt_number=1)
     factories.ReceiptValidationFactory(receipt=receipt)
     self.assertEqual(receipt.is_validated, True)
예제 #19
0
 def test_not_validated(self):
     receipt = factories.ReceiptFactory()
     self.assertEqual(receipt.is_validated, False)