toulouse-maelis: revoir les endpoints sur les paniers (#75535) #149

Merged
nroche merged 3 commits from wip/75535-parsifal-basket-multi-regie into main 2023-03-24 10:00:46 +01:00
5 changed files with 250 additions and 89 deletions

View File

@ -145,15 +145,33 @@ SUBSCRIPTION_SCHEMA = {
'unflatten': True, 'unflatten': True,
} }
DELETE_BASKET_LINE_SCHEMA = { BASKET_SCHEMA = {
'type': 'object', 'type': 'object',
'properties': { 'properties': {
'line_id': { 'basket_id': {
'type': 'string', 'type': 'string',
'pattern': '[A-Za-z0-9]+', 'pattern': '^[A-Za-z0-9]+$',
}, },
}, },
'required': [ 'required': [
'basket_id',
],
}
BASKET_LINE_SCHEMA = {
'type': 'object',
'properties': {
'basket_id': {
'type': 'string',
'pattern': '^[A-Za-z0-9]+$',
},
'line_id': {
'type': 'string',
'pattern': '^[A-Za-z0-9]+$',
},
},
'required': [
'basket_id',
'line_id', 'line_id',
], ],
} }

View File

@ -199,12 +199,17 @@ class ToulouseMaelis(BaseResource, HTTPResource):
nurseries = self.call('Ape', 'readNurseryList', request={}) nurseries = self.call('Ape', 'readNurseryList', request={})
self.update_referential('Nursery', nurseries, 'idActivity', 'libelle') self.update_referential('Nursery', nurseries, 'idActivity', 'libelle')
def update_invoice_referentials(self):
data = self.get_referential_data('Invoice', 'Regie')
self.update_referential('Regie', data, 'code', 'libelle')
def daily(self): def daily(self):
try: try:
self.update_family_referentials() self.update_family_referentials()
self.update_site_referentials() self.update_site_referentials()
self.update_activity_referentials() self.update_activity_referentials()
self.update_ape_referentials() self.update_ape_referentials()
self.update_invoice_referentials()
except UpdateError as e: except UpdateError as e:
self.logger.warning('Erreur sur la mise à jour: %s' % e) self.logger.warning('Erreur sur la mise à jour: %s' % e)
@ -565,15 +570,24 @@ class ToulouseMaelis(BaseResource, HTTPResource):
] ]
return data return data
def get_basket_raw(self, family_id): def get_baskets_raw(self, family_id):
return self.call( return (
'Activity', self.call(
'getFamilyBasket', 'Activity',
getFamilyBasketRequestBean={ 'getFamilyBasket',
'numFamily': family_id, getFamilyBasketRequestBean={
}, 'numFamily': family_id,
},
)
or []
) )
def get_basket_raw(self, family_id, basket_id):
for basket in self.get_baskets_raw(family_id):
if basket['id'] == basket_id:
return basket
raise APIError("no '%s' basket on family" % basket_id)
@endpoint( @endpoint(
display_category='Famille', display_category='Famille',
description='Lister les catégories', description='Lister les catégories',
@ -3085,17 +3099,20 @@ class ToulouseMaelis(BaseResource, HTTPResource):
@endpoint( @endpoint(
display_category='Inscriptions', display_category='Inscriptions',
description="Lecture du panier de la famille", description="Obtenir les paniers de la famille",
name='get-basket', name='get-baskets',
perm='can_access', perm='can_access',
parameters={ parameters={
'NameID': {'description': 'Publik NameID'}, 'NameID': {'description': 'Publik NameID'},
'family_id': {'description': 'Numéro de DUI'}, 'family_id': {'description': 'Numéro de DUI'},
}, },
) )
def get_basket(self, request, NameID=None, family_id=None): def get_baskets(self, request, NameID=None, family_id=None):
family_id = family_id or self.get_link(NameID).family_id family_id = family_id or self.get_link(NameID).family_id
return {'data': self.get_basket_raw(family_id)} baskets = self.get_baskets_raw(family_id)
for item in baskets:
item['text'] = self.get_referential_value('Regie', item['codeRegie'])
return {'data': baskets}
@endpoint( @endpoint(
display_category='Inscriptions', display_category='Inscriptions',
@ -3106,15 +3123,13 @@ class ToulouseMaelis(BaseResource, HTTPResource):
'NameID': {'description': 'Publik NameID'}, 'NameID': {'description': 'Publik NameID'},
'family_id': {'description': 'Numéro de DUI'}, 'family_id': {'description': 'Numéro de DUI'},
}, },
methods=['post'], post={'request_body': {'schema': {'application/json': activity_schemas.BASKET_SCHEMA}}},
) )
def update_basket_time(self, request, NameID=None, family_id=None): def update_basket_time(self, request, post_data, NameID=None, family_id=None):
family_id = family_id or self.get_link(NameID).family_id family_id = family_id or self.get_link(NameID).family_id
basket = self.get_basket_raw(family_id) self.get_basket_raw(family_id, post_data['basket_id'])
if not basket or not basket.get('id'):
raise APIError("no basket on '%s' family" % family_id)
self.call('Activity', 'updateBasketTime', idBasket=basket['id']) self.call('Activity', 'updateBasketTime', idBasket=post_data['basket_id'])
return {'data': 'ok'} return {'data': 'ok'}
@endpoint( @endpoint(
@ -3126,25 +3141,22 @@ class ToulouseMaelis(BaseResource, HTTPResource):
'NameID': {'description': 'Publik NameID'}, 'NameID': {'description': 'Publik NameID'},
'family_id': {'description': 'Numéro de DUI'}, 'family_id': {'description': 'Numéro de DUI'},
}, },
post={'request_body': {'schema': {'application/json': activity_schemas.DELETE_BASKET_LINE_SCHEMA}}}, post={'request_body': {'schema': {'application/json': activity_schemas.BASKET_LINE_SCHEMA}}},
) )
def delete_basket_line(self, request, post_data, NameID=None, family_id=None): def delete_basket_line(self, request, post_data, NameID=None, family_id=None):
family_id = family_id or self.get_link(NameID).family_id family_id = family_id or self.get_link(NameID).family_id
basket = self.get_basket_raw(family_id) basket = self.get_basket_raw(family_id, post_data['basket_id'])
line_id = post_data['line_id']
if not basket or not basket.get('id'):
raise APIError("no basket on '%s' family" % family_id)
for line in basket['lignes']: for line in basket['lignes']:
if line['id'] == line_id: if line['id'] == post_data['line_id']:
break break
else: else:
raise APIError("no '%s' basket line on '%s' family" % (line_id, family_id)) raise APIError("no '%s' basket line on basket" % post_data['line_id'])
response = self.call( response = self.call(
'Activity', 'Activity',
'deletePersonUnitBasket', 'deletePersonUnitBasket',
deletePersonUnitBasketRequestBean={ deletePersonUnitBasketRequestBean={
'idBasketLine': line_id, 'idBasketLine': post_data['line_id'],
}, },
) )
return {'data': response} return {'data': response}
@ -3158,19 +3170,17 @@ class ToulouseMaelis(BaseResource, HTTPResource):
'NameID': {'description': 'Publik NameID'}, 'NameID': {'description': 'Publik NameID'},
'family_id': {'description': 'Numéro de DUI'}, 'family_id': {'description': 'Numéro de DUI'},
}, },
methods=['post'], post={'request_body': {'schema': {'application/json': activity_schemas.BASKET_SCHEMA}}},
) )
def delete_basket(self, request, NameID=None, family_id=None): def delete_basket(self, request, post_data, NameID=None, family_id=None):
family_id = family_id or self.get_link(NameID).family_id family_id = family_id or self.get_link(NameID).family_id
basket = self.get_basket_raw(family_id) self.get_basket_raw(family_id, post_data['basket_id'])
if not basket or not basket.get('id'):
raise APIError("no basket on '%s' family" % family_id)
self.call( self.call(
'Activity', 'Activity',
'deleteBasket', 'deleteBasket',
deleteBasketRequestBean={ deleteBasketRequestBean={
'idBasket': basket['id'], 'idBasket': post_data['basket_id'],
'idUtilisat': NameID or 'Middle-office', 'idUtilisat': NameID or 'Middle-office',
}, },
) )
@ -3185,19 +3195,17 @@ class ToulouseMaelis(BaseResource, HTTPResource):
'NameID': {'description': 'Publik NameID'}, 'NameID': {'description': 'Publik NameID'},
'family_id': {'description': 'Numéro de DUI'}, 'family_id': {'description': 'Numéro de DUI'},
}, },
methods=['post'], post={'request_body': {'schema': {'application/json': activity_schemas.BASKET_SCHEMA}}},
) )
def validate_basket(self, request, NameID=None, family_id=None): def validate_basket(self, request, post_data, NameID=None, family_id=None):
family_id = family_id or self.get_link(NameID).family_id family_id = family_id or self.get_link(NameID).family_id
basket = self.get_basket_raw(family_id) self.get_basket_raw(family_id, post_data['basket_id'])
if not basket or not basket.get('id'):
raise APIError("no basket on '%s' family" % family_id)
response = self.call( response = self.call(
'Activity', 'Activity',
'validateBasket', 'validateBasket',
validateBasketRequestBean={ validateBasketRequestBean={
'idBasket': basket['id'], 'idBasket': post_data['basket_id'],
}, },
) )
return {'data': response} return {'data': response}
@ -3331,6 +3339,15 @@ class ToulouseMaelis(BaseResource, HTTPResource):
return {'data': self.call('Ape', 'addApeBook', request=data)} return {'data': self.call('Ape', 'addApeBook', request=data)}
@endpoint(
display_category='Facture',
description="Lister les régies",
name='read-regie-list',
perm='can_access',
)
def read_regie_list(self, request):
return {'data': self.get_referential('Regie')}
class Link(models.Model): class Link(models.Model):
resource = models.ForeignKey(ToulouseMaelis, on_delete=models.CASCADE) resource = models.ForeignKey(ToulouseMaelis, on_delete=models.CASCADE)

View File

@ -3,7 +3,8 @@
<soap:Body> <soap:Body>
<ns2:getFamilyBasketResponse xmlns:ns2="activity.ws.maelis.sigec.com" xmlns:ns3="bean.persistence.activity.ws.maelis.sigec.com" xmlns:ns4="bean.persistence.school.ws.maelis.sigec.com"> <ns2:getFamilyBasketResponse xmlns:ns2="activity.ws.maelis.sigec.com" xmlns:ns3="bean.persistence.activity.ws.maelis.sigec.com" xmlns:ns4="bean.persistence.school.ws.maelis.sigec.com">
<getFamilyBasketResultBean> <getFamilyBasketResultBean>
<basket> <baskets>
<codeRegie>105</codeRegie>
<dateAdd>2023-01-28T23:56:23+01:00</dateAdd> <dateAdd>2023-01-28T23:56:23+01:00</dateAdd>
<dateMaj>2023-01-28T23:56:23+01:00</dateMaj> <dateMaj>2023-01-28T23:56:23+01:00</dateMaj>
<delai>0</delai> <delai>0</delai>
@ -28,6 +29,7 @@
<libLieu>ALEX JANY</libLieu> <libLieu>ALEX JANY</libLieu>
<libUnit>Semaine 1</libUnit> <libUnit>Semaine 1</libUnit>
</inscription> </inscription>
<montant>0.0</montant>
<personneInfo> <personneInfo>
<dateBirth>2014-04-01T00:00:00+02:00</dateBirth> <dateBirth>2014-04-01T00:00:00+02:00</dateBirth>
<firstname>BART</firstname> <firstname>BART</firstname>
@ -35,6 +37,8 @@
<numPerson>246711</numPerson> <numPerson>246711</numPerson>
<sexe>M</sexe> <sexe>M</sexe>
</personneInfo> </personneInfo>
<prixUnit>43.0</prixUnit>
<qte>0.0</qte>
</lignes> </lignes>
<lignes> <lignes>
<dateMaj>2023-01-28T23:50:34+01:00</dateMaj> <dateMaj>2023-01-28T23:50:34+01:00</dateMaj>
@ -55,6 +59,7 @@
<libLieu>Centre Culturel ALBAN MINVILLE</libLieu> <libLieu>Centre Culturel ALBAN MINVILLE</libLieu>
<libUnit>Inscription 2ème semestre</libUnit> <libUnit>Inscription 2ème semestre</libUnit>
</inscription> </inscription>
<montant>0.0</montant>
<personneInfo> <personneInfo>
<dateBirth>2014-04-01T00:00:00+02:00</dateBirth> <dateBirth>2014-04-01T00:00:00+02:00</dateBirth>
<firstname>BART</firstname> <firstname>BART</firstname>
@ -62,6 +67,8 @@
<numPerson>246711</numPerson> <numPerson>246711</numPerson>
<sexe>M</sexe> <sexe>M</sexe>
</personneInfo> </personneInfo>
<prixUnit>43.0</prixUnit>
<qte>0.0</qte>
</lignes> </lignes>
<lignes> <lignes>
<dateMaj>2023-01-26T17:39:40+01:00</dateMaj> <dateMaj>2023-01-26T17:39:40+01:00</dateMaj>
@ -89,8 +96,9 @@
<numPerson>246711</numPerson> <numPerson>246711</numPerson>
<sexe>M</sexe> <sexe>M</sexe>
</personneInfo> </personneInfo>
<prixUnit>43.0</prixUnit>
</lignes> </lignes>
</basket> </baskets>
</getFamilyBasketResultBean> </getFamilyBasketResultBean>
</ns2:getFamilyBasketResponse> </ns2:getFamilyBasketResponse>
</soap:Body> </soap:Body>

View File

@ -0,0 +1,42 @@
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<ns2:readRegieListResponse xmlns:ns2="ws.maelis.sigec.com">
<getRegieList>
<code>102</code>
<libelle>CANTINE / CLAE</libelle>
</getRegieList>
<getRegieList>
<code>106</code>
<libelle>PARCOURS EDUCATIFS</libelle>
</getRegieList>
<getRegieList>
<code>105</code>
<libelle>ENFANCE LOISIRS</libelle>
</getRegieList>
<getRegieList>
<code>109</code>
<libelle>SPORT</libelle>
</getRegieList>
<getRegieList>
<code>108</code>
<libelle>SENIORS</libelle>
</getRegieList>
<getRegieList>
<code>101</code>
<libelle>ACTIONS SOCIO CULTURELLES</libelle>
</getRegieList>
<getRegieList>
<code>103</code>
<libelle>CCAS</libelle>
</getRegieList>
<getRegieList>
<code>104</code>
<libelle>DSCS</libelle>
</getRegieList>
<getRegieList>
<code>107</code>
<libelle>REMBOURSEMENT</libelle>
</getRegieList>
</ns2:readRegieListResponse>
</soap:Body>
</soap:Envelope>

View File

@ -165,6 +165,12 @@ def django_db_setup(django_db_setup, django_db_blocker):
settings=Settings(strict=False, xsd_ignore_sequence_order=True), settings=Settings(strict=False, xsd_ignore_sequence_order=True),
) )
invoice_service = ResponsesSoap(
wsdl_url='https://example.org/InvoiceService?wsdl',
wsdl_content=get_xml_file('InvoiceService.wsdl'),
settings=Settings(strict=False, xsd_ignore_sequence_order=True),
)
with family_service() as soap_mock: with family_service() as soap_mock:
soap_mock.add_soap_response('readCategoryList', get_xml_file('R_read_category_list.xml')) soap_mock.add_soap_response('readCategoryList', get_xml_file('R_read_category_list.xml'))
soap_mock.add_soap_response( soap_mock.add_soap_response(
@ -217,6 +223,10 @@ def django_db_setup(django_db_setup, django_db_blocker):
ape_mock.add_soap_response('readNurseryList', get_xml_file('R_read_nursery_list.xml')) ape_mock.add_soap_response('readNurseryList', get_xml_file('R_read_nursery_list.xml'))
con.update_ape_referentials() con.update_ape_referentials()
with invoice_service() as invoice_mock:
invoice_mock.add_soap_response('readRegieList', get_xml_file('R_read_regie_list.xml'))
con.update_invoice_referentials()
# reset change in zeep private interface to bypass clear_cache fixture # reset change in zeep private interface to bypass clear_cache fixture
from zeep.cache import InMemoryCache from zeep.cache import InMemoryCache
@ -423,6 +433,7 @@ def test_cron(db):
'Quality', 'Quality',
'Quotient', 'Quotient',
'RLIndicator', 'RLIndicator',
'Regie',
'Sex', 'Sex',
'Situation', 'Situation',
'Street', 'Street',
@ -733,6 +744,24 @@ def test_read_quotient_list(con, app):
] ]
def test_read_regie_list(con, app):
url = get_endpoint('read-regie-list')
resp = app.get(url)
assert resp.json['err'] == 0
assert len(resp.json['data']) == 9
assert resp.json['data'] == [
{'id': 101, 'code': 101, 'text': 'ACTIONS SOCIO CULTURELLES', 'libelle': 'ACTIONS SOCIO CULTURELLES'},
{'id': 102, 'code': 102, 'text': 'CANTINE / CLAE', 'libelle': 'CANTINE / CLAE'},
{'id': 103, 'code': 103, 'text': 'CCAS', 'libelle': 'CCAS'},
{'id': 104, 'code': 104, 'text': 'DSCS', 'libelle': 'DSCS'},
{'id': 105, 'code': 105, 'text': 'ENFANCE LOISIRS', 'libelle': 'ENFANCE LOISIRS'},
{'id': 106, 'code': 106, 'text': 'PARCOURS EDUCATIFS', 'libelle': 'PARCOURS EDUCATIFS'},
{'id': 107, 'code': 107, 'text': 'REMBOURSEMENT', 'libelle': 'REMBOURSEMENT'},
{'id': 108, 'code': 108, 'text': 'SENIORS', 'libelle': 'SENIORS'},
{'id': 109, 'code': 109, 'text': 'SPORT', 'libelle': 'SPORT'},
]
def test_read_rl_indicator_list(con, app): def test_read_rl_indicator_list(con, app):
url = get_endpoint('read-rl-indicator-list') url = get_endpoint('read-rl-indicator-list')
resp = app.get(url) resp = app.get(url)
@ -7298,10 +7327,9 @@ def test_update_activity_agenda_date_error(con, app):
assert resp.json['err_desc'] == 'start_date and end_date are in different reference year (2022 != 2023)' assert resp.json['err_desc'] == 'start_date and end_date are in different reference year (2022 != 2023)'
@pytest.mark.xfail(run=False) def test_get_baskets(activity_service, con, app):
def test_get_basket(activity_service, con, app):
activity_service.add_soap_response('getFamilyBasket', get_xml_file('R_get_family_basket.xml')) activity_service.add_soap_response('getFamilyBasket', get_xml_file('R_get_family_basket.xml'))
url = get_endpoint('get-basket') url = get_endpoint('get-baskets')
resp = app.get(url + '?family_id=311352') resp = app.get(url + '?family_id=311352')
assert resp.json['err'] == 0 assert resp.json['err'] == 0
@ -7310,14 +7338,16 @@ def test_get_basket(activity_service, con, app):
resp = app.get(url + '?NameID=local') resp = app.get(url + '?NameID=local')
assert resp.json['err'] == 0 assert resp.json['err'] == 0
data = resp.json['data'] data = resp.json['data']
assert len(data['lignes']) == 3 assert len(data[0]['lignes']) == 3
del data['lignes'][2] del data[0]['lignes'][2]
del data['lignes'][1] del data[0]['lignes'][1]
assert data == { assert data[0] == {
'id': 'S10053200723',
'text': 'ENFANCE LOISIRS',
'codeRegie': 105,
'dateAdd': '2023-01-28T23:56:23+01:00', 'dateAdd': '2023-01-28T23:56:23+01:00',
'dateMaj': '2023-01-28T23:56:23+01:00', 'dateMaj': '2023-01-28T23:56:23+01:00',
'delai': 0, 'delai': 0,
'id': 'S10053200723',
'idFam': 'S10053183425', 'idFam': 'S10053183425',
'lignes': [ 'lignes': [
{ {
@ -7340,7 +7370,7 @@ def test_get_basket(activity_service, con, app):
'libLieu': 'ALEX JANY', 'libLieu': 'ALEX JANY',
'libUnit': 'Semaine 1', 'libUnit': 'Semaine 1',
}, },
'montant': None, 'montant': 0.0,
'personneInfo': { 'personneInfo': {
'dateBirth': '2014-04-01T00:00:00+02:00', 'dateBirth': '2014-04-01T00:00:00+02:00',
'firstname': 'BART', 'firstname': 'BART',
@ -7348,58 +7378,76 @@ def test_get_basket(activity_service, con, app):
'numPerson': 246711, 'numPerson': 246711,
'sexe': 'M', 'sexe': 'M',
}, },
'prixUnit': None, 'prixUnit': 43.0,
'qte': None, 'qte': 0.0,
}, },
], ],
} }
def test_get_basket_not_linked_error(con, app): def test_get_baskets_not_linked_error(con, app):
url = get_endpoint('get-basket') url = get_endpoint('get-baskets')
resp = app.get(url + '?NameID=local') resp = app.get(url + '?NameID=local')
assert resp.json['err'] == 1 assert resp.json['err'] == 1
assert resp.json['err_desc'] == 'User not linked to family' assert resp.json['err_desc'] == 'User not linked to family'
@pytest.mark.xfail(run=False) def test_get_baskets_no_basket(activity_service, con, app):
activity_service.add_soap_response('getFamilyBasket', get_xml_file('R_get_family_basket_empty.xml'))
url = get_endpoint('get-baskets')
resp = app.get(url + '?family_id=311352')
assert resp.json['err'] == 0
assert resp.json['data'] == []
def test_update_basket_time(activity_service, con, app): def test_update_basket_time(activity_service, con, app):
activity_service.add_soap_response('getFamilyBasket', get_xml_file('R_get_family_basket.xml')) activity_service.add_soap_response('getFamilyBasket', get_xml_file('R_get_family_basket.xml'))
activity_service.add_soap_response('updateBasketTime', get_xml_file('R_update_basket_time.xml')) activity_service.add_soap_response('updateBasketTime', get_xml_file('R_update_basket_time.xml'))
url = get_endpoint('update-basket-time') url = get_endpoint('update-basket-time')
params = {'basket_id': 'S10053200723'}
resp = app.post_json(url + '?family_id=311352') resp = app.post_json(url + '?family_id=311352', params=params)
assert resp.json['err'] == 0 assert resp.json['err'] == 0
Link.objects.create(resource=con, family_id='311352', name_id='local') Link.objects.create(resource=con, family_id='311352', name_id='local')
resp = app.post_json(url + '?NameID=local') resp = app.post_json(url + '?NameID=local', params=params)
assert resp.json['err'] == 0 assert resp.json['err'] == 0
assert resp.json['data'] == 'ok' assert resp.json['data'] == 'ok'
def test_update_basket_time_not_linked_error(con, app): def test_update_basket_time_not_linked_error(con, app):
url = get_endpoint('update-basket-time') url = get_endpoint('update-basket-time')
resp = app.post_json(url + '?NameID=local') params = {'basket_id': 'S10053200723'}
resp = app.post_json(url + '?NameID=local', params=params)
assert resp.json['err'] == 1 assert resp.json['err'] == 1
assert resp.json['err_desc'] == 'User not linked to family' assert resp.json['err_desc'] == 'User not linked to family'
def test_update_basket_time_basket_not_found(activity_service, con, app): def test_update_basket_time_no_basket(activity_service, con, app):
activity_service.add_soap_response('getFamilyBasket', get_xml_file('R_get_family_basket_empty.xml')) activity_service.add_soap_response('getFamilyBasket', get_xml_file('R_get_family_basket_empty.xml'))
url = get_endpoint('update-basket-time') url = get_endpoint('update-basket-time')
resp = app.post_json(url + '?family_id=311352') params = {'basket_id': 'S10053200723'}
resp = app.post_json(url + '?family_id=311352', params=params)
assert resp.json['err'] == 1 assert resp.json['err'] == 1
assert resp.json['err_desc'] == "no basket on '311352' family" assert resp.json['err_desc'] == "no 'S10053200723' basket on family"
def test_update_basket_time_basket_not_found(activity_service, con, app):
activity_service.add_soap_response('getFamilyBasket', get_xml_file('R_get_family_basket.xml'))
url = get_endpoint('update-basket-time')
params = {'basket_id': 'plop'}
resp = app.post_json(url + '?family_id=311352', params=params)
assert resp.json['err'] == 1
assert resp.json['err_desc'] == "no 'plop' basket on family"
@pytest.mark.xfail(run=False)
def test_delete_basket_line(activity_service, con, app): def test_delete_basket_line(activity_service, con, app):
activity_service.add_soap_response('getFamilyBasket', get_xml_file('R_get_family_basket.xml')) activity_service.add_soap_response('getFamilyBasket', get_xml_file('R_get_family_basket.xml'))
activity_service.add_soap_response( activity_service.add_soap_response(
'deletePersonUnitBasket', get_xml_file('R_delete_person_unit_basket.xml') 'deletePersonUnitBasket', get_xml_file('R_delete_person_unit_basket.xml')
) )
url = get_endpoint('delete-basket-line') url = get_endpoint('delete-basket-line')
params = {'line_id': 'S10053203120'} params = {'basket_id': 'S10053200723', 'line_id': 'S10053203120'}
resp = app.post_json(url + '?family_id=311352', params=params) resp = app.post_json(url + '?family_id=311352', params=params)
assert resp.json['err'] == 0 assert resp.json['err'] == 0
@ -7407,39 +7455,45 @@ def test_delete_basket_line(activity_service, con, app):
resp = app.post_json(url + '?NameID=local', params=params) resp = app.post_json(url + '?NameID=local', params=params)
assert resp.json['err'] == 0 assert resp.json['err'] == 0
assert len(resp.json['data']['lignes']) == 2 assert len(resp.json['data']['lignes']) == 2 # return the basket
assert 'S10053203120' not in [x['id'] for x in resp.json['data']['lignes']] assert 'S10053203120' not in [x['id'] for x in resp.json['data']['lignes']]
def test_delete_basket_line_not_linked_error(con, app): def test_delete_basket_line_not_linked_error(con, app):
url = get_endpoint('delete-basket-line') url = get_endpoint('delete-basket-line')
params = {'line_id': 'S10053203120'} params = {'basket_id': 'S10053200723', 'line_id': 'S10053203120'}
resp = app.post_json(url + '?NameID=local', params=params) resp = app.post_json(url + '?NameID=local', params=params)
assert resp.json['err'] == 1 assert resp.json['err'] == 1
assert resp.json['err_desc'] == 'User not linked to family' assert resp.json['err_desc'] == 'User not linked to family'
@pytest.mark.xfail(run=False) def test_delete_basket_line_no_basket(activity_service, con, app):
def test_delete_basket_line_basket_not_found(activity_service, con, app):
activity_service.add_soap_response('getFamilyBasket', get_xml_file('R_get_family_basket_empty.xml')) activity_service.add_soap_response('getFamilyBasket', get_xml_file('R_get_family_basket_empty.xml'))
url = get_endpoint('delete-basket-line') url = get_endpoint('delete-basket-line')
params = {'line_id': 'S10053203120'} params = {'basket_id': 'S10053200723', 'line_id': 'S10053203120'}
resp = app.post_json(url + '?family_id=311352', params=params) resp = app.post_json(url + '?family_id=311352', params=params)
assert resp.json['err'] == 1 assert resp.json['err'] == 1
assert resp.json['err_desc'] == "no basket on '311352' family" assert resp.json['err_desc'] == "no 'S10053200723' basket on family"
def test_delete_basket_line_basket_not_found(activity_service, con, app):
activity_service.add_soap_response('getFamilyBasket', get_xml_file('R_get_family_basket.xml'))
url = get_endpoint('delete-basket-line')
params = {'basket_id': 'plop', 'line_id': 'S10053203120'}
resp = app.post_json(url + '?family_id=311352', params=params)
assert resp.json['err'] == 1
assert resp.json['err_desc'] == "no 'plop' basket on family"
@pytest.mark.xfail(run=False)
def test_delete_basket_line_line_not_found(activity_service, con, app): def test_delete_basket_line_line_not_found(activity_service, con, app):
activity_service.add_soap_response('getFamilyBasket', get_xml_file('R_get_family_basket.xml')) activity_service.add_soap_response('getFamilyBasket', get_xml_file('R_get_family_basket.xml'))
url = get_endpoint('delete-basket-line') url = get_endpoint('delete-basket-line')
params = {'line_id': 'plop'} params = {'basket_id': 'S10053200723', 'line_id': 'plop'}
resp = app.post_json(url + '?family_id=311352', params=params) resp = app.post_json(url + '?family_id=311352', params=params)
assert resp.json['err'] == 1 assert resp.json['err'] == 1
assert resp.json['err_desc'] == "no 'plop' basket line on '311352' family" assert resp.json['err_desc'] == "no 'plop' basket line on basket"
@pytest.mark.xfail(run=False)
def test_delete_basket(activity_service, con, app): def test_delete_basket(activity_service, con, app):
def request_check(request): def request_check(request):
assert request.idUtilisat in ('local', 'Middle-office') assert request.idUtilisat in ('local', 'Middle-office')
@ -7451,64 +7505,86 @@ def test_delete_basket(activity_service, con, app):
request_check=request_check, request_check=request_check,
) )
url = get_endpoint('delete-basket') url = get_endpoint('delete-basket')
params = {'basket_id': 'S10053200723'}
resp = app.post_json(url + '?family_id=311352') resp = app.post_json(url + '?family_id=311352', params=params)
assert resp.json['err'] == 0 assert resp.json['err'] == 0
Link.objects.create(resource=con, family_id='311352', name_id='local') Link.objects.create(resource=con, family_id='311352', name_id='local')
resp = app.post_json(url + '?NameID=local') resp = app.post_json(url + '?NameID=local', params=params)
assert resp.json['err'] == 0 assert resp.json['err'] == 0
assert resp.json['data'] == 'ok' assert resp.json['data'] == 'ok'
def test_delete_basket_not_linked_error(con, app): def test_delete_basket_not_linked_error(con, app):
url = get_endpoint('delete-basket') url = get_endpoint('delete-basket')
resp = app.post_json(url + '?NameID=local') params = {'basket_id': 'S10053200723'}
resp = app.post_json(url + '?NameID=local', params=params)
assert resp.json['err'] == 1 assert resp.json['err'] == 1
assert resp.json['err_desc'] == 'User not linked to family' assert resp.json['err_desc'] == 'User not linked to family'
def test_delete_basket_not_found(activity_service, con, app): def test_delete_basket_no_basket(activity_service, con, app):
activity_service.add_soap_response('getFamilyBasket', get_xml_file('R_get_family_basket_empty.xml')) activity_service.add_soap_response('getFamilyBasket', get_xml_file('R_get_family_basket_empty.xml'))
url = get_endpoint('delete-basket') url = get_endpoint('delete-basket')
resp = app.post_json(url + '?family_id=311352') params = {'basket_id': 'S10053200723'}
resp = app.post_json(url + '?family_id=311352', params=params)
assert resp.json['err'] == 1 assert resp.json['err'] == 1
assert resp.json['err_desc'] == "no basket on '311352' family" assert resp.json['err_desc'] == "no 'S10053200723' basket on family"
def test_delete_basket_not_found(activity_service, con, app):
activity_service.add_soap_response('getFamilyBasket', get_xml_file('R_get_family_basket.xml'))
url = get_endpoint('delete-basket')
params = {'basket_id': 'plop'}
resp = app.post_json(url + '?family_id=311352', params=params)
assert resp.json['err'] == 1
assert resp.json['err_desc'] == "no 'plop' basket on family"
@pytest.mark.xfail(run=False)
def test_validate_basket(activity_service, con, app): def test_validate_basket(activity_service, con, app):
activity_service.add_soap_response('getFamilyBasket', get_xml_file('R_get_family_basket.xml')) activity_service.add_soap_response('getFamilyBasket', get_xml_file('R_get_family_basket.xml'))
activity_service.add_soap_response('validateBasket', get_xml_file('R_validate_basket.xml')) activity_service.add_soap_response('validateBasket', get_xml_file('R_validate_basket.xml'))
url = get_endpoint('validate-basket') url = get_endpoint('validate-basket')
params = {'basket_id': 'S10053200723'}
resp = app.post_json(url + '?family_id=311352') resp = app.post_json(url + '?family_id=311352', params=params)
assert resp.json['err'] == 0 assert resp.json['err'] == 0
Link.objects.create(resource=con, family_id='311352', name_id='local') Link.objects.create(resource=con, family_id='311352', name_id='local')
resp = app.post_json(url + '?NameID=local') resp = app.post_json(url + '?NameID=local', params=params)
assert resp.json['err'] == 0 assert resp.json['err'] == 0
assert resp.json['data'] == { assert resp.json['data'] == {
'idFam': 'S10053183425', 'idFam': 'S10053183425',
'idFactureLst': [], 'factureLst': [],
'idInsLst': ['S10053203103', 'S10053200721'], 'idInsLst': ['S10053203103', 'S10053200721'],
'paramUrlReglement': [],
} }
def test_validate_basket_not_linked_error(con, app): def test_validate_basket_not_linked_error(con, app):
url = get_endpoint('validate-basket') url = get_endpoint('validate-basket')
resp = app.post_json(url + '?NameID=local') params = {'basket_id': 'S10053200723'}
resp = app.post_json(url + '?NameID=local', params=params)
assert resp.json['err'] == 1 assert resp.json['err'] == 1
assert resp.json['err_desc'] == 'User not linked to family' assert resp.json['err_desc'] == 'User not linked to family'
def test_validate_basket_not_found(activity_service, con, app): def test_validate_basket_no_basket(activity_service, con, app):
activity_service.add_soap_response('getFamilyBasket', get_xml_file('R_get_family_basket_empty.xml')) activity_service.add_soap_response('getFamilyBasket', get_xml_file('R_get_family_basket_empty.xml'))
url = get_endpoint('validate-basket') url = get_endpoint('validate-basket')
resp = app.post_json(url + '?family_id=311352') params = {'basket_id': 'S10053200723'}
resp = app.post_json(url + '?family_id=311352', params=params)
assert resp.json['err'] == 1 assert resp.json['err'] == 1
assert resp.json['err_desc'] == "no basket on '311352' family" assert resp.json['err_desc'] == "no 'S10053200723' basket on family"
def test_validate_basket_not_found(activity_service, con, app):
activity_service.add_soap_response('getFamilyBasket', get_xml_file('R_get_family_basket.xml'))
url = get_endpoint('validate-basket')
params = {'basket_id': 'plop'}
resp = app.post_json(url + '?family_id=311352', params=params)
assert resp.json['err'] == 1
assert resp.json['err_desc'] == "no 'plop' basket on family"
def test_read_nursery_list(con, app): def test_read_nursery_list(con, app):