grenoble_gru: PEP8ness, code style (#30458)

This commit is contained in:
Benjamin Dauvergne 2019-02-08 06:59:58 +01:00
parent f581c082a8
commit ddffadf025
2 changed files with 111 additions and 40 deletions

View File

@ -42,6 +42,7 @@ RESPONSE_CODES = {
'23': _('Demand already exists')
}
def xml2dict(element):
data = {}
for attr in element.keys():
@ -110,7 +111,8 @@ class GrenobleGRU(BaseResource):
# comments
'obs_demande_urgente': 1 if data.get('urgent_demand') is True else 0,
'obs_type_dysfonctionnement': check_value(data, 'dysfonction_type', self.types('//typeDysfonctionnement', True)),
'obs_type_dysfonctionnement': check_value(
data, 'dysfonction_type', self.types('//typeDysfonctionnement', True)),
'obs_motif': check_value(data, 'intervention_reason', self.types('//motif', True)),
'obs_description_probleme': data.get('comment_description', ''),
}
@ -138,8 +140,14 @@ class GrenobleGRU(BaseResource):
cache.set(cache_key, xml_content, 3600)
if as_list:
return [el.find('identifiant').text for el in root.xpath(path)]
return {'data': [{'id': el.find('identifiant').text, 'text': el.find('libelle').text} for el in root.xpath(path)]}
return {
'data': [
{
'id': el.find('identifiant').text,
'text': el.find('libelle').text
} for el in root.xpath(path)
]
}
@endpoint(name='contact-modes', perm='can_access', description=_('Lists contact modes'))
def contact_modes(self, request, *args, **kwargs):
@ -185,7 +193,7 @@ class GrenobleGRU(BaseResource):
return {'data': 'Demand successfully created'}
@endpoint(name='demand', perm='can_access', methods=['post'], description=_('Add attachment to a demand'),
pattern='(?P<demand_id>[\w-]+)/add-attachment/$',)
pattern=r'(?P<demand_id>[\w-]+)/add-attachment/$',)
def add_attachment_to_demand(self, request, demand_id, **kwargs):
data = json.loads(request.body)
if 'file' not in data:
@ -211,7 +219,7 @@ class GrenobleGRU(BaseResource):
return False
@endpoint(name='demand', perm='can_access', description=_('Get demand'),
pattern='(?P<demand_id>[\w-]+)/$')
pattern=r'(?P<demand_id>[\w-]+)/$')
def get_demand(self, request, demand_id, **kwargs):
payload = {'dem_tiers_id': demand_id}
response = self.request('ws_get_demande.php', payload)

View File

@ -18,6 +18,7 @@
import os
import mock
import pytest
import six
import utils
@ -28,8 +29,10 @@ from passerelle.contrib.grenoble_gru.models import GrenobleGRU
@pytest.fixture
def setup(db):
return utils.setup_access_rights(GrenobleGRU.objects.create(slug='test',
base_url='https://itvvoirie-test.lametro.fr'))
return utils.setup_access_rights(
GrenobleGRU.objects.create(
slug='test',
base_url='https://itvvoirie-test.lametro.fr'))
BASIC_PAYLOAD = {
@ -115,32 +118,46 @@ Création de la demande via le webService de la commune de Grenoble
@pytest.fixture(params=['01', '02', '10', '20', '21', '23', '4242'])
def remote_response(request):
text = unicode(request.param)
text = six.text_type(request.param)
return utils.FakedResponse(index=request.param_index, text=text)
def test_contact_mode_typologies_list_with_invalid_xml(app, setup):
with mock.patch('passerelle.utils.Request.post') as request_post:
response = mock.Mock()
types_filename = os.path.join(os.path.dirname(__file__), 'data', 'grenoble_gru_typologies.xml')
types = file(types_filename).read()
types = open(types_filename).read()
response.content = types.replace('Courrier', 'Courrier & autres')
request_post.return_value = response
endpoint = reverse('generic-endpoint', kwargs={'connector': 'grenoble-gru',
'slug': setup.slug, 'endpoint': 'contact-modes'})
endpoint = reverse(
'generic-endpoint',
kwargs={
'connector': 'grenoble-gru',
'slug': setup.slug,
'endpoint': 'contact-modes'
}
)
response = app.get(endpoint)
request_post.assert_called_once()
assert response.json['err']
assert 'Invalid XML returned:' in response.json['err_desc']
assert response.json['data'] == None
assert response.json['data'] is None
def test_contact_mode_typologies_list(app, setup):
with mock.patch('passerelle.utils.Request.post') as request_post:
response = mock.Mock()
types_filename = os.path.join(os.path.dirname(__file__), 'data', 'grenoble_gru_typologies.xml')
response.content = file(types_filename).read()
response.content = open(types_filename).read()
request_post.return_value = response
endpoint = reverse('generic-endpoint', kwargs={'connector': 'grenoble-gru',
'slug': setup.slug, 'endpoint': 'contact-modes'})
endpoint = reverse(
'generic-endpoint',
kwargs={
'connector': 'grenoble-gru',
'slug': setup.slug,
'endpoint': 'contact-modes'
}
)
response = app.get(endpoint)
request_post.assert_called_once()
assert len(response.json['data']) == 6
@ -156,9 +173,15 @@ def test_contact_mode_typologies_list(app, setup):
def test_demand_creation_return_codes(app, setup, remote_response):
with mock.patch('passerelle.utils.Request.post') as request_post:
request_post.return_value = remote_response
response = app.post_json(reverse('generic-endpoint', kwargs={'connector': 'grenoble-gru',
'slug': setup.slug, 'endpoint': 'create-demand'}),
params=BASIC_PAYLOAD, status=200)
response = app.post_json(
reverse('generic-endpoint',
kwargs={
'connector': 'grenoble-gru',
'slug': setup.slug,
'endpoint': 'create-demand'
}),
params=BASIC_PAYLOAD,
status=200)
index = remote_response.index
if index == 0:
assert response.json['data'] == 'Demand successfully created'
@ -179,12 +202,17 @@ def test_demand_creation_return_codes(app, setup, remote_response):
def test_demand_creation_with_invalid_params(app, setup):
invalid_payload = BASIC_PAYLOAD.copy()
invalid_payload['applicant_status'] = 42
response = app.post_json(reverse('generic-endpoint', kwargs={'connector': 'grenoble-gru',
'slug': setup.slug, 'endpoint': 'create-demand'}),
params=invalid_payload)
response = app.post_json(
reverse('generic-endpoint',
kwargs={
'connector': 'grenoble-gru',
'slug': setup.slug,
'endpoint': 'create-demand'
}),
params=invalid_payload)
assert response.json['err'] == 1
assert 'applicant_status must be one of' in response.json['err_desc']
assert response.json['data'] == None
assert response.json['data'] is None
def test_demand_creation_params(app, setup):
@ -192,9 +220,14 @@ def test_demand_creation_params(app, setup):
payload = BASIC_PAYLOAD.copy()
payload['intervention_free_address'] = u'169, rue du Château'
payload['applicant_free_address'] = u'1, rue de l\'Est'
response = app.post_json(reverse('generic-endpoint', kwargs={'connector': 'grenoble-gru',
'slug': setup.slug, 'endpoint': 'create-demand'}),
params=payload)
app.post_json(
reverse('generic-endpoint',
kwargs={
'connector': 'grenoble-gru',
'slug': setup.slug,
'endpoint': 'create-demand'
}),
params=payload)
assert request_post.call_args[1]['data']['int_adresse_manuelle'] == u'169, rue du Château'
assert request_post.call_args[1]['data']['dem_adresse_manuelle'] == u'1, rue de l\'Est'
assert request_post.call_args[1]['data']['obs_demande_urgente'] == 0
@ -203,9 +236,16 @@ def test_demand_creation_params(app, setup):
payload['applicant_requires_reply'] = True
payload['urgent_demand'] = True
response = app.post_json(reverse('generic-endpoint', kwargs={'connector': 'grenoble-gru',
'slug': setup.slug, 'endpoint': 'create-demand'}),
params=payload, status=200)
app.post_json(
reverse(
'generic-endpoint',
kwargs={
'connector': 'grenoble-gru',
'slug': setup.slug,
'endpoint': 'create-demand'
}),
params=payload,
status=200)
assert request_post.call_args[1]['data']['obs_demande_urgente'] == 1
assert request_post.call_args[1]['data']['dem_reponse'] == 1
@ -215,17 +255,26 @@ def test_add_attachment_to_demand(app, setup):
response = mock.Mock()
response.content = '01'
request_post.return_value = response
endpoint = reverse('generic-endpoint', kwargs={'connector': 'grenoble-gru',
'slug': setup.slug, 'endpoint': 'demand', 'rest': '42-42/add-attachment/'})
endpoint = reverse(
'generic-endpoint',
kwargs={
'connector': 'grenoble-gru',
'slug': setup.slug,
'endpoint': 'demand',
'rest': '42-42/add-attachment/'
})
payload = {'file': 'test.jpg'}
response = app.post_json(endpoint, params=payload, status=200)
assert response.json['data'] == None
assert response.json['data'] is None
assert response.json['err'] == 1
assert response.json['err_desc'] == 'file should be a dict'
file_b64_content = '/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAUDBAQEAwUEBAQFBQUGBwwIBwcHBw8LCwkMEQ8SEhEPERETFh'
payload['file' ] = {'content_type': 'image/jpg', 'filename': 'photo.jpg'}
payload['file'] = {
'content_type': 'image/jpg',
'filename': 'photo.jpg'
}
response = app.post_json(endpoint, params=payload, status=400)
assert response.json['data'] == None
assert response.json['data'] is None
assert response.json['err'] == 1
assert response.json['err_desc'] == 'missing parameters: \'file[content]\'.'
payload['file']['content'] = file_b64_content
@ -233,8 +282,8 @@ def test_add_attachment_to_demand(app, setup):
assert request_post.call_args[1]['data']['dem_tiers_id'] == '42-42'
assert 'filename=photo.jpg' in request_post.call_args[1]['data']['piece_jointe']
assert 'filetype=image%2Fjpg' in request_post.call_args[1]['data']['piece_jointe']
assert 'filecontent=%2F9j%2F4AAQSkZJRgABAQAAAQABAAD%2F2wBDAAUDBAQEAwUEBAQFBQUGBwwIBwcHBw8LCwkMEQ8SEhEPERETFh' in request_post.call_args[1]['data']['piece_jointe']
assert ('filecontent=%2F9j%2F4AAQSkZJRgABAQAAAQABAAD%2F2wBDAAUDBAQEAwUEBAQFBQUGBwwIBwcHBw8LCwkMEQ8SEhEPERETFh'
in request_post.call_args[1]['data']['piece_jointe'])
def test_get_demand(app, setup):
@ -242,8 +291,15 @@ def test_get_demand(app, setup):
response = mock.Mock()
response.content = DEMAND.replace('\n', '')
request_post.return_value = response
response = app.get(reverse('generic-endpoint', kwargs={'connector': 'grenoble-gru',
'slug': setup.slug, 'endpoint': 'demand', 'rest': '42-42/'}))
response = app.get(
reverse('generic-endpoint',
kwargs={
'connector': 'grenoble-gru',
'slug': setup.slug,
'endpoint': 'demand',
'rest': '42-42/'
})
)
assert request_post.call_args[1]['data']['dem_tiers_id'] == '42-42'
demand = response.json['data']
assert 'IdGRU' in demand
@ -257,9 +313,16 @@ def test_get_demand_with_invalid_xml(app, setup):
response = mock.Mock()
response.content = DEMAND.replace('\n', '').replace('de Grenoble', '& Grenoble')
request_post.return_value = response
response = app.get(reverse('generic-endpoint', kwargs={'connector': 'grenoble-gru',
'slug': setup.slug, 'endpoint': 'demand', 'rest': '42-42/'}))
response = app.get(
reverse('generic-endpoint',
kwargs={
'connector': 'grenoble-gru',
'slug': setup.slug,
'endpoint': 'demand',
'rest': '42-42/'
})
)
assert request_post.call_args[1]['data']['dem_tiers_id'] == '42-42'
assert response.json['err']
assert 'Invalid XML returned:' in response.json['err_desc']
assert response.json['data'] == None
assert response.json['data'] is None