tests: add test for a remote regie (#13255)
This commit is contained in:
parent
e9e2f34ed9
commit
eb495f90de
|
@ -17,6 +17,7 @@ KNOWN_SERVICES = {
|
|||
}
|
||||
|
||||
LINGO_API_SIGN_KEY = '12345'
|
||||
LINGO_SIGNATURE_KEY = '54321'
|
||||
|
||||
TEMPLATE_VARS = {}
|
||||
|
||||
|
|
|
@ -0,0 +1,102 @@
|
|||
import pytest
|
||||
import mock
|
||||
import urlparse
|
||||
from decimal import Decimal
|
||||
|
||||
from django.contrib.auth.models import User
|
||||
from django.test.client import RequestFactory
|
||||
from django.template import Context
|
||||
from django.utils import timezone
|
||||
|
||||
from combo.utils import check_query
|
||||
from combo.data.models import Page
|
||||
from combo.apps.lingo.models import Regie, BasketItem, Transaction
|
||||
from combo.apps.lingo.models import ActiveItems
|
||||
|
||||
|
||||
pytestmark = pytest.mark.django_db
|
||||
|
||||
|
||||
INVOICES = [
|
||||
{
|
||||
'id': 'F201601',
|
||||
'display_id': 'F-2016-One',
|
||||
'label': 'invoice-one',
|
||||
'regie': 'remote',
|
||||
'created': '2016-02-02',
|
||||
'pay_limit_date': '2999-12-31',
|
||||
'total_amount': '123.45',
|
||||
'amount': '123.45',
|
||||
'has_pdf': True,
|
||||
'online_payment': True,
|
||||
'paid': False,
|
||||
'payment_date': None,
|
||||
'no_online_payment_reason': '',
|
||||
},
|
||||
]
|
||||
|
||||
@pytest.fixture
|
||||
def remote_regie():
|
||||
try:
|
||||
regie = Regie.objects.get(slug='remote')
|
||||
except Regie.DoesNotExist:
|
||||
regie = Regie()
|
||||
regie.label = 'Remote'
|
||||
regie.slug = 'remote'
|
||||
regie.description = 'remote'
|
||||
regie.payment_min_amount = Decimal(2.0)
|
||||
regie.service = 'dummy'
|
||||
regie.service_options = {'siret': '1234'}
|
||||
regie.webservice_url = 'http://passerelle.example.net/regie' # is_remote
|
||||
regie.save()
|
||||
return regie
|
||||
|
||||
@pytest.fixture
|
||||
def user():
|
||||
try:
|
||||
user = User.objects.get(username='admin')
|
||||
except User.DoesNotExist:
|
||||
user = User.objects.create_user('admin', email=None, password='admin')
|
||||
return user
|
||||
|
||||
|
||||
@mock.patch('combo.apps.lingo.models.requests.get')
|
||||
def test_remote_regie_cell(mock_get, remote_regie, user):
|
||||
assert remote_regie.is_remote() == True
|
||||
|
||||
page = Page(title='xxx', slug='test_basket_cell', template_name='standard')
|
||||
page.save()
|
||||
cell = ActiveItems(regie='remote', page=page, placeholder='content', order=0)
|
||||
context = Context({'request': RequestFactory().get('/')})
|
||||
context['synchronous'] = True # to get fresh content
|
||||
context['request'].user = user
|
||||
|
||||
# fake mellon (SAML) context
|
||||
context['user'] = user
|
||||
context['request'].session = {'mellon_session': {'name_id_content': '4242'}}
|
||||
|
||||
assert cell.is_relevant(context) is True
|
||||
|
||||
# show regie with an invoice
|
||||
mock_json = mock.Mock()
|
||||
mock_json.json.return_value = {'err': 0, 'data': INVOICES}
|
||||
mock_get.return_value = mock_json
|
||||
content = cell.render(context)
|
||||
assert 'F-2016-One' in content
|
||||
assert '123.45' in content
|
||||
|
||||
# check if regie webservice has been correctly called
|
||||
url = mock_get.call_args[0][0]
|
||||
scheme, netloc, path, params, querystring, fragment = urlparse.urlparse(url)
|
||||
assert scheme == 'http'
|
||||
assert netloc == 'passerelle.example.net'
|
||||
assert path == '/regie/invoices/'
|
||||
query = urlparse.parse_qs(querystring, keep_blank_values=True)
|
||||
assert query['NameID'][0] == '4242'
|
||||
assert query['orig'][0] == 'testserver'
|
||||
assert check_query(querystring, '54321') == True
|
||||
|
||||
# with no invoice
|
||||
mock_json.json.return_value = {'err': 0, 'data': []}
|
||||
content = cell.render(context)
|
||||
assert 'No items yet' in content
|
Loading…
Reference in New Issue