combo/tests/test_lingo_cells.py

228 lines
6.9 KiB
Python

# -*- 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 "<h2>TIPI Payment</h2>" in html
assert "Community identifier" not in html
assert '<input type="hidden" id="numcli" value="test regie" />' 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 '<select id="numcli">' in html
# set reference default values and check they are filled and readonly
cell.exer = '1234'
cell.rolrec = '00'
cell.save()
html = cell.render({})
assert 'value="1234" readonly' in html
assert 'value="00" readonly' in html