Ejemplo n.º 1
0
    def test_csr_generation(self):
        taxpayer = factories.TaxPayerFactory(key=None)
        taxpayer.generate_key()

        csr_file = taxpayer.generate_csr()
        csr = csr_file.read().decode()

        self.assertEqual(
            csr.splitlines()[0],
            '-----BEGIN CERTIFICATE REQUEST-----'
        )

        self.assertEqual(
            csr.splitlines()[-1],
            '-----END CERTIFICATE REQUEST-----'
        )

        loaded_csr = crypto.load_certificate_request(crypto.FILETYPE_PEM, csr)
        self.assertIsInstance(loaded_csr, crypto.X509Req)

        expected_components = [
            (b'O', b'John Smith'),
            (b'CN', b'djangoafip1489537017'),
            (b'serialNumber', b'CUIT 20329642330'),
        ]

        self.assertEqual(
            expected_components,
            loaded_csr.get_subject().get_components()
        )
Ejemplo n.º 2
0
    def test_dont_overwrite_keys(self):
        text = b"Hello! I'm not really a key :D"
        taxpayer = factories.TaxPayerFactory(key=FileField(data=text))

        taxpayer.generate_key()
        key = taxpayer.key.read()

        self.assertEqual(text, key)
Ejemplo n.º 3
0
    def test_untrusted_certificate_exception(self):
        """
        Test that using an untrusted ceritificate raises as expected.
        """
        # Note that we hit production with a sandbox cert here:
        taxpayer = factories.TaxPayerFactory(is_sandboxed=False)

        with self.assertRaises(exceptions.UntrustedCertificate):
            taxpayer.create_ticket('wsfe')
Ejemplo n.º 4
0
    def setUp(self):
        """Save a TaxPayer and Ticket into the database."""
        LiveAfipTestCase.taxpayer = factories.TaxPayerFactory(pk=1)

        if not LiveAfipTestCase.ticket:
            ticket = models.AuthTicket.objects.get_any_active("wsfe")
            LiveAfipTestCase.ticket = ticket

        LiveAfipTestCase.ticket.save()
Ejemplo n.º 5
0
    def test_multiple_taxpayers(self):
        taxpayer1 = factories.TaxPayerFactory(key__data=b'Blah')
        taxpayer2 = factories.TaxPayerFactory(key__data=b'Blah')
        client = Client()
        client.force_login(self.user)

        response = client.post('/admin/afip/taxpayer/',
                               data={
                                   '_selected_action':
                                   [taxpayer1.id, taxpayer2.id],
                                   'action': 'generate_csr',
                               },
                               follow=True)

        self.assertEqual(response.status_code, 200)
        self.assertContains(
            response,
            'Can only generate CSR for one taxpayer at a time',
        )
Ejemplo n.º 6
0
    def test_key_generation(self):
        taxpayer = factories.TaxPayerFactory(key=None)
        taxpayer.generate_key()

        key = taxpayer.key.file.read().decode()
        self.assertEqual(key.splitlines()[0], "-----BEGIN PRIVATE KEY-----")
        self.assertEqual(key.splitlines()[-1], "-----END PRIVATE KEY-----")

        loaded_key = crypto.load_privatekey(crypto.FILETYPE_PEM, key)
        self.assertIsInstance(loaded_key, crypto.PKey)
Ejemplo n.º 7
0
    def test_multiple_taxpayers(self):
        taxpayer1 = factories.TaxPayerFactory(key__data=b"Blah")
        taxpayer2 = factories.TaxPayerFactory(key__data=b"Blah")
        client = Client()
        client.force_login(self.user)

        response = client.post(
            "/admin/afip/taxpayer/",
            data={
                "_selected_action": [taxpayer1.id, taxpayer2.id],
                "action": "generate_csr",
            },
            follow=True,
        )

        self.assertEqual(response.status_code, 200)
        self.assertContains(
            response,
            "Can only generate CSR for one taxpayer at a time",
        )
Ejemplo n.º 8
0
    def test_expired_certificate_exception(self):
        """Test that using an expired ceritificate raises as expected."""
        with open(os.path.join(settings.BASE_DIR,
                               'test_expired.key'), ) as key, open(
                                   os.path.join(settings.BASE_DIR,
                                                'test_expired.crt'), ) as crt:
            taxpayer = factories.TaxPayerFactory(
                key=FileField(from_file=key),
                certificate=FileField(from_file=crt),
            )

        with self.assertRaises(exceptions.CertificateExpired):
            taxpayer.create_ticket('wsfe')
Ejemplo n.º 9
0
    def test_overwrite_keys_force(self):
        text = b"Hello! I'm not really a key :D"
        taxpayer = factories.TaxPayerFactory(key__data=text)

        taxpayer.generate_key(force=True)
        key = taxpayer.key.file.read().decode()

        self.assertNotEqual(text, key)
        self.assertEqual(key.splitlines()[0], "-----BEGIN PRIVATE KEY-----")
        self.assertEqual(key.splitlines()[-1], "-----END PRIVATE KEY-----")

        loaded_key = crypto.load_privatekey(crypto.FILETYPE_PEM, key)
        self.assertIsInstance(loaded_key, crypto.PKey)
Ejemplo n.º 10
0
def test_template_discovery(client):
    taxpayer = factories.TaxPayerFactory(cuit="20329642330")
    factories.TaxPayerProfileFactory(taxpayer=taxpayer)
    pdf = factories.ReceiptPDFFactory(
        receipt__point_of_sales__owner=taxpayer,
        receipt__point_of_sales__number=9999,
        receipt__receipt_type__code=6,
    )
    factories.ReceiptValidationFactory(receipt=pdf.receipt)

    client = Client()
    response = client.get("{}?html=true".format(
        reverse("receipt_displaypdf_view", args=(pdf.receipt.pk, ))))

    assert response.content == b"This is a dummy template to test template discovery.\n"
Ejemplo n.º 11
0
    def test_without_key(self):
        taxpayer = factories.TaxPayerFactory(key=None)
        taxpayer.generate_key()
        client = Client()
        client.force_login(self.user)

        response = client.post('/admin/afip/taxpayer/',
                               data={
                                   '_selected_action': [taxpayer.id],
                                   'action': 'generate_csr',
                               },
                               follow=True)

        self.assertEqual(response.status_code, 200)
        self.assertIn(b'Content-Type: application/pkcs10',
                      response.serialize_headers().splitlines())
        self.assertContains(
            response,
            '-----BEGIN CERTIFICATE REQUEST-----',
        )
Ejemplo n.º 12
0
    def test_bogus_certificate_exception(self):
        """Test that using a junk ceritificates raises as expected."""

        # New TaxPayers will fail to save with an invalid cert, but many
        # systems may have very old TaxPayers, externally created, or other
        # stuff, so this scenario might still be possible.
        with patch(
                'django_afip.models.TaxPayer.get_certificate_expiration',
                spec=True,
                return_value=None,
        ):
            taxpayer = factories.TaxPayerFactory(
                key=FileField(data=b'Blah'),
                certificate=FileField(data=b'Blah'),
            )

        with self.assertRaises(exceptions.CorruptCertificate) as e:
            taxpayer.create_ticket('wsfe')

        self.assertNotIsInstance(e, exceptions.AfipException)
Ejemplo n.º 13
0
    def test_without_key(self):
        taxpayer = factories.TaxPayerFactory(key=None)
        client = Client()
        client.force_login(self.user)

        response = client.post('/admin/afip/taxpayer/',
                               data={
                                   '_selected_action': [taxpayer.id],
                                   'action': 'generate_key',
                               },
                               follow=True)

        self.assertEqual(response.status_code, 200)
        self.assertContains(response, 'Key generated successfully.')

        taxpayer.refresh_from_db()
        self.assertIn(
            '-----BEGIN PRIVATE KEY-----',
            taxpayer.key.file.read().decode(),
        )
Ejemplo n.º 14
0
    def test_with_key(self):
        taxpayer = factories.TaxPayerFactory(key=FileField(data=b'Blah'))
        client = Client()
        client.force_login(self.user)

        response = client.post('/admin/afip/taxpayer/',
                               data={
                                   '_selected_action': [taxpayer.id],
                                   'action': 'generate_key',
                               },
                               follow=True)

        self.assertEqual(response.status_code, 200)
        self.assertContains(
            response,
            'No keys generated; Taxpayers already had keys.',
        )

        taxpayer.refresh_from_db()
        self.assertEqual('Blah', taxpayer.key.file.read().decode())
Ejemplo n.º 15
0
    def test_pdf_view(self):
        """
        Test the PDF generation view.
        """
        taxpayer = factories.TaxPayerFactory()

        factories.TaxPayerProfileFactory(taxpayer=taxpayer)
        pdf = factories.ReceiptPDFFactory(
            receipt__point_of_sales__owner=taxpayer, )
        factories.ReceiptValidationFactory(receipt=pdf.receipt)

        client = Client()
        response = client.get(
            reverse("receipt_pdf_view", args=(pdf.receipt.pk, )))

        self.assertEqual(response.status_code, 200)
        self.assertEqual(response.content[:7], b"%PDF-1.")

        headers = sorted(response.serialize_headers().decode().splitlines())
        self.assertIn("Content-Type: application/pdf", headers)
Ejemplo n.º 16
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()
Ejemplo n.º 17
0
    def test_with_key(self):
        taxpayer = factories.TaxPayerFactory(key=FileField(data=b"Blah"))
        client = Client()
        client.force_login(self.user)

        response = client.post(
            "/admin/afip/taxpayer/",
            data={
                "_selected_action": [taxpayer.id],
                "action": "generate_key"
            },
            follow=True,
        )

        self.assertEqual(response.status_code, 200)
        self.assertContains(
            response,
            "No keys generated; Taxpayers already had keys.",
        )

        taxpayer.refresh_from_db()
        self.assertEqual("Blah", taxpayer.key.file.read().decode())
Ejemplo n.º 18
0
    def test_without_key(self):
        taxpayer = factories.TaxPayerFactory(key=None)
        taxpayer.generate_key()
        client = Client()
        client.force_login(self.user)

        response = client.post(
            "/admin/afip/taxpayer/",
            data={
                "_selected_action": [taxpayer.id],
                "action": "generate_csr"
            },
            follow=True,
        )

        self.assertEqual(response.status_code, 200)
        self.assertIn(
            b"Content-Type: application/pkcs10",
            response.serialize_headers().splitlines(),
        )
        self.assertContains(
            response,
            "-----BEGIN CERTIFICATE REQUEST-----",
        )
Ejemplo n.º 19
0
    def test_expiration_signal_update(self):
        taxpayer = factories.TaxPayerFactory(certificate_expiration=None)
        taxpayer.save()
        expiration = taxpayer.certificate_expiration

        self.assertIsInstance(expiration, datetime)
Ejemplo n.º 20
0
    def test_expiration_getter(self):
        taxpayer = factories.TaxPayerFactory()
        expiration = taxpayer.get_certificate_expiration()

        self.assertIsInstance(expiration, datetime)
Ejemplo n.º 21
0
    def test_null_certificate_object(self):
        taxpayer = factories.TaxPayerFactory(certificate=None)
        cert = taxpayer.certificate_object

        self.assertIsNone(cert)
Ejemplo n.º 22
0
    def test_certificate_object(self):
        taxpayer = factories.TaxPayerFactory()
        cert = taxpayer.certificate_object

        self.assertIsInstance(cert, crypto.X509)