tests: add test for a remote regie (#13255)

This commit is contained in:
Thomas NOËL 2016-09-14 08:30:59 +02:00
parent e9e2f34ed9
commit eb495f90de
2 changed files with 103 additions and 0 deletions

View File

@ -17,6 +17,7 @@ KNOWN_SERVICES = {
}
LINGO_API_SIGN_KEY = '12345'
LINGO_SIGNATURE_KEY = '54321'
TEMPLATE_VARS = {}

View File

@ -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