vivaticket: PEP8ness (#30458)

This commit is contained in:
Benjamin Dauvergne 2019-02-08 06:37:26 +01:00
parent f2e7add34b
commit f581c082a8
2 changed files with 36 additions and 25 deletions

View File

@ -14,14 +14,12 @@
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
import json
import hashlib
import urlparse
from django.core.cache import cache
from django.db import models
from django.utils.translation import ugettext_lazy as _
from django.utils.text import slugify
from passerelle.base.models import BaseResource
from passerelle.utils.api import endpoint
@ -102,7 +100,7 @@ class VivaTicket(BaseResource):
raise APIError(response.content)
api_key = response.json()['Key']
# api key is available for 30 minutes
cache.set(cache_key_name, api_key, 60*30)
cache.set(cache_key_name, api_key, 60 * 30)
return api_key
def get(self, endpoint, **kwargs):
@ -174,21 +172,28 @@ class VivaTicket(BaseResource):
return {'InternalCode': response.json()['InternalCode']}
@endpoint(perm='can_access', description=_('Book an event'),
post={'description': _('Creates a booking for an event'),
'request_body': {
'schema': {'application/json': EVENTBOOK_SCHEMA}
}
})
post={
'description': _('Creates a booking for an event'),
'request_body': {
'schema': {
'application/json': EVENTBOOK_SCHEMA
}
}
})
def book(self, request, post_data, nameid=None):
booking = {'externalCode': post_data['id'], 'startDateTime': post_data['datetime'],
'endDateTime': post_data['datetime'],
'contact': self.get_or_create_contact(post_data['email'], nameid),
'roomList': [{'eventCategoryCode': post_data['event'],
'roomCode': post_data['room'],
'themeCode': post_data['theme'],
'quantity': post_data['quantity'],
'startDateTime': post_data['datetime'],
'endDateTime': post_data['datetime']}]
}
booking = {
'externalCode': post_data['id'],
'startDateTime': post_data['datetime'],
'endDateTime': post_data['datetime'],
'contact': self.get_or_create_contact(post_data['email'], nameid),
'roomList': [{
'eventCategoryCode': post_data['event'],
'roomCode': post_data['room'],
'themeCode': post_data['theme'],
'quantity': post_data['quantity'],
'startDateTime': post_data['datetime'],
'endDateTime': post_data['datetime']
}]
}
r = self.post('Booking/Post', {'Booking': booking})
return {'data': r.json()}

View File

@ -200,15 +200,16 @@ def connector(db):
slug='test', login='foo', password='bar',
url='http://example.net/vivaticket'))
@mock.patch('passerelle.utils.Request.post')
def test_get_api_key(mocked_post, app, connector):
with pytest.raises(APIError) as excinfo:
with pytest.raises(APIError):
mocked_post.return_value = utils.FakedResponse(content=ERROR_RESPONSE, ok=False)
connector.get_apikey()
mocked_post.return_value = utils.FakedResponse(content=KEY_RESPONSE, ok=True)
connector.get_apikey()
assert mocked_post.call_count == 2
assert "Connect/PostConnect" in mocked_post.call_args[0][0]
assert "Connect/PostConnect" in mocked_post.call_args[0][0]
assert mocked_post.call_args[1]['json']['Login'] == 'foo'
assert mocked_post.call_args[1]['json']['Password'] == 'bar'
# make sure the key from cache is used
@ -228,12 +229,13 @@ def test_get_events(mocked_get, app, connector):
assert 'id' in item
assert 'text' in item
@mock.patch('passerelle.utils.Request.post')
@mock.patch('passerelle.utils.Request.get')
def test_get_events_with_expired_key(mocked_get, mocked_post, app, connector):
mocked_get.return_value = utils.FakedResponse(content=EVENTS_RESPONSE, status_code=401)
mocked_post.return_value = utils.FakedResponse(content=KEY_RESPONSE, status_code=200)
result = utils.endpoint_get('/vivaticket/test/events', app, connector, 'events')
utils.endpoint_get('/vivaticket/test/events', app, connector, 'events')
assert mocked_post.call_count == 1
@ -249,6 +251,7 @@ def test_get_rooms(mocked_get, app, connector):
result = utils.endpoint_get('/vivaticket/test/rooms', app, connector, 'rooms', params={'event': '02'})
assert mocked_get.call_args[1]['params']['eventCategory'] == '02'
@mock.patch('passerelle.utils.Request.get')
def test_get_themes(mocked_get, app, connector):
mocked_get.return_value = utils.FakedResponse(content=ROOMS_RESPONSE, status_code=200)
@ -268,8 +271,9 @@ def test_get_or_create_contact(mocked_get, mocked_post, app, connector):
mocked_get.return_value = utils.FakedResponse(content=CONTACT_RESPONSE, ok=True)
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)
mocked_post.return_value = utils.FakedResponse(
content='{"InternalCode": "0000000277", "ReturnCode": 0, "Error": null}',
status_code=200)
connector.get_or_create_contact('foo@example.com')
assert mocked_post.call_args[1]['json']['Key'] == '86569D0CA1B1CBEF8D77DD5BDC9F5CBAE5C99074'
assert mocked_post.call_args[1]['json']['Contact']['Email'] == 'foo@example.com'
@ -281,13 +285,15 @@ def test_get_or_create_contact(mocked_get, mocked_post, app, connector):
def test_get_and_update_contact(mocked_get, mocked_put, app, connector):
mocked_get.return_value = utils.FakedResponse(content=CONTACT_RESPONSE, ok=True)
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)
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):