vivaticket: send booking's contact informations (#31853)
This commit is contained in:
parent
1d798fb874
commit
4f491a22e4
|
@ -36,6 +36,56 @@ EVENTBOOK_SCHEMA = {
|
|||
"type": "string",
|
||||
"required": True
|
||||
},
|
||||
"title": {
|
||||
"description": "user title",
|
||||
"type": "string",
|
||||
"required": False
|
||||
},
|
||||
"last_name": {
|
||||
"description": "user last name",
|
||||
"type": "string",
|
||||
"required": False
|
||||
},
|
||||
"first_name": {
|
||||
"description": "user first name",
|
||||
"type": "string",
|
||||
"required": False
|
||||
},
|
||||
"social_reason": {
|
||||
"description": "user social reason",
|
||||
"type": "string",
|
||||
"required": False
|
||||
},
|
||||
"address": {
|
||||
"description": "user address",
|
||||
"type": "string",
|
||||
"required": False
|
||||
},
|
||||
"zipcode": {
|
||||
"description": "user zipcode",
|
||||
"type": "string",
|
||||
"required": False
|
||||
},
|
||||
"city": {
|
||||
"description": "user city",
|
||||
"type": "string",
|
||||
"required": False
|
||||
},
|
||||
"country": {
|
||||
"description": "user country",
|
||||
"type": "string",
|
||||
"required": False
|
||||
},
|
||||
"phone": {
|
||||
"description": "user phone",
|
||||
"type": "string",
|
||||
"required": False
|
||||
},
|
||||
"mobile": {
|
||||
"description": "user mobile",
|
||||
"type": "string",
|
||||
"required": False
|
||||
},
|
||||
"email": {
|
||||
"description": "user email",
|
||||
"type": "string",
|
||||
|
@ -151,25 +201,40 @@ class VivaTicket(BaseResource):
|
|||
query['room'] = room
|
||||
return self.get_setting('Settings/GetThemes', **query)
|
||||
|
||||
def get_or_create_contact(self, email, name_id=None):
|
||||
def get_or_create_contact(self, data, name_id=None):
|
||||
contact_payload = {'Civility': data.get('title', ''),
|
||||
'LastName': data.get('last_name', ''),
|
||||
'FirstName': data.get('first_name', ''),
|
||||
'SocialReason': data.get('social_reason', ''),
|
||||
'Address1': data.get('address', ''),
|
||||
'ZipCode': data.get('zipcode', ''),
|
||||
'City': data.get('city', ''),
|
||||
'Country': data.get('country', ''),
|
||||
'Email': data['email'],
|
||||
'Phone': data.get('phone', ''),
|
||||
'Mobile': data.get('mobile', '')
|
||||
}
|
||||
if name_id is not None:
|
||||
unhashed_external_code = name_id
|
||||
else:
|
||||
unhashed_external_code = email
|
||||
unhashed_external_code = data['email']
|
||||
external_code = hashlib.md5(unhashed_external_code.encode('utf-8')).hexdigest()[:20]
|
||||
contact_payload['ExternalCode'] = external_code
|
||||
response = self.get('Contact/Get', externalCode=external_code)
|
||||
self.logger.debug('Got contact response: %r', response.text)
|
||||
if not response.ok:
|
||||
response = self.post('Contact/Post', {'Contact': {'Email': email, 'ExternalCode': external_code}})
|
||||
response = self.post('Contact/Post', {'Contact': contact_payload})
|
||||
self.logger.debug('Contact creation response: %r', response.text)
|
||||
response.raise_for_status()
|
||||
internal_code = response.json()['InternalCode']
|
||||
else:
|
||||
# update email if changed
|
||||
internal_code = response.json()['InternalCode']
|
||||
# update contact data
|
||||
contact_data = response.json()
|
||||
if contact_data['Email'] != email:
|
||||
contact_data['Email'] = email
|
||||
url = urlparse.urljoin(self.url, 'Contact/Put')
|
||||
response = self.requests.put(url, params={'id': response.json()['InternalCode']},
|
||||
json={'Key': self.get_apikey(), 'Contact': contact_data})
|
||||
return {'InternalCode': response.json()['InternalCode']}
|
||||
url = urlparse.urljoin(self.url, 'Contact/Put')
|
||||
response = self.requests.put(url, params={'id': response.json()['InternalCode']},
|
||||
json={'Key': self.get_apikey(), 'Contact': contact_payload})
|
||||
return {'InternalCode': internal_code}
|
||||
|
||||
@endpoint(perm='can_access', description=_('Book an event'),
|
||||
post={
|
||||
|
@ -185,7 +250,7 @@ class VivaTicket(BaseResource):
|
|||
'externalCode': post_data['id'],
|
||||
'startDateTime': post_data['datetime'],
|
||||
'endDateTime': post_data['datetime'],
|
||||
'contact': self.get_or_create_contact(post_data['email'], nameid),
|
||||
'contact': self.get_or_create_contact(post_data, nameid),
|
||||
'roomList': [{
|
||||
'eventCategoryCode': post_data['event'],
|
||||
'roomCode': post_data['room'],
|
||||
|
|
|
@ -273,40 +273,36 @@ def test_get_themes(mocked_get, mocked_post, app, connector):
|
|||
|
||||
|
||||
@mock.patch('passerelle.utils.Request.post')
|
||||
@mock.patch('passerelle.utils.Request.put')
|
||||
@mock.patch('passerelle.utils.Request.get')
|
||||
def test_get_or_create_contact(mocked_get, mocked_post, app, connector):
|
||||
mocked_get.return_value = utils.FakedResponse(content=CONTACT_RESPONSE, ok=True)
|
||||
mocked_post.return_value = utils.FakedResponse(content=KEY_RESPONSE, status_code=200)
|
||||
assert connector.get_or_create_contact('foo@example.com') == {'InternalCode': '0000000273'}
|
||||
mocked_get.return_value = utils.FakedResponse(content=CONTACT_RESPONSE, ok=False)
|
||||
mocked_post.return_value = utils.FakedResponse(
|
||||
content='{"InternalCode": "0000000277", "ReturnCode": 0, "Error": null}',
|
||||
status_code=200)
|
||||
connector.get_or_create_contact('foo@example.com')
|
||||
def test_get_or_create_contact(mocked_get, mocked_put, mocked_post, app, connector):
|
||||
mocked_get.return_value = utils.FakedResponse(content='', ok=False)
|
||||
mocked_post.side_effect = [
|
||||
utils.FakedResponse(content=KEY_RESPONSE, status_code=200),
|
||||
utils.FakedResponse(content='{"InternalCode": "0000000273", "ReturnCode": 0, "Error": null}',
|
||||
status_code=200),
|
||||
]
|
||||
assert connector.get_or_create_contact({'email': 'foo@example.com'}) == {'InternalCode': '0000000273'}
|
||||
mocked_put.assert_not_called()
|
||||
assert mocked_post.call_args[1]['json']['Key'] == '86569D0CA1B1CBEF8D77DD5BDC9F5CBAE5C99074'
|
||||
assert mocked_post.call_args[1]['json']['Contact']['Email'] == 'foo@example.com'
|
||||
assert mocked_post.call_args[1]['json']['Contact']['ExternalCode'] == 'b48def645758b95537d4'
|
||||
mocked_post.return_value = utils.FakedResponse(
|
||||
content='{"InternalCode": "0000000273", "ReturnCode": 0, "Error": null}',
|
||||
status_code=200)
|
||||
mocked_get.return_value = utils.FakedResponse(content=CONTACT_RESPONSE, ok=True)
|
||||
mocked_put.return_value = utils.FakedResponse(content='', status_code=204)
|
||||
connector.get_or_create_contact({'email': 'foo@example.com'})
|
||||
mocked_put.assert_called()
|
||||
assert mocked_put.call_args[1]['params']['id'] == '0000000273'
|
||||
assert mocked_put.call_args[1]['json']['Key'] == '86569D0CA1B1CBEF8D77DD5BDC9F5CBAE5C99074'
|
||||
assert mocked_put.call_args[1]['json']['Contact']['Email'] == 'foo@example.com'
|
||||
|
||||
|
||||
@mock.patch('passerelle.utils.Request.post')
|
||||
@mock.patch('passerelle.utils.Request.put')
|
||||
@mock.patch('passerelle.utils.Request.get')
|
||||
def test_get_and_update_contact(mocked_get, mocked_put, mocked_post, app, connector):
|
||||
mocked_get.return_value = utils.FakedResponse(content=CONTACT_RESPONSE, ok=True)
|
||||
mocked_post.return_value = utils.FakedResponse(content=KEY_RESPONSE, status_code=200)
|
||||
assert connector.get_or_create_contact('foo@example.com') == {'InternalCode': '0000000273'}
|
||||
mocked_put.return_value = utils.FakedResponse(
|
||||
content='{"InternalCode": "0000000277", "ReturnCode": 0, "Error": null}',
|
||||
status_code=200)
|
||||
connector.get_or_create_contact('bar@example.com', 'bar')
|
||||
assert mocked_put.call_args[1]['params']['id'] == '0000000273'
|
||||
assert mocked_put.call_args[1]['json']['Key'] == '86569D0CA1B1CBEF8D77DD5BDC9F5CBAE5C99074'
|
||||
assert mocked_put.call_args[1]['json']['Contact']['Email'] == 'bar@example.com'
|
||||
|
||||
|
||||
@mock.patch('passerelle.utils.Request.post')
|
||||
@mock.patch('passerelle.utils.Request.get')
|
||||
def test_book(mocked_get, mocked_post, app, connector):
|
||||
def test_book(mocked_get, mocked_put, mocked_post, app, connector):
|
||||
mocked_get.return_value = utils.FakedResponse(content=CONTACT_RESPONSE, status_code=200)
|
||||
url = utils.generic_endpoint_url('vivaticket', 'book')
|
||||
payload = {'id': 'formid', 'email': 'foo@example.com'}
|
||||
|
|
Loading…
Reference in New Issue