test iparapheur: mock responses as binary data (#38781)

This commit is contained in:
Emmanuel Cazenave 2020-01-22 11:33:01 +01:00
parent 6af2012a69
commit 1fe9040b73
1 changed files with 31 additions and 30 deletions

View File

@ -13,6 +13,7 @@ from requests.exceptions import ConnectionError
from django.core.urlresolvers import reverse
from django.contrib.contenttypes.models import ContentType
from django.utils import timezone
from django.utils.encoding import force_bytes
from passerelle.base.models import ApiUser, AccessRight
from passerelle.contrib.iparapheur.models import IParapheur
@ -65,7 +66,7 @@ def iph_mocked_get(url, params=None, **kwargs):
else:
raise Exception('my fault error, url is not yet mocked: %s' % url)
response._content=file(target_file).read()
response._content = open(target_file, 'rb').read()
response.status_code = 200
return response
@ -117,7 +118,7 @@ def test_create_file(mocked_post, mocked_get, app, conn):
for filename in ('iparapheur_test.odt', 'iparapheur_test.pdf'):
soap_response = """<?xml version='1.0' encoding='UTF-8'?><S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/"><S:Body><CreerDossierResponse xmlns="http://www.adullact.org/spring-ws/iparapheur/1.0" xmlns:xmime="http://www.w3.org/2005/05/xmlmime"><MessageRetour><codeRetour>OK</codeRetour><message>Dossier %s soumis dans le circuit</message><severite>INFO</severite></MessageRetour><DossierID>%s</DossierID></CreerDossierResponse></S:Body></S:Envelope>""" % (filename, file_id)
response._content = soap_response
response._content = force_bytes(soap_response)
mocked_post.return_value = response
title, ext = filename.split('.')
base64_data = 'VGVzdCBEb2N1bWVudA=='
@ -150,7 +151,7 @@ def test_create_file(mocked_post, mocked_get, app, conn):
# Missing dossier_id in response
title = 'foo'
soap_response = """<?xml version='1.0' encoding='UTF-8'?><S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/"><S:Body><CreerDossierResponse xmlns="http://www.adullact.org/spring-ws/iparapheur/1.0" xmlns:xmime="http://www.w3.org/2005/05/xmlmime"><MessageRetour><codeRetour>OK</codeRetour><message>Dossier %s soumis dans le circuit</message><severite>INFO</severite></MessageRetour><DossierID></DossierID></CreerDossierResponse></S:Body></S:Envelope>""" % title
response._content = soap_response
response._content = force_bytes(soap_response)
mocked_post.return_value = response
base64_data = 'VGVzdCBEb2N1bWVudA=='
data = {
@ -173,7 +174,7 @@ def test_create_file(mocked_post, mocked_get, app, conn):
# KO
soap_response = """<?xml version='1.0' encoding='UTF-8'?><S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/"><S:Body><CreerDossierResponse xmlns="http://www.adullact.org/spring-ws/iparapheur/1.0" xmlns:xmime="http://www.w3.org/2005/05/xmlmime"><MessageRetour><codeRetour>KO</codeRetour><message>KOmessage</message><severite>INFO</severite></MessageRetour></CreerDossierResponse></S:Body></S:Envelope>"""
response._content = soap_response
response._content = force_bytes(soap_response)
mocked_post.return_value = response
resp = app.post_json(url, params=data, status=500)
assert (BASE_URL,) == mocked_post.call_args[0]
@ -183,7 +184,7 @@ def test_create_file(mocked_post, mocked_get, app, conn):
# unknown response
soap_response = """<?xml version='1.0' encoding='UTF-8'?><S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/"><S:Body><CreerDossierResponse xmlns="http://www.adullact.org/spring-ws/iparapheur/1.0" xmlns:xmime="http://www.w3.org/2005/05/xmlmime"></CreerDossierResponse></S:Body></S:Envelope>"""
response._content = soap_response
response._content = force_bytes(soap_response)
mocked_post.return_value = response
resp = app.post_json(url, params=data, status=500)
assert (BASE_URL,) == mocked_post.call_args[0]
@ -193,7 +194,7 @@ def test_create_file(mocked_post, mocked_get, app, conn):
# bad response
soap_response = """<nada>"""
response._content = soap_response
response._content = force_bytes(soap_response)
mocked_post.return_value = response
resp = app.post_json(url, params=data, status=500)
assert (BASE_URL,) == mocked_post.call_args[0]
@ -217,7 +218,7 @@ def test_create_file(mocked_post, mocked_get, app, conn):
'endpoint': 'create-file', 'slug': conn.slug})
url += '?apikey=%s' % API_KEY
soap_response = """<nada>"""
response._content = soap_response
response._content = force_bytes(soap_response)
mocked_post.return_value = response
resp = app.post_json(url, params=data, status=500)
assert (BASE_URL,) == mocked_post.call_args[0]
@ -232,7 +233,7 @@ def test_files(mocked_post, mocked_get, app, conn):
response.status_code = 200
soap_response = """<?xml version='1.0' encoding='UTF-8'?><S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/"><S:Body><RechercherDossiersResponse xmlns="http://www.adullact.org/spring-ws/iparapheur/1.0" xmlns:xmime="http://www.w3.org/2005/05/xmlmime"><LogDossier><timestamp>2015-10-29T15:42:08.732+01:00</timestamp><nom>test</nom><status>Lu</status><annotation></annotation><accessible>KO</accessible></LogDossier><LogDossier><timestamp>2015-10-29T15:52:42.167+01:00</timestamp><nom>Test2</nom><status>RejetSignataire</status><annotation></annotation><accessible>OK</accessible></LogDossier><LogDossier><timestamp>2015-11-25T12:13:30.830+01:00</timestamp><nom>6ceecfb7-67ee-4388-8943-35911c640031</nom><status>NonLu</status><annotation></annotation><accessible>Recuperable</accessible></LogDossier></RechercherDossiersResponse></S:Body></S:Envelope>
"""
response._content = soap_response
response._content = force_bytes(soap_response)
mocked_post.return_value = response
url = reverse('generic-endpoint', kwargs={'connector': 'iparapheur',
'endpoint': 'files', 'slug': conn.slug})
@ -247,7 +248,7 @@ def test_files(mocked_post, mocked_get, app, conn):
# same call providing parameter
soap_response = """<?xml version='1.0' encoding='UTF-8'?><S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/"><S:Body><RechercherDossiersResponse xmlns="http://www.adullact.org/spring-ws/iparapheur/1.0" xmlns:xmime="http://www.w3.org/2005/05/xmlmime"><LogDossier><timestamp>2015-10-29T15:42:08.732+01:00</timestamp><nom>test</nom><status>Lu</status><annotation></annotation><accessible>KO</accessible></LogDossier></RechercherDossiersResponse></S:Body></S:Envelope>"""
response._content = soap_response
response._content = force_bytes(soap_response)
mocked_post.return_value = response
url += '&status=Lu'
resp = app.get(url)
@ -266,7 +267,7 @@ def test_get_file_status(mocked_post, mocked_get, app, conn):
soap_response = """<?xml version='1.0' encoding='UTF-8'?><S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/"><S:Body><GetHistoDossierResponse xmlns="http://www.adullact.org/spring-ws/iparapheur/1.0" xmlns:xmime="http://www.w3.org/2005/05/xmlmime"><LogDossier><timestamp>2016-04-05T17:57:03.893+02:00</timestamp><nom>webservices gru</nom><status>NonLu</status><annotation>Création de dossier</annotation></LogDossier><LogDossier><timestamp>2016-04-05T17:58:46.716+02:00</timestamp><nom>webservices gru</nom><status>NonLu</status><annotation>super</annotation></LogDossier><LogDossier><timestamp>2016-04-05T17:58:46.727+02:00</timestamp><nom>webservices gru</nom><status>Archive</status><annotation>Circuit terminé, dossier archivable</annotation></LogDossier><MessageRetour><codeRetour>OK</codeRetour><message></message><severite>INFO</severite></MessageRetour></GetHistoDossierResponse></S:Body></S:Envelope>
"""
response._content = soap_response
response._content = force_bytes(soap_response)
mocked_post.return_value = response
url = reverse('generic-endpoint', kwargs={'connector': 'iparapheur',
'endpoint': 'get-file-status', 'slug': conn.slug,
@ -287,7 +288,7 @@ def test_get_file_status(mocked_post, mocked_get, app, conn):
# KO
soap_response = """<?xml version='1.0' encoding='UTF-8'?><S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/"><S:Body><CreerDossierResponse xmlns="http://www.adullact.org/spring-ws/iparapheur/1.0" xmlns:xmime="http://www.w3.org/2005/05/xmlmime"><MessageRetour><codeRetour>KO</codeRetour><message>KOmessage</message><severite>INFO</severite></MessageRetour></CreerDossierResponse></S:Body></S:Envelope>"""
response._content = soap_response
response._content = force_bytes(soap_response)
mocked_post.return_value = response
resp = app.get(url, status=500)
assert resp.json['err'] == 1
@ -296,7 +297,7 @@ def test_get_file_status(mocked_post, mocked_get, app, conn):
# unknown response
soap_response = """<?xml version='1.0' encoding='UTF-8'?><S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/"><S:Body><CreerDossierResponse xmlns="http://www.adullact.org/spring-ws/iparapheur/1.0" xmlns:xmime="http://www.w3.org/2005/05/xmlmime"></CreerDossierResponse></S:Body></S:Envelope>"""
response._content = soap_response
response._content = force_bytes(soap_response)
mocked_post.return_value = response
resp = app.get(url, status=500)
assert resp.json['err'] == 1
@ -322,8 +323,8 @@ def test_get_file(mocked_post, mocked_get, app, conn):
response.status_code = 200
soap_response = open(os.path.join(os.path.dirname(__file__),
'data/iparapheur_get_file_response.xml')).read()
response._content = soap_response
'data/iparapheur_get_file_response.xml'), 'rb').read()
response._content = force_bytes(soap_response)
mocked_post.return_value = response
url = reverse('generic-endpoint', kwargs={'slug': conn.slug,
@ -338,7 +339,7 @@ def test_get_file(mocked_post, mocked_get, app, conn):
# KO
soap_response = """<?xml version='1.0' encoding='UTF-8'?><S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/"><S:Body><GetDossierResponse xmlns="http://www.adullact.org/spring-ws/iparapheur/1.0" xmlns:xmime="http://www.w3.org/2005/05/xmlmime"><MessageRetour><codeRetour>KO</codeRetour><message>KOmessage</message><severite>INFO</severite></MessageRetour></GetDossierResponse></S:Body></S:Envelope>"""
response._content = soap_response
response._content = force_bytes(soap_response)
mocked_post.return_value = response
resp = app.get(url, status=500)
assert resp.json['err'] == 1
@ -347,7 +348,7 @@ def test_get_file(mocked_post, mocked_get, app, conn):
# unknown response
soap_response = """<?xml version='1.0' encoding='UTF-8'?><S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/"><S:Body><GetDossierResponse xmlns="http://www.adullact.org/spring-ws/iparapheur/1.0" xmlns:xmime="http://www.w3.org/2005/05/xmlmime"></GetDossierResponse></S:Body></S:Envelope>"""
response._content = soap_response
response._content = force_bytes(soap_response)
mocked_post.return_value = response
resp = app.get(url, status=500)
assert resp.json['err'] == 1
@ -356,7 +357,7 @@ def test_get_file(mocked_post, mocked_get, app, conn):
# bad response
soap_response = """<nada>"""
response._content = soap_response
response._content = force_bytes(soap_response)
mocked_post.return_value = response
resp = app.get(url)
assert resp.json['err'] == 1
@ -371,7 +372,7 @@ def test_get_file_invalid_appendix(mocked_post, mocked_get, app, conn):
response.status_code = 200
soap_response = open(os.path.join(os.path.dirname(__file__),
'data/iparapheur_get_file_response.xml')).read()
'data/iparapheur_get_file_response.xml'), 'rb').read()
response._content = soap_response
mocked_post.return_value = response
@ -391,7 +392,7 @@ def test_get_file_not_found_appendix(mocked_post, mocked_get, app, conn):
response.status_code = 200
soap_response = open(os.path.join(os.path.dirname(__file__),
'data/iparapheur_get_file_response.xml')).read()
'data/iparapheur_get_file_response.xml'), 'rb').read()
response._content = soap_response
mocked_post.return_value = response
@ -411,7 +412,7 @@ def test_get_file_appendix(mocked_post, mocked_get, app, conn):
response.status_code = 200
soap_response = open(os.path.join(os.path.dirname(__file__),
'data/iparapheur_get_file_response.xml')).read()
'data/iparapheur_get_file_response.xml'), 'rb').read()
response._content = soap_response
mocked_post.return_value = response
@ -433,7 +434,7 @@ def test_invalid_response(mocked_post, mocked_get, app, conn):
response.status_code = 502
soap_response = open(os.path.join(os.path.dirname(__file__),
'data/iparapheur_get_file_response.xml')).read()
'data/iparapheur_get_file_response.xml'), 'rb').read()
response._content = '<p>Bad Gateway</p>'
response.raison = 'Bad Gateway'
mocked_post.return_value = response
@ -465,7 +466,7 @@ def test_webfault_response(mocked_post, mocked_get, app, conn):
</SOAP-ENV:Fault>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>"""
response._content = webfault_response
response._content = force_bytes(webfault_response)
mocked_post.return_value = response
resp = app.get(url)
@ -481,7 +482,7 @@ def test_call_wsdl(mocked_get, app, conn):
'connector': 'iparapheur', 'endpoint': 'wsdl'})
resp = app.get(url)
assert resp.headers['content-type'] == 'text/xml'
assert resp.content == open(wsdl_file()).read()
assert resp.content == open(wsdl_file(), 'rb').read()
@mock.patch('passerelle.utils.Request.get', side_effect=ConnectionError('mocked error'))
def test_call_wsdl_connectionerror(mocked_get, app, conn):
@ -505,10 +506,10 @@ def test_no_auth_on_wsdl_imports(mocked_post, mocked_load, mocked_get, app, conn
"""
response_xmlmime, response_post = Response(), Response()
response_xmlmime.status_code, response_post.status_code = 200, 200
response_xmlmime._content=file(xmlmime()).read()
response_post._content = """<?xml version='1.0' encoding='UTF-8'?><S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/"><S:Body><echoResponse xmlns="http://www.adullact.org/spring-ws/iparapheur/1.0" xmlns:xmime="http://www.w3.org/2005/05/xmlmime">[publik_test] m'a dit: &quot;ping&quot;!</echoResponse></S:Body></S:Envelope>
"""
mocked_load.return_value = open(wsdl_file()).read()
response_xmlmime._content = open(xmlmime(), 'rb').read()
response_post._content = force_bytes("""<?xml version='1.0' encoding='UTF-8'?><S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/"><S:Body><echoResponse xmlns="http://www.adullact.org/spring-ws/iparapheur/1.0" xmlns:xmime="http://www.w3.org/2005/05/xmlmime">[publik_test] m'a dit: &quot;ping&quot;!</echoResponse></S:Body></S:Envelope>
""")
mocked_load.return_value = open(wsdl_file(), 'rb').read()
mocked_get.return_value = response_xmlmime
mocked_post.return_value = response_post
url = reverse('generic-endpoint', kwargs={'connector': 'iparapheur',
@ -530,7 +531,7 @@ def test_types(mocked_post, mocked_get, app, conn):
# empty list of types as response
soap_response = """<?xml version='1.0' encoding='UTF-8'?><S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/"><S:Body><GetListeTypesResponse xmlns="http://www.adullact.org/spring-ws/iparapheur/1.0" xmlns:xmime="http://www.w3.org/2005/05/xmlmime"/></S:Body></S:Envelope>"""
response._content = soap_response
response._content = force_bytes(soap_response)
mocked_post.return_value = response
url = reverse('generic-endpoint', kwargs={'slug': conn.slug, 'connector': 'iparapheur',
'endpoint': 'types'})
@ -558,7 +559,7 @@ def test_subtypes(mocked_post, mocked_get, app, conn):
# providing a type as parameter
soap_response = """<?xml version='1.0' encoding='UTF-8'?><S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/"><S:Body><GetListeTypesResponse xmlns="http://www.adullact.org/spring-ws/iparapheur/1.0" xmlns:xmime="http://www.w3.org/2005/05/xmlmime"/></S:Body></S:Envelope>"""
response._content = soap_response # empty list of subtypes as response
response._content = force_bytes(soap_response) # empty list of subtypes as response
mocked_post.return_value = response
url += '&type=my_unknown_type'
resp = app.get(url)
@ -571,7 +572,7 @@ def test_call_ping_overrinding_endpoint_url(mocked_post, mocked_get, app, conn):
response = Response()
response.status_code = 200
soap_response = 'no importance'
response._content = soap_response
response._content = force_bytes(soap_response)
mocked_post.return_value = response
conn.wsdl_endpoint_location = 'http://www.new.location.com'