lingo/tests/invoicing/manager/test_regie.py

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