401 lines
14 KiB
Python
401 lines
14 KiB
Python
from unittest.mock import Mock
|
|
|
|
import pytest
|
|
from django.contrib.contenttypes.models import ContentType
|
|
|
|
from passerelle.base.models import AccessRight, ApiUser
|
|
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 'DECHET' in json_result['err_desc']
|
|
assert '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
|
|
|
|
|
|
@pytest.mark.parametrize('sms', [True, 'trUe', 1, '1'])
|
|
def test_bookdate_sms_true(app, setup, monkeypatch, sms):
|
|
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"
|
|
params['sms'] = sms
|
|
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'] == 'OUI'
|
|
json_result = response.json_body
|
|
assert json_result['err'] == 0
|
|
|
|
|
|
@pytest.mark.parametrize('sms', [False, 'faLse', 0, '0'])
|
|
def test_bookdate_sms_false(app, setup, monkeypatch, sms):
|
|
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"
|
|
params['sms'] = sms
|
|
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
|