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)
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')
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()
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)
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', )
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)
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')
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)
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)
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())
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(), )
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-----', )
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())
def test_certificate_object(self): taxpayer = fixtures.TaxPayerFactory() cert = taxpayer.certificate_object self.assertIsInstance(cert, crypto.X509)
def test_expiration_signal_update(self): taxpayer = fixtures.TaxPayerFactory(certificate_expiration=None) taxpayer.save() expiration = taxpayer.certificate_expiration self.assertIsInstance(expiration, datetime)
def test_expiration_getter(self): taxpayer = fixtures.TaxPayerFactory() expiration = taxpayer.get_certificate_expiration() self.assertIsInstance(expiration, datetime)
def test_null_certificate_object(self): taxpayer = fixtures.TaxPayerFactory(certificate=None) cert = taxpayer.certificate_object self.assertIsNone(cert)