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