163 lines
6.8 KiB
Python
163 lines
6.8 KiB
Python
import json
|
|
from urllib.parse import urlparse
|
|
|
|
import pytest
|
|
from django.contrib.auth.models import Group
|
|
from django.urls import reverse
|
|
from webtest import Upload
|
|
|
|
from lingo.agendas.models import Agenda
|
|
from lingo.invoicing.models import Regie
|
|
from tests.utils import login
|
|
|
|
pytestmark = pytest.mark.django_db
|
|
|
|
|
|
def test_manager_invoicing_regie_list_title(app, admin_user):
|
|
app = login(app)
|
|
resp = app.get(reverse('lingo-manager-invoicing-regie-list'))
|
|
h2 = resp.pyquery('div#appbar h2')
|
|
assert h2.text() == 'Regies'
|
|
|
|
|
|
def test_manager_invoicing_regie_list_empty(app, admin_user):
|
|
app = login(app)
|
|
resp = app.get(reverse('lingo-manager-invoicing-regie-list'))
|
|
msg_info = resp.pyquery('div#content div.big-msg-info')
|
|
assert (
|
|
msg_info.text()
|
|
== "This site doesn't have any regie yet. Click on the \"New\" button in the top right of the page to add a first one."
|
|
)
|
|
|
|
|
|
def test_manager_invoicing_regie_list_add_button(app, admin_user):
|
|
app = login(app)
|
|
resp = app.get(reverse('lingo-manager-invoicing-regie-list'))
|
|
add_button = resp.pyquery('span.actions a[href="%s"]' % reverse('lingo-manager-invoicing-regie-add'))
|
|
assert add_button.text() == 'New regie'
|
|
|
|
|
|
def test_manager_invoicing_regie_list_show_objetcs(app, admin_user):
|
|
app = login(app)
|
|
regie = Regie.objects.create(label='Foo')
|
|
resp = app.get(reverse('lingo-manager-invoicing-regie-list'))
|
|
href = resp.pyquery(
|
|
'div#content div ul li a[href="%s"]'
|
|
% reverse('lingo-manager-invoicing-regie-detail', kwargs={'pk': regie.pk})
|
|
)
|
|
assert href.text() == 'Foo [identifier: foo]'
|
|
|
|
|
|
def test_manager_invoicing_regie_add(app, admin_user):
|
|
app = login(app)
|
|
assert Regie.objects.count() == 0
|
|
group = Group.objects.create(name='role-foo')
|
|
resp = app.get(reverse('lingo-manager-invoicing-regie-add'))
|
|
h2 = resp.pyquery('div#appbar h2')
|
|
assert h2.text() == 'New regie'
|
|
form = resp.form
|
|
form.set('label', 'Foo')
|
|
form.set('description', 'foo description')
|
|
form.set('cashier_role', group.id)
|
|
response = form.submit().follow()
|
|
assert Regie.objects.count() == 1
|
|
regie = Regie.objects.first()
|
|
assert regie.label == 'Foo'
|
|
assert regie.slug == 'foo'
|
|
assert regie.description == 'foo description'
|
|
assert regie.cashier_role == group
|
|
assert urlparse(response.request.url).path == reverse(
|
|
'lingo-manager-invoicing-regie-detail', kwargs={'pk': regie.pk}
|
|
)
|
|
|
|
|
|
def test_manager_invoicing_regie_detail(app, admin_user):
|
|
app = login(app)
|
|
group = Group.objects.create(name='role-foo')
|
|
regie = Regie.objects.create(label='Foo', description='foo description', cashier_role=group)
|
|
resp = app.get(reverse('lingo-manager-invoicing-regie-detail', kwargs={'pk': regie.pk}))
|
|
h2 = resp.pyquery('div#appbar h2')
|
|
assert h2.text() == 'Regie - Foo'
|
|
descr = resp.pyquery('div#panel-settings p')[0]
|
|
assert descr.text == 'foo description'
|
|
slug = resp.pyquery('div#panel-settings ul li')[0]
|
|
assert slug.text == 'Identifier: foo'
|
|
cashier_role = resp.pyquery('div#panel-settings ul li')[1]
|
|
assert cashier_role.text == 'Cashier role: role-foo'
|
|
usage = resp.pyquery('div#panel-usage div')[0]
|
|
assert 'This Regie is not used yet.' in usage.text
|
|
edit_button = resp.pyquery(
|
|
'span.actions a[href="%s"]' % reverse('lingo-manager-invoicing-regie-edit', kwargs={'pk': regie.pk})
|
|
)
|
|
assert edit_button.text() == 'Edit'
|
|
delete_button = resp.pyquery(
|
|
'span.actions a[href="%s"]' % reverse('lingo-manager-invoicing-regie-delete', kwargs={'pk': regie.pk})
|
|
)
|
|
assert delete_button.text() == 'Delete'
|
|
|
|
agenda1 = Agenda.objects.create(label='Foo Bar', regie=regie)
|
|
agenda2 = Agenda.objects.create(label='Foo Bar 2', regie=regie)
|
|
agenda3 = Agenda.objects.create(label='Foo Bar 3')
|
|
resp = app.get(reverse('lingo-manager-invoicing-regie-detail', kwargs={'pk': regie.pk}))
|
|
assert '/manage/pricing/agenda/%s/' % agenda1.pk in resp
|
|
assert '/manage/pricing/agenda/%s/' % agenda2.pk in resp
|
|
assert '/manage/pricing/agenda/%s/' % agenda3.pk not in resp
|
|
|
|
|
|
def test_manager_invoicing_regie_edit(app, admin_user):
|
|
app = login(app)
|
|
group_foo = Group.objects.create(name='role-foo')
|
|
group_bar = Group.objects.create(name='role-bar')
|
|
regie = Regie.objects.create(label='Foo', description='foo description', cashier_role=group_foo)
|
|
resp = app.get(reverse('lingo-manager-invoicing-regie-edit', kwargs={'pk': regie.pk}))
|
|
h2 = resp.pyquery('div#appbar h2')
|
|
assert h2.text() == 'Edit regie - Foo'
|
|
form = resp.form
|
|
form.set('label', 'Foo bar')
|
|
form.set('description', 'foo new description')
|
|
form.set('cashier_role', group_bar.id)
|
|
response = form.submit().follow()
|
|
assert Regie.objects.count() == 1
|
|
regie = Regie.objects.first()
|
|
assert regie.label == 'Foo bar'
|
|
assert regie.slug == 'foo'
|
|
assert regie.description == 'foo new description'
|
|
assert regie.cashier_role == group_bar
|
|
assert urlparse(response.request.url).path == reverse(
|
|
'lingo-manager-invoicing-regie-detail', kwargs={'pk': regie.pk}
|
|
)
|
|
|
|
|
|
def test_manager_invoicing_regie_delete(app, admin_user):
|
|
app = login(app)
|
|
group = Group.objects.create(name='role-foo')
|
|
regie = Regie.objects.create(label='Foo', description='foo description', cashier_role=group)
|
|
assert Regie.objects.count() == 1
|
|
resp = app.get(reverse('lingo-manager-invoicing-regie-delete', kwargs={'pk': regie.pk}))
|
|
response = resp.form.submit().follow()
|
|
assert Regie.objects.count() == 0
|
|
assert urlparse(response.request.url).path == reverse('lingo-manager-invoicing-regie-list')
|
|
|
|
|
|
def test_manager_invoicing_regie_import_export(app, admin_user, freezer):
|
|
freezer.move_to('2020-06-15')
|
|
app = login(app)
|
|
group = Group.objects.create(name='role-foo')
|
|
regie1 = Regie.objects.create(label='Foo', description='foo description', cashier_role=group)
|
|
Regie.objects.create(label='Bar', description='bar description', cashier_role=group)
|
|
response = app.get(reverse('lingo-manager-invoicing-regie-export'))
|
|
assert response.headers['content-type'] == 'application/json'
|
|
assert response.headers['content-disposition'] == 'attachment; filename="export_regies_20200615.json"'
|
|
regies_export = response.text
|
|
regies_json = json.loads(regies_export)
|
|
assert len(regies_json['regies']) == 2
|
|
|
|
regie1.delete()
|
|
assert Regie.objects.count() == 1
|
|
response = app.get(reverse('lingo-manager-invoicing-regie-import'))
|
|
response.form['config_json'] = Upload('export.json', regies_export.encode('utf-8'), 'application/json')
|
|
response = response.form.submit().follow()
|
|
assert urlparse(response.request.url).path == reverse('lingo-manager-invoicing-regie-list')
|
|
assert 'A regie was created. A regie was updated.' in response.text
|
|
assert Regie.objects.count() == 2
|