toulouse_axel: get update management dates (#39001)

This commit is contained in:
Lauréline Guérin 2020-01-16 10:33:39 +01:00
parent d3c5766d14
commit 3db9ac410f
No known key found for this signature in database
GPG Key ID: 1FAB9B9B4F93D473
4 changed files with 115 additions and 14 deletions

View File

@ -3,6 +3,15 @@ import requests
def test_link(conn, user):
print("Get update management dates")
url = conn + '/update_management_dates'
resp = requests.get(url)
resp.raise_for_status()
res = resp.json()
assert res['err'] == 0
pprint.pprint(res)
print('\n')
name_id = user['name_id']
url = conn + '/link?NameID=%s' % name_id
payload = {

View File

@ -172,7 +172,10 @@ class AxelError(Exception):
def xml_schema_converter(name, root_element):
return AxelSchema(os.path.join(BASE_XSD_PATH, name), root_element)
xsd_path = os.path.join(BASE_XSD_PATH, name)
if not os.path.exists(xsd_path):
return None
return AxelSchema(xsd_path, root_element)
OperationResult = namedtuple('OperationResult', ['json_response', 'xml_request', 'xml_response'])
@ -196,21 +199,23 @@ class Operation(object):
schema['merge_extra'] = True
return schema
def __call__(self, resource, request_data):
def __call__(self, resource, request_data=None):
client = resource.soap_client()
try:
serialized_request = self.request_converter.encode(request_data)
except xmlschema.XMLSchemaValidationError as e:
raise AxelError('invalid request %s' % str(e))
indent(serialized_request)
serialized_request = ET.tostring(serialized_request)
try:
self.request_converter.xml_schema.validate(serialized_request)
except xmlschema.XMLSchemaValidationError as e:
raise AxelError(
'invalid request %s' % str(e),
xml_request=serialized_request)
serialized_request = ''
if self.request_converter:
try:
serialized_request = self.request_converter.encode(request_data)
except xmlschema.XMLSchemaValidationError as e:
raise AxelError('invalid request %s' % str(e))
indent(serialized_request)
serialized_request = ET.tostring(serialized_request)
try:
self.request_converter.xml_schema.validate(serialized_request)
except xmlschema.XMLSchemaValidationError as e:
raise AxelError(
'invalid request %s' % str(e),
xml_request=serialized_request)
result = client.service.getData(
self.operation,
@ -240,6 +245,7 @@ class Operation(object):
xml_response=pretty_result)
ref_date_gestion_dui = Operation('RefDateGestionDui')
ref_verif_dui = Operation('RefVerifDui')
ref_famille_dui = Operation('RefFamilleDui')
form_maj_famille_dui = Operation('FormMajFamilleDui')
@ -402,6 +408,20 @@ class ToulouseAxel(BaseResource):
except Lock.DoesNotExist:
return {'key': key, 'locked': False}
@endpoint(
description=_("Get dates of the update management"),
perm='can_access')
def management_dates(self, request):
try:
result = ref_date_gestion_dui(self)
except AxelError as e:
raise APIError(
'Axel error: %s' % e,
err_code='error',
data={'xml_request': e.xml_request,
'xml_response': e.xml_response})
return {'data': result.json_response['DATA']['PORTAIL']['DUIDATEGESTION']}
@endpoint(
description=_('Create link between user and Toulouse Axel'),
perm='can_access',

View File

@ -0,0 +1,38 @@
<?xml version="1.0" encoding="utf-8" ?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:all="urn:AllAxelTypes">
<xsd:import schemaLocation="../AllAxelTypes.xsd" namespace="urn:AllAxelTypes" />
<xsd:redefine schemaLocation="../R_ShemaResultat.xsd">
<xsd:simpleType name="TYPEType">
<xsd:restriction base="TYPEType">
<xsd:enumeration value="RefDateGestionDui" />
</xsd:restriction>
</xsd:simpleType>
<xsd:complexType name="PORTAILType">
<xsd:complexContent>
<xsd:extension base="PORTAILType">
<xsd:sequence>
<xsd:element ref="DUIDATEGESTION" minOccurs="0"/>
</xsd:sequence>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
</xsd:redefine>
<xsd:complexType name="DUIDATEGESTIONType">
<xsd:sequence>
<xsd:element ref="REPORT-REVENUS" />
<xsd:element ref="EXTRACTION-FAMILLES" />
<xsd:element ref="EXTRACTION-CAFPRO" />
</xsd:sequence>
</xsd:complexType>
<xsd:element name="REPORT-REVENUS" type="all:DATEType"/>
<xsd:element name="EXTRACTION-FAMILLES" type="all:DATEType"/>
<xsd:element name="EXTRACTION-CAFPRO" type="all:DATEType"/>
<xsd:element name="DUIDATEGESTION" type="DUIDATEGESTIONType" />
</xsd:schema>

View File

@ -32,6 +32,7 @@ from passerelle.contrib.toulouse_axel.models import (
OperationResult,
ToulouseAxel,
form_maj_famille_dui,
ref_date_gestion_dui,
ref_famille_dui,
ref_facture_a_payer,
ref_facture_pdf,
@ -238,6 +239,15 @@ def mock_getdata(content, operation):
yield
@pytest.mark.parametrize('content', [
'<PORTAIL><DUIDATEGESTION/></PORTAIL>',
])
def test_operation_ref_date_gestion_dui(resource, content):
with mock_getdata(content, 'RefDateGestionDui'):
with pytest.raises(AxelError):
ref_date_gestion_dui(resource)
@pytest.mark.parametrize('content', [
'<PORTAIL><DUI/></PORTAIL>',
'<PORTAIL><DUI><CODE>foo</CODE></DUI></PORTAIL>',
@ -317,6 +327,30 @@ def test_operation_ref_facture_pdf(resource, content):
})
def test_management_dates_endpoint_axel_error(app, resource):
with mock.patch('passerelle.contrib.toulouse_axel.models.ref_date_gestion_dui') as operation:
operation.side_effect = AxelError('FooBar')
resp = app.get('/toulouse-axel/test/management_dates')
assert resp.json['err_desc'] == "Axel error: FooBar"
assert resp.json['err'] == 'error'
assert resp.json['data'] == {'xml_request': None, 'xml_response': None}
def test_management_dates_endpoint(app, resource):
content = '''<PORTAIL>
<DUIDATEGESTION>
<REPORT-REVENUS>08/08/2019</REPORT-REVENUS>
<EXTRACTION-FAMILLES>18/10/2019</EXTRACTION-FAMILLES>
<EXTRACTION-CAFPRO>18/01/2020</EXTRACTION-CAFPRO>
</DUIDATEGESTION>
</PORTAIL>'''
with mock_getdata(content, 'RefDateGestionDui'):
resp = app.get('/toulouse-axel/test/management_dates')
assert set(resp.json.keys()) == set(['err', 'data'])
assert resp.json['err'] == 0
assert set(resp.json['data'].keys()) == set(['REPORT-REVENUS', 'EXTRACTION-FAMILLES', 'EXTRACTION-CAFPRO'])
def test_link_endpoint_nameid_empty(app, resource, link_params):
resp = app.post_json('/toulouse-axel/test/link?NameID=', params=link_params, status=400)
assert resp.json['err_desc'] == "NameID is empty"