lingo/tests/invoicing/manager/test_import_export.py

96 lines
3.4 KiB
Python

import copy
import json
import pytest
from webtest import Upload
from lingo.invoicing.models import Regie
from tests.utils import login
pytestmark = pytest.mark.django_db
def test_export_site(freezer, app, admin_user):
freezer.move_to('2020-06-15')
login(app)
resp = app.get('/manage/invoicing/')
resp = resp.click('Export')
resp = resp.form.submit()
assert resp.headers['content-type'] == 'application/json'
assert (
resp.headers['content-disposition'] == 'attachment; filename="export_invoicing_config_20200615.json"'
)
site_json = json.loads(resp.text)
assert site_json == {
'regies': [],
}
Regie.objects.create(label='Foo Bar')
resp = app.get('/manage/invoicing/export/')
resp = resp.form.submit()
site_json = json.loads(resp.text)
assert len(site_json['regies']) == 1
@pytest.mark.freeze_time('2023-06-02')
def test_import_regie(app, admin_user):
regie = Regie.objects.create(label='Foo bar')
app = login(app)
resp = app.get('/manage/invoicing/regie/%s/' % regie.pk)
resp = resp.click(href='/manage/invoicing/regie/%s/export/' % regie.pk)
assert resp.headers['content-type'] == 'application/json'
assert resp.headers['content-disposition'] == 'attachment; filename="export_regie_foo-bar_20230602.json"'
regie_export = resp.text
# existing regie
resp = app.get('/manage/invoicing/', status=200)
resp = resp.click('Import')
resp.form['config_json'] = Upload('export.json', regie_export.encode('utf-8'), 'application/json')
resp = resp.form.submit()
assert resp.location.endswith('/manage/invoicing/regie/%s/' % regie.pk)
resp = resp.follow()
assert 'No regie created. A regie has been updated.' not in resp.text
assert Regie.objects.count() == 1
# new regie
Regie.objects.all().delete()
resp = app.get('/manage/invoicing/', status=200)
resp = resp.click('Import')
resp.form['config_json'] = Upload('export.json', regie_export.encode('utf-8'), 'application/json')
resp = resp.form.submit()
regie = Regie.objects.latest('pk')
assert resp.location.endswith('/manage/invoicing/regie/%s/' % regie.pk)
resp = resp.follow()
assert 'A regie has been created. No regie updated.' not in resp.text
assert Regie.objects.count() == 1
# multiple regies
regies = json.loads(regie_export)
regies['regies'].append(copy.copy(regies['regies'][0]))
regies['regies'].append(copy.copy(regies['regies'][0]))
regies['regies'][1]['label'] = 'Foo bar 2'
regies['regies'][1]['slug'] = 'foo-bar-2'
regies['regies'][2]['label'] = 'Foo bar 3'
regies['regies'][2]['slug'] = 'foo-bar-3'
resp = app.get('/manage/invoicing/', status=200)
resp = resp.click('Import')
resp.form['config_json'] = Upload('export.json', json.dumps(regies).encode('utf-8'), 'application/json')
resp = resp.form.submit()
assert resp.location.endswith('/manage/invoicing/')
resp = resp.follow()
assert '2 regies have been created. A regie has been updated.' in resp.text
assert Regie.objects.count() == 3
Regie.objects.all().delete()
resp = app.get('/manage/invoicing/', status=200)
resp = resp.click('Import')
resp.form['config_json'] = Upload('export.json', json.dumps(regies).encode('utf-8'), 'application/json')
resp = resp.form.submit().follow()
assert '3 regies have been created. No regie updated.' in resp.text
assert Regie.objects.count() == 3