# -*- coding: utf-8 -*- import eopayment import pytest from django.contrib.auth.models import User from django.test.client import RequestFactory from django.utils import timezone from django.utils.http import quote from combo.data.models import Page from combo.apps.lingo.models import Regie, BasketItem, Transaction from combo.apps.lingo.models import (LingoBasketCell, PaymentBackend, LingoRecentTransactionsCell, LingoBasketLinkCell, TipiPaymentFormCell) pytestmark = pytest.mark.django_db @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 @pytest.fixture def regie(): try: payment_backend = PaymentBackend.objects.get(slug='test1') except PaymentBackend.DoesNotExist: payment_backend = PaymentBackend.objects.create( label='test1', slug='test1') try: regie = Regie.objects.get(slug='test') except Regie.DoesNotExist: regie = Regie() regie.label = 'Test' regie.slug = 'test' regie.description = 'test' regie.payment_backend = payment_backend regie.save() return regie def test_cell_disabled(): Regie.objects.all().delete() assert LingoBasketCell.is_enabled() is False assert LingoRecentTransactionsCell.is_enabled() is False def test_cell_enabled(regie): assert LingoBasketCell.is_enabled() is True assert LingoRecentTransactionsCell.is_enabled() is True def test_basket_cell(regie, user): page = Page(title='xxx', slug='test_basket_cell', template_name='standard') page.save() cell = LingoBasketCell(page=page, placeholder='content', order=0) context = {'request': RequestFactory().get('/')} context['request'].user = None assert cell.is_relevant(context) is False assert cell.get_badge(context) is None context['request'].user = user assert cell.is_relevant(context) is False assert cell.get_badge(context) is None item = BasketItem() item.user = user item.regie = regie item.subject = 'foo' item.source_url = 'http://example.net' item.amount = 12345 item.save() item_anonymous = BasketItem() item_anonymous.user = None item_anonymous.regie = regie item_anonymous.subject = 'randall' item_anonymous.source_url = 'http://example.net' item_anonymous.amount = 667 item_anonymous.save() assert cell.is_relevant(context) is True assert cell.get_badge(context) == {'badge': u'12345€'} item.cancellation_date = timezone.now() item.save() assert cell.is_relevant(context) is False item.cancellation_date = None item.save() content = cell.render(context) assert '12345' in content assert '667' not in content item.amount = 123.45 item.save() assert cell.get_badge(context) == {'badge': u'123.45€'} def test_recent_transaction_cell(regie, user): page = Page(title='xxx', slug='test_basket_cell', template_name='standard') page.save() cell = LingoRecentTransactionsCell(page=page, placeholder='content', order=0) context = {'request': RequestFactory().get('/')} context['request'].user = None assert cell.is_relevant(context) is False context['request'].user = user assert cell.is_relevant(context) is False transaction = Transaction(user=user, status=eopayment.PAID) transaction.save() assert cell.is_relevant(context) is True item = BasketItem() item.user = user item.regie = regie item.subject = 'foo' item.source_url = 'http://example.net' item.amount = 12345 item.save() transaction.items.add(item) content = cell.render(context) assert '12345' in content assert item.source_url in content assert 'open' in content item.source_url = '' item.save() content = cell.render(context) assert not 'open' in content def test_basket_link_cell(regie, user): page = Page(title='xxx', slug='test_basket_cell', template_name='standard') page.save() cell = LingoBasketLinkCell(page=page, placeholder='content', order=0) context = {'request': RequestFactory().get('/')} context['request'].user = None assert cell.is_relevant(context) is False context['request'].user = user assert cell.is_relevant(context) is False item = BasketItem() item.user = user item.regie = regie item.subject = 'foo' item.source_url = 'http://example.net' item.amount = 12345 item.save() assert cell.is_relevant(context) is True # no basket cell to link to content = cell.render(context) assert content == '' cell2 = LingoBasketCell(page=page, placeholder='content', order=0) cell2.save() content = cell.render(context) assert '12345' in content assert page.get_online_url() in content def test_basket_link_cell_in_skeleton(app, regie, user): Page.objects.all().delete() page = Page(title='xxx', slug='test_basket_cell', template_name='standard') page.redirect_url = 'http://example.net/foo/' page.save() cell = LingoBasketLinkCell(page=page, placeholder='content', order=0) cell.save() resp = app.get('/__skeleton__/?source=%s' % quote('http://example.net/foo/bar')) def test_tipi_cell(): page = Page(title='example page', slug='example-page') page.save() cell = TipiPaymentFormCell() cell.page = page cell.title = 'TIPI Payment' cell.regies = "test regie" cell.order = 0 cell.save() assert cell.control_protocol == 'pesv2' assert cell.url == 'https://www.tipi.budget.gouv.fr/tpa/paiement.web' assert cell.template_name == 'lingo/tipi_form.html' html = cell.render({}) assert "

TIPI Payment

" in html assert "Community identifier" not in html assert '' in html assert 'id="exer"' in html assert 'id="idpce"' in html assert 'id="idligne"' in html assert 'id="rolrec"' not in html assert 'id="roldeb"' not in html assert 'id="roldet"' not in html assert 'data-saisie="M"' in html assert 'data-pesv2="True"' in html cell.control_protocol = 'rolmre' cell.test_mode = True cell.save() html = cell.render({}) assert 'id="rolrec"' in html assert 'id="roldeb"' in html assert 'id="roldet"' in html assert 'id="idpce"' not in html assert 'id="idligne"' not in html assert 'data-saisie="T"' in html assert 'data-pesv2="False"' in html cell_media = str(cell.media) assert "js/tipi.js" in cell_media cell.regies = 'regie1, regie2' cell.save() html = cell.render({}) assert "Community identifier" in html assert '