297 lines
11 KiB
Python
297 lines
11 KiB
Python
import datetime
|
|
from unittest import mock
|
|
|
|
import pytest
|
|
|
|
from lingo.invoicing.models import Campaign, DraftInvoice, DraftInvoiceLine, Pool, Regie
|
|
from tests.utils import login
|
|
|
|
pytestmark = pytest.mark.django_db
|
|
|
|
|
|
def test_campaign_home(app, admin_user):
|
|
app = login(app)
|
|
resp = app.get('/manage/invoicing/campaigns/')
|
|
h2 = resp.pyquery('div#appbar h2')
|
|
assert h2.text() == 'Campaigns'
|
|
|
|
|
|
def test_add_campaign(app, admin_user):
|
|
app = login(app)
|
|
resp = app.get('/manage/')
|
|
resp = resp.click('Invoicing')
|
|
resp = resp.click(href='/manage/invoicing/campaigns/')
|
|
resp = resp.click('New campaign')
|
|
resp.form['date_start'] = '2022-09-01'
|
|
resp.form['date_end'] = '2022-10-01'
|
|
resp.form['date_issue'] = '2022-10-31'
|
|
resp = resp.form.submit()
|
|
campaign = Campaign.objects.latest('pk')
|
|
assert resp.location.endswith('/manage/invoicing/campaign/%s/' % campaign.pk)
|
|
assert campaign.date_start == datetime.date(2022, 9, 1)
|
|
assert campaign.date_end == datetime.date(2022, 10, 1)
|
|
assert campaign.date_issue == datetime.date(2022, 10, 31)
|
|
|
|
resp = app.get('/manage/invoicing/campaign/add/')
|
|
resp.form['date_start'] = '2022-08-31'
|
|
resp.form['date_end'] = '2022-09-02'
|
|
resp.form['date_issue'] = '2022-10-31'
|
|
resp = resp.form.submit()
|
|
assert resp.context['form'].errors['__all__'] == [
|
|
'Another campaign overlapping this period already exists.'
|
|
]
|
|
resp.form['date_end'] = '2022-09-01'
|
|
resp = resp.form.submit()
|
|
campaign = Campaign.objects.latest('pk')
|
|
assert campaign.date_start == datetime.date(2022, 8, 31)
|
|
assert campaign.date_end == datetime.date(2022, 9, 1)
|
|
assert campaign.date_issue == datetime.date(2022, 10, 31)
|
|
|
|
resp = app.get('/manage/invoicing/campaign/add/')
|
|
resp.form['date_start'] = '2022-09-30'
|
|
resp.form['date_end'] = '2022-10-02'
|
|
resp.form['date_issue'] = '2022-10-31'
|
|
resp = resp.form.submit()
|
|
assert resp.context['form'].errors['__all__'] == [
|
|
'Another campaign overlapping this period already exists.'
|
|
]
|
|
resp.form['date_start'] = '2022-10-01'
|
|
resp = resp.form.submit()
|
|
campaign = Campaign.objects.latest('pk')
|
|
assert campaign.date_start == datetime.date(2022, 10, 1)
|
|
assert campaign.date_end == datetime.date(2022, 10, 2)
|
|
assert campaign.date_issue == datetime.date(2022, 10, 31)
|
|
|
|
|
|
def test_detail_campaign(app, admin_user):
|
|
campaign = Campaign.objects.create(
|
|
date_start=datetime.date(2022, 9, 1),
|
|
date_end=datetime.date(2022, 10, 1),
|
|
date_issue=datetime.date(2022, 10, 31),
|
|
)
|
|
pool1 = Pool.objects.create(
|
|
campaign=campaign,
|
|
draft=True,
|
|
)
|
|
pool2 = Pool.objects.create(
|
|
campaign=campaign,
|
|
draft=True,
|
|
)
|
|
|
|
app = login(app)
|
|
resp = app.get('/manage/invoicing/campaigns/')
|
|
resp = resp.click(href='/manage/invoicing/campaign/%s/' % campaign.pk)
|
|
assert '/manage/invoicing/campaign/%s/edit/' % campaign.pk in resp
|
|
assert '/manage/invoicing/campaign/%s/delete/' % campaign.pk in resp
|
|
assert '/manage/invoicing/campaign/%s/pool/%s/' % (campaign.pk, pool1.pk) in resp
|
|
assert '/manage/invoicing/campaign/%s/pool/%s/' % (campaign.pk, pool2.pk) in resp
|
|
assert '/manage/invoicing/campaign/%s/pool/add/' % (campaign.pk) in resp
|
|
|
|
pool3 = Pool.objects.create(
|
|
campaign=campaign,
|
|
draft=False,
|
|
)
|
|
resp = app.get('/manage/invoicing/campaign/%s/' % campaign.pk)
|
|
assert '/manage/invoicing/campaign/%s/edit/' % campaign.pk not in resp
|
|
assert '/manage/invoicing/campaign/%s/delete/' % campaign.pk not in resp
|
|
assert '/manage/invoicing/campaign/%s/pool/%s/' % (campaign.pk, pool1.pk) in resp
|
|
assert '/manage/invoicing/campaign/%s/pool/%s/' % (campaign.pk, pool2.pk) in resp
|
|
assert '/manage/invoicing/campaign/%s/pool/%s/' % (campaign.pk, pool3.pk) in resp
|
|
assert '/manage/invoicing/campaign/%s/pool/add/' % (campaign.pk) not in resp
|
|
|
|
|
|
def test_edit_campaign(app, admin_user):
|
|
campaign = Campaign.objects.create(
|
|
date_start=datetime.date(2022, 9, 1),
|
|
date_end=datetime.date(2022, 10, 1),
|
|
date_issue=datetime.date(2022, 10, 31),
|
|
)
|
|
Campaign.objects.create(
|
|
date_start=datetime.date(2022, 10, 1),
|
|
date_end=datetime.date(2022, 11, 1),
|
|
date_issue=datetime.date(2022, 11, 30),
|
|
)
|
|
|
|
app = login(app)
|
|
resp = app.get('/manage/invoicing/campaign/%s/edit/' % campaign.pk)
|
|
resp.form['date_start'] = '2022-09-30'
|
|
resp.form['date_end'] = '2022-10-02'
|
|
resp.form['date_issue'] = '2022-12-31'
|
|
resp = resp.form.submit()
|
|
assert resp.context['form'].errors['__all__'] == [
|
|
'Another campaign overlapping this period already exists.'
|
|
]
|
|
resp.form['date_end'] = '2022-10-01'
|
|
resp = resp.form.submit()
|
|
assert resp.location.endswith('/manage/invoicing/campaign/%s/' % campaign.pk)
|
|
campaign.refresh_from_db()
|
|
assert campaign.date_start == datetime.date(2022, 9, 30)
|
|
assert campaign.date_end == datetime.date(2022, 10, 1)
|
|
assert campaign.date_issue == datetime.date(2022, 12, 31)
|
|
|
|
resp = app.get('/manage/invoicing/campaign/%s/edit/' % campaign.pk)
|
|
resp.form['date_start'] = '2022-10-31'
|
|
resp.form['date_end'] = '2022-11-02'
|
|
resp.form['date_issue'] = '2022-12-31'
|
|
resp = resp.form.submit()
|
|
assert resp.context['form'].errors['__all__'] == [
|
|
'Another campaign overlapping this period already exists.'
|
|
]
|
|
resp.form['date_start'] = '2022-11-01'
|
|
resp = resp.form.submit()
|
|
campaign.refresh_from_db()
|
|
assert campaign.date_start == datetime.date(2022, 11, 1)
|
|
assert campaign.date_end == datetime.date(2022, 11, 2)
|
|
assert campaign.date_issue == datetime.date(2022, 12, 31)
|
|
|
|
pool = Pool.objects.create(
|
|
campaign=campaign,
|
|
draft=True,
|
|
)
|
|
app.get('/manage/invoicing/campaign/%s/edit/' % campaign.pk)
|
|
pool.draft = False
|
|
pool.save()
|
|
app.get('/manage/invoicing/campaign/%s/edit/' % campaign.pk, status=404)
|
|
|
|
|
|
def test_delete_campaign(app, admin_user):
|
|
campaign = Campaign.objects.create(
|
|
date_start=datetime.date(2022, 9, 1),
|
|
date_end=datetime.date(2022, 10, 1),
|
|
date_issue=datetime.date(2022, 10, 31),
|
|
)
|
|
|
|
app = login(app)
|
|
resp = app.get('/manage/invoicing/campaign/%s/delete/' % campaign.pk)
|
|
resp = resp.form.submit()
|
|
assert Campaign.objects.count() == 0
|
|
assert resp.location.endswith('/manage/invoicing/campaigns/')
|
|
|
|
campaign.save()
|
|
pool = Pool.objects.create(
|
|
campaign=campaign,
|
|
draft=True,
|
|
)
|
|
regie = Regie.objects.create(label='Foo')
|
|
invoice = DraftInvoice.objects.create(date_issue=datetime.date.today(), regie=regie, pool=pool)
|
|
DraftInvoiceLine.objects.create(
|
|
invoice=invoice,
|
|
quantity=1,
|
|
unit_amount=1,
|
|
total_amount=1,
|
|
status='success',
|
|
pool=pool,
|
|
)
|
|
resp = app.get('/manage/invoicing/campaign/%s/delete/' % campaign.pk)
|
|
resp = resp.form.submit()
|
|
assert Campaign.objects.count() == 0
|
|
|
|
campaign.save()
|
|
pool.draft = False
|
|
pool.save()
|
|
app.get('/manage/invoicing/campaign/%s/delete/' % campaign.pk, status=404)
|
|
|
|
|
|
def test_add_pool(app, admin_user):
|
|
campaign = Campaign.objects.create(
|
|
date_start=datetime.date(2022, 9, 1),
|
|
date_end=datetime.date(2022, 10, 1),
|
|
date_issue=datetime.date(2022, 10, 31),
|
|
)
|
|
|
|
app = login(app)
|
|
resp = app.get('/manage/invoicing/campaign/%s/pool/add/' % campaign.pk)
|
|
assert resp.form['draft'].value == 'on'
|
|
with mock.patch('lingo.invoicing.views.generate_invoices') as mock_generate:
|
|
resp = resp.form.submit()
|
|
assert resp.location.endswith('/manage/invoicing/campaign/%s/#open:pools' % campaign.pk)
|
|
assert mock_generate.call_args_list == [mock.call(campaign=campaign, draft=True)]
|
|
|
|
pool = Pool.objects.create(
|
|
campaign=campaign,
|
|
draft=True,
|
|
)
|
|
resp = app.get('/manage/invoicing/campaign/%s/pool/add/' % campaign.pk)
|
|
resp.form['draft'] = False
|
|
with mock.patch('lingo.invoicing.views.generate_invoices') as mock_generate:
|
|
resp = resp.form.submit()
|
|
assert resp.location.endswith('/manage/invoicing/campaign/%s/#open:pools' % campaign.pk)
|
|
assert mock_generate.call_args_list == [mock.call(campaign=campaign, draft=False)]
|
|
|
|
pool.draft = False
|
|
pool.save()
|
|
app.get('/manage/invoicing/campaign/%s/pool/add/' % campaign.pk, status=404)
|
|
|
|
|
|
def test_detail_pool(app, admin_user):
|
|
campaign = Campaign.objects.create(
|
|
date_start=datetime.date(2022, 9, 1),
|
|
date_end=datetime.date(2022, 10, 1),
|
|
date_issue=datetime.date(2022, 10, 31),
|
|
)
|
|
campaign2 = Campaign.objects.create(
|
|
date_start=datetime.date(2022, 10, 1),
|
|
date_end=datetime.date(2022, 11, 1),
|
|
date_issue=datetime.date(2022, 11, 30),
|
|
)
|
|
pool = Pool.objects.create(
|
|
campaign=campaign,
|
|
draft=True,
|
|
)
|
|
|
|
app = login(app)
|
|
resp = app.get('/manage/invoicing/campaign/%s/pool/%s/' % (campaign.pk, pool.pk))
|
|
assert '/manage/invoicing/campaign/%s/pool/%s/delete/' % (campaign.pk, pool.pk) in resp
|
|
|
|
app.get('/manage/invoicing/campaign/%s/pool/%s/' % (0, pool.pk), status=404)
|
|
app.get('/manage/invoicing/campaign/%s/pool/%s/' % (campaign2.pk, pool.pk), status=404)
|
|
app.get('/manage/invoicing/campaign/%s/pool/%s/' % (campaign.pk, 0), status=404)
|
|
|
|
pool.draft = False
|
|
pool.save()
|
|
resp = app.get('/manage/invoicing/campaign/%s/pool/%s/' % (campaign.pk, pool.pk))
|
|
assert '/manage/invoicing/campaign/%s/pool/%s/delete/' % (campaign.pk, pool.pk) not in resp
|
|
|
|
|
|
def test_delete_pool(app, admin_user):
|
|
campaign = Campaign.objects.create(
|
|
date_start=datetime.date(2022, 9, 1),
|
|
date_end=datetime.date(2022, 10, 1),
|
|
date_issue=datetime.date(2022, 10, 31),
|
|
)
|
|
campaign2 = Campaign.objects.create(
|
|
date_start=datetime.date(2022, 10, 1),
|
|
date_end=datetime.date(2022, 11, 1),
|
|
date_issue=datetime.date(2022, 11, 30),
|
|
)
|
|
pool = Pool.objects.create(
|
|
campaign=campaign,
|
|
draft=True,
|
|
)
|
|
regie = Regie.objects.create(label='Foo')
|
|
invoice = DraftInvoice.objects.create(date_issue=datetime.date.today(), regie=regie, pool=pool)
|
|
DraftInvoiceLine.objects.create(
|
|
invoice=invoice,
|
|
quantity=1,
|
|
unit_amount=1,
|
|
total_amount=1,
|
|
status='success',
|
|
pool=pool,
|
|
)
|
|
|
|
app = login(app)
|
|
resp = app.get('/manage/invoicing/campaign/%s/pool/%s/delete/' % (campaign.pk, pool.pk))
|
|
resp = resp.form.submit()
|
|
assert Pool.objects.count() == 0
|
|
assert resp.location.endswith('/manage/invoicing/campaign/%s/#open:pools' % campaign.pk)
|
|
|
|
pool.draft = True
|
|
pool.save()
|
|
app.get('/manage/invoicing/campaign/%s/pool/%s/delete/' % (0, pool.pk), status=404)
|
|
app.get('/manage/invoicing/campaign/%s/pool/%s/delete/' % (campaign2.pk, pool.pk), status=404)
|
|
app.get('/manage/invoicing/campaign/%s/pool/%s/delete/' % (campaign.pk, 0), status=404)
|
|
|
|
pool.draft = False
|
|
pool.save()
|
|
app.get('/manage/invoicing/campaign/%s/pool/%s/delete/' % (campaign.pk, pool.pk), status=404)
|