Example #1
0
    def test_dont_overwrite_keys(self):
        text = "Hello! I'm not really a key :D".encode()
        taxpayer = fixtures.TaxPayerFactory(key=FileField(data=text))

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

        self.assertEqual(text, key)
Example #2
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 = fixtures.TaxPayerFactory(is_sandboxed=False)

        with self.assertRaises(exceptions.UntrustedCertificate):
            taxpayer.create_ticket('wsfe')
Example #3
0
    def setUp(self):
        """Save a TaxPayer and Ticket into the database."""
        LiveAfipTestCase.taxpayer = fixtures.TaxPayerFactory(pk=1)

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

        LiveAfipTestCase.ticket.save()
Example #4
0
    def test_key_generation(self):
        taxpayer = fixtures.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)
Example #5
0
    def test_multiple_taxpayers(self):
        taxpayer1 = fixtures.TaxPayerFactory(key__data=b'Blah')
        taxpayer2 = fixtures.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',
        )
Example #6
0
    def test_overwrite_keys_force(self):
        text = "Hello! I'm not really a key :D".encode()
        taxpayer = fixtures.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)
Example #7
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 = fixtures.TaxPayerFactory(
                key=FileField(from_file=key),
                certificate=FileField(from_file=crt),
            )

        with self.assertRaises(exceptions.CertificateExpired):
            taxpayer.create_ticket('wsfe')
Example #8
0
    def test_pdf_view(self):
        """
        Test the PDF generation view.
        """
        taxpayer = fixtures.TaxPayerFactory()

        fixtures.TaxPayerProfileFactory(taxpayer=taxpayer)
        pdf = fixtures.ReceiptPDFFactory(
            receipt__point_of_sales__owner=taxpayer, )
        fixtures.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)
Example #9
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 = fixtures.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)
Example #10
0
    def test_with_key(self):
        taxpayer = fixtures.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())
Example #11
0
    def test_without_key(self):
        taxpayer = fixtures.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(),
        )
Example #12
0
    def test_without_key(self):
        taxpayer = fixtures.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-----',
        )
Example #13
0
    def test_csr_generation(self):
        taxpayer = fixtures.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())
Example #14
0
    def test_certificate_object(self):
        taxpayer = fixtures.TaxPayerFactory()
        cert = taxpayer.certificate_object

        self.assertIsInstance(cert, crypto.X509)
Example #15
0
    def test_expiration_signal_update(self):
        taxpayer = fixtures.TaxPayerFactory(certificate_expiration=None)
        taxpayer.save()
        expiration = taxpayer.certificate_expiration

        self.assertIsInstance(expiration, datetime)
Example #16
0
    def test_expiration_getter(self):
        taxpayer = fixtures.TaxPayerFactory()
        expiration = taxpayer.get_certificate_expiration()

        self.assertIsInstance(expiration, datetime)
Example #17
0
    def test_null_certificate_object(self):
        taxpayer = fixtures.TaxPayerFactory(certificate=None)
        cert = taxpayer.certificate_object

        self.assertIsNone(cert)