passerelle/tests/test_iws.py

336 lines
12 KiB
Python

from django.contrib.contenttypes.models import ContentType
from mock import Mock
import pytest
from passerelle.base.models import ApiUser, AccessRight
from passerelle.contrib.iws.models import IWSConnector
@pytest.fixture()
def setup(db):
api = ApiUser.objects.create(username='all', keytype='', key='')
conn = IWSConnector.objects.create(
wsdl_url='http://example.com/iws?wsdl',
operation_endpoint='http://example.com/iws', username='admin', password='admin',
database='somedb', slug='slug-iws')
obj_type = ContentType.objects.get_for_model(conn)
AccessRight.objects.create(
codename='can_access', apiuser=api, resource_type=obj_type, resource_pk=conn.pk)
return conn
def create_params(**kwargs):
res = {
"firstname": "John", "lastname": "Doe", "description": "four : 1",
"date": "28/10/2018", "token": "token", "email_notif": True
}
res.update(kwargs)
return res
def mock_soap_call(monkeypatch, return_value):
mock_soap_call = Mock(return_value=return_value)
import passerelle.contrib.iws.models
monkeypatch.setattr(passerelle.contrib.iws.models.IWSConnector, '_soap_call', mock_soap_call)
return mock_soap_call
def test_checkdate_dechet_or_encombrant(app, setup, endpoint_dummy_cache):
response = app.get(
'/iws/slug-iws/checkdate/3155570464130003/error/3/?city=toulouse'
'&session_id=7a896f464ede7b4e', expect_errors=True)
json_result = response.json_body
assert json_result['err'] == 1
assert u'DECHET' in json_result['err_desc']
assert u'ENCOMBRANT' in json_result['err_desc']
def test_checkdate_sti_code_optionnal_last_char(app, setup, endpoint_dummy_cache, monkeypatch):
mock_soap_call(
monkeypatch, {
'status': 'responseOk', 'trace': '',
'fields': {
'NO_APPEL': 'sometoken',
'I_APP_DATESPOSSIBLES': 'Aucune dates disponibles'
}
})
response = app.get(
'/iws/slug-iws/checkdate/3155570464130003B/DECHET/3/?city=toulouse'
'&session_id=7a896f464ede7b4e')
json_result = response.json_body
assert json_result['err'] == 0
def test_checkdate_iws_error_status(app, setup, monkeypatch, endpoint_dummy_cache):
mock_soap_call(monkeypatch, {'status': 'KO', 'trace': 'some trace'})
response = app.get(
'/iws/slug-iws/checkdate/3155570464130003/DECHET/3/?city=toulouse'
'&session_id=7a896f464ede7b4e', expect_errors=True)
json_result = response.json_body
assert json_result['err'] == 1
assert json_result['err_desc'] == 'iws error, status: "KO", trace: "some trace"'
def test_checkdate_iws_error_no_appel(app, setup, monkeypatch, endpoint_dummy_cache):
mock_soap_call(
monkeypatch, {
'status': 'responseOk', 'trace': '',
'fields': {'NO_APPEL': ''}})
response = app.get(
'/iws/slug-iws/checkdate/3155570464130003/DECHET/3/?city=toulouse'
'&session_id=7a896f464ede7b4e', expect_errors=True)
json_result = response.json_body
assert json_result['err'] == 1
assert json_result['err_desc'] == 'iws error, missing token'
def test_checkdate_iws_no_dates(app, setup, monkeypatch, endpoint_dummy_cache):
mock_soap_call(
monkeypatch, {
'status': 'responseOk', 'trace': '',
'fields': {
'NO_APPEL': 'sometoken',
'I_APP_DATESPOSSIBLES': 'Aucune dates disponibles'
}
})
response = app.get('/iws/slug-iws/checkdate/3155570464130003/DECHET/3/?city=toulouse'
'&session_id=7a896f464ede7b4e')
json_result = response.json_body
assert json_result['err'] == 0
assert json_result['data'] == []
def test_checkdate_iws_has_dates(app, setup, monkeypatch, settings, endpoint_dummy_cache):
settings.LANGUAGE_CODE = 'fr-fr'
soap_call = mock_soap_call(
monkeypatch, {
'status': 'responseOk', 'trace': '',
'fields': {
'NO_APPEL': 'sometoken',
'I_APP_DATESPOSSIBLES': '18/06/2018; 19/06/2018'
}
})
response = app.get('/iws/slug-iws/checkdate/3155570464130003/DECHET/3/?city=toulouse'
'&session_id=7a896f464ede7b4e')
json_result = response.json_body
assert json_result['err'] == 0
dates = json_result['data']
assert len(dates) == 2
assert dates[0] == {"id": "18/06/2018", "text": "lundi 18 juin 2018", "token": "sometoken"}
assert dates[1] == {"id": "19/06/2018", "text": "mardi 19 juin 2018", "token": "sometoken"}
soap_args = soap_call.call_args[0][0]
assert soap_args['C_STAPPEL'] == 'B'
def test_checkdate_dechet(app, setup, monkeypatch, endpoint_dummy_cache):
soap_call = mock_soap_call(
monkeypatch, {
'status': 'responseOk', 'trace': '',
'fields': {
'NO_APPEL': 'sometoken',
'I_APP_DATESPOSSIBLES': '18/06/2018; 19/06/2018'
}
})
app.get('/iws/slug-iws/checkdate/3155570464130003/DECHET/3/?city=toulouse'
'&session_id=7a896f464ede7b4e')
soap_args = soap_call.call_args[0][0]
assert soap_args['C_EQUIPE'] == 'VPVIGIE'
assert soap_args['I_AG_TYPEAGENDA'] == 'DECHETS VERTS'
assert soap_args['I_APP_TYPEDEM'] == 'DECHET'
assert soap_args['C_TYPEPB'] == '8006'
def test_checkdate_dechet_syndic(app, setup, monkeypatch, endpoint_dummy_cache):
soap_call = mock_soap_call(
monkeypatch, {
'status': 'responseOk', 'trace': '',
'fields': {
'NO_APPEL': 'sometoken',
'I_APP_DATESPOSSIBLES': '18/06/2018; 19/06/2018'
}
})
app.get('/iws/slug-iws/checkdate/3155570464130003/DECHET/3/?city=toulouse'
'&session_id=7a896f464ede7b4e&syndic=true')
soap_args = soap_call.call_args[0][0]
assert soap_args['C_EQUIPE'] == 'VPVIGIE'
assert soap_args['I_AG_TYPEAGENDA'] == 'DECHETS VERTS'
assert soap_args['I_APP_TYPEDEM'] == 'DECHETSYNDIC'
assert soap_args['C_TYPEPB'] == '8007'
def test_checkdate_encombrant(app, setup, monkeypatch, endpoint_dummy_cache):
soap_call = mock_soap_call(
monkeypatch, {
'status': 'responseOk', 'trace': '',
'fields': {
'NO_APPEL': 'sometoken',
'I_APP_DATESPOSSIBLES': '18/06/2018; 19/06/2018'
}
})
app.get('/iws/slug-iws/checkdate/3155570464130003/ENCOMBRANT/3/?city=toulouse'
'&session_id=7a896f464ede7b4e')
soap_args = soap_call.call_args[0][0]
assert soap_args['C_EQUIPE'] == 'VPVIGIE'
assert soap_args['I_AG_TYPEAGENDA'] == 'ENCOMBRANTS'
assert soap_args['I_APP_TYPEDEM'] == 'ENCOMBRANT'
assert soap_args['C_TYPEPB'] == '8008'
soap_call.reset()
app.get('/iws/slug-iws/checkdate/3155570464130003/ENCOMBRANT/3/?city=toulouse'
'&session_id=7a896f464ede7b4e&syndic=false')
soap_args = soap_call.call_args[0][0]
assert soap_args['C_EQUIPE'] == 'VPVIGIE'
assert soap_args['I_AG_TYPEAGENDA'] == 'ENCOMBRANTS'
assert soap_args['I_APP_TYPEDEM'] == 'ENCOMBRANT'
assert soap_args['C_TYPEPB'] == '8008'
# check invalid parameter
resp = app.get('/iws/slug-iws/checkdate/3155570464130003/ENCOMBRANT/3/?city=toulouse'
'&session_id=7a896f464ede7b4e&syndic=whatever', status=400)
assert resp.json.get('err') == 1
assert resp.json.get('err_desc') == 'invalid value for parameter "syndic"'
def test_checkdate_encombrant_syndic(app, setup, monkeypatch, endpoint_dummy_cache):
soap_call = mock_soap_call(
monkeypatch, {
'status': 'responseOk', 'trace': '',
'fields': {
'NO_APPEL': 'sometoken',
'I_APP_DATESPOSSIBLES': '18/06/2018; 19/06/2018'
}
})
app.get('/iws/slug-iws/checkdate/3155570464130003/ENCOMBRANT/3/?city=toulouse'
'&session_id=7a896f464ede7b4e&syndic=true')
soap_args = soap_call.call_args[0][0]
assert soap_args['C_EQUIPE'] == 'VPVIGIE'
assert soap_args['I_AG_TYPEAGENDA'] == 'ENCOMBRANTS'
assert soap_args['I_APP_TYPEDEM'] == 'ENCOMBRANTSYNDIC'
assert soap_args['C_TYPEPB'] == '8009'
def test_bookdate(app, setup, monkeypatch):
soap_call = mock_soap_call(
monkeypatch, {
'status': 'responseOk', 'trace': '',
'fields': {
'NO_APPEL': 'sometoken',
'I_APP_DATESPOSSIBLES': '18/06/2018;'
}
})
response = app.post_json('/iws/slug-iws/bookdate/', params=create_params())
soap_args = soap_call.call_args[0][0]
assert soap_args['I_AP_SERVICE'] == 'OFFICE'
assert soap_args['C_ORIGINE'] == 'TELESERVICE'
assert soap_args['I_AP_SOURCE'] == 'USAGER'
assert soap_args['C_STAPPEL'] == 'E'
json_result = response.json_body
assert json_result['err'] == 0
assert json_result['data'] == {'NO_APPEL': 'sometoken', 'I_APP_DATESPOSSIBLES': '18/06/2018;'}
def test_bookdate_no_mail(app, setup, monkeypatch):
soap_call = mock_soap_call(
monkeypatch, {
'status': 'responseOk', 'trace': '',
'fields': {
'NO_APPEL': 'sometoken',
'I_APP_DATESPOSSIBLES': '18/06/2018;'
}
})
response = app.post_json('/iws/slug-iws/bookdate/', params=create_params())
soap_args = soap_call.call_args[0][0]
assert not soap_args['I_AP_ADRESSEMAIL']
json_result = response.json_body
assert json_result['err'] == 0
def test_bookdate_mail(app, setup, monkeypatch):
soap_call = mock_soap_call(
monkeypatch, {
'status': 'responseOk', 'trace': '',
'fields': {
'NO_APPEL': 'sometoken',
'I_APP_DATESPOSSIBLES': '18/06/2018;'
}
})
params = create_params()
params['email'] = 'john.doe@localhost'
response = app.post_json('/iws/slug-iws/bookdate/', params=params)
soap_args = soap_call.call_args[0][0]
assert soap_args['I_AP_ADRESSEMAIL'] == 'john.doe@localhost'
json_result = response.json_body
assert json_result['err'] == 0
def test_bookdate_mail_notif(app, setup, monkeypatch):
soap_call = mock_soap_call(
monkeypatch, {
'status': 'responseOk', 'trace': '',
'fields': {
'NO_APPEL': 'sometoken',
'I_APP_DATESPOSSIBLES': '18/06/2018;'
}
})
params = create_params()
params['email_notif'] = True
response = app.post_json('/iws/slug-iws/bookdate/', params=params)
soap_args = soap_call.call_args[0][0]
assert soap_args['I_AP_EMAIL'] == 'OUI'
json_result = response.json_body
assert json_result['err'] == 0
def test_bookdate_mail_no_notif(app, setup, monkeypatch):
soap_call = mock_soap_call(
monkeypatch, {
'status': 'responseOk', 'trace': '',
'fields': {
'NO_APPEL': 'sometoken',
'I_APP_DATESPOSSIBLES': '18/06/2018;'
}
})
params = create_params()
params['email_notif'] = False
response = app.post_json('/iws/slug-iws/bookdate/', params=params)
soap_args = soap_call.call_args[0][0]
assert soap_args['I_AP_EMAIL'] == 'NON'
json_result = response.json_body
assert json_result['err'] == 0
def test_bookdate_no_tel(app, setup, monkeypatch):
soap_call = mock_soap_call(
monkeypatch, {
'status': 'responseOk', 'trace': '',
'fields': {
'NO_APPEL': 'sometoken',
'I_APP_DATESPOSSIBLES': '18/06/2018;'
}
})
response = app.post_json('/iws/slug-iws/bookdate/', params=create_params())
soap_args = soap_call.call_args[0][0]
assert not soap_args['I_AP_TEL_DEMANDEU']
assert soap_args['I_AP_SMS'] == 'NON'
json_result = response.json_body
assert json_result['err'] == 0
def test_bookdate_tel_motif(app, setup, monkeypatch):
soap_call = mock_soap_call(
monkeypatch, {
'status': 'responseOk', 'trace': '',
'fields': {
'NO_APPEL': 'sometoken',
'I_APP_DATESPOSSIBLES': '18/06/2018;'
}
})
params = create_params()
params['tel_number'] = "0101010101"
response = app.post_json('/iws/slug-iws/bookdate/', params=params)
soap_args = soap_call.call_args[0][0]
assert soap_args['I_AP_TEL_DEMANDEU'] == '0101010101'
assert soap_args['I_AP_SMS'] == 'NON'
json_result = response.json_body
assert json_result['err'] == 0