Skip to content

Commit a951978

Browse files
committed
Tests Update
PO Configure Bugfix
1 parent e46c0e9 commit a951978

File tree

9 files changed

+63
-66
lines changed

9 files changed

+63
-66
lines changed

django_ledger/models/purchase_order.py

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -311,13 +311,18 @@ def configure(self,
311311
if self.can_generate_po_number():
312312
self.generate_po_number(commit=commit)
313313

314-
if not po_title and not self.po_title and self.po_number:
315-
self.po_title = f'PO Number {self.po_number}'
316-
else:
317-
self.po_title = po_title
314+
if not self.po_title:
315+
if all([
316+
po_title is None,
317+
self.po_title is None or not len(self.po_title),
318+
self.po_number is not None
319+
]):
320+
self.po_title = f'PO Number {self.po_number}'
321+
else:
322+
self.po_title = po_title
318323

319-
self.clean()
320324
self.clean_fields()
325+
self.clean()
321326
if commit:
322327
self.save()
323328
return self

django_ledger/settings.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,6 @@
4141
DJANGO_LEDGER_FEEDBACK_EMAIL_LIST = getattr(settings, 'DJANGO_LEDGER_FEEDBACK_EMAIL_LIST', [])
4242
DJANGO_LEDGER_FEEDBACK_FROM_EMAIL = getattr(settings, 'DJANGO_LEDGER_FEEDBACK_FROM_EMAIL', None)
4343
DJANGO_LEDGER_VALIDATE_SCHEMAS_AT_RUNTIME = getattr(settings, 'DJANGO_LEDGER_VALIDATE_SCHEMAS_AT_RUNTIME', False)
44-
DJANGO_LEDGER_LOGIN_URL = getattr(settings, 'DJANGO_LEDGER_LOGIN_URL', settings.LOGIN_URL)
4544

4645
DJANGO_LEDGER_TRANSACTION_MAX_TOLERANCE = getattr(settings,
4746
'DJANGO_LEDGER_TRANSACTION_MAX_TOLERANCE',

django_ledger/templatetags/django_ledger.py

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
from django_ledger import __version__
1919
from django_ledger.forms.app_filters import EntityFilterForm, ActivityFilterForm
2020
from django_ledger.forms.feedback import BugReportForm, RequestNewFeatureForm
21+
from django_ledger.io import CREDIT, DEBIT
2122
from django_ledger.io.io_mixin import validate_activity
2223
from django_ledger.models import TransactionModel, BillModel, InvoiceModel, EntityUnitModel, ItemTransactionModel
2324
from django_ledger.settings import (
@@ -240,9 +241,9 @@ def bill_txs_table(context, bill_model: BillModel):
240241
bill_model=bill_model.uuid,
241242
user_model=context['request'].user,
242243
entity_slug=context['view'].kwargs['entity_slug']
243-
).select_related('journal_entry').order_by('journal_entry__timestamp')
244-
total_credits = sum(tx.amount for tx in txs_queryset if tx.tx_type == 'credit')
245-
total_debits = sum(tx.amount for tx in txs_queryset if tx.tx_type == 'debit')
244+
).select_related('journal_entry', 'journal_entry__entity_unit', 'account').order_by('-journal_entry__timestamp')
245+
total_credits = sum(tx.amount for tx in txs_queryset if tx.tx_type == CREDIT)
246+
total_debits = sum(tx.amount for tx in txs_queryset if tx.tx_type == DEBIT)
246247
return {
247248
'style': 'detail',
248249
'txs': txs_queryset,
@@ -257,9 +258,9 @@ def invoice_txs_table(context, invoice_model: InvoiceModel):
257258
invoice_model=invoice_model,
258259
user_model=context['request'].user,
259260
entity_slug=context['view'].kwargs['entity_slug']
260-
).select_related('journal_entry').order_by('-journal_entry__timestamp')
261-
total_credits = sum(tx.amount for tx in txs_queryset if tx.tx_type == 'credit')
262-
total_debits = sum(tx.amount for tx in txs_queryset if tx.tx_type == 'debit')
261+
).select_related('journal_entry', 'journal_entry__entity_unit', 'account').order_by('-journal_entry__timestamp')
262+
total_credits = sum(tx.amount for tx in txs_queryset if tx.tx_type == CREDIT)
263+
total_debits = sum(tx.amount for tx in txs_queryset if tx.tx_type == DEBIT)
263264
return {
264265
'style': 'detail',
265266
'txs': txs_queryset,

django_ledger/tests/base.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from datetime import datetime, date
1+
from datetime import date, timedelta
22
from decimal import Decimal
33
from logging import getLogger, DEBUG
44
from random import randint, choice
@@ -38,7 +38,7 @@ def setUpTestData(cls):
3838
cls.USERNAME: str = 'testuser'
3939
cls.PASSWORD: str = 'NeverUseThisPassword12345'
4040
cls.USER_EMAIL: str = '[email protected]'
41-
cls.N: int = 3
41+
cls.N: int = 2
4242

4343
cls.DAYS_FWD: int = randint(180, 180 * 3)
4444
cls.TZ = get_default_timezone()
@@ -149,3 +149,6 @@ def populate_entity_models(cls):
149149
cls.logger.info(f'Populating Entity {entity_model.name}...')
150150
data_generator.populate_entity()
151151
cls.ENTITY_MODEL_QUERYSET = entities_qs
152+
153+
def get_random_draft_date(self):
154+
return self.START_DATE + timedelta(days=randint(0, 365))

django_ledger/tests/test_bill.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,7 @@
1010

1111
from django_ledger.io.roles import ASSET_CA_CASH, ASSET_CA_PREPAID, LIABILITY_CL_DEFERRED_REVENUE, \
1212
LIABILITY_CL_ACC_PAYABLE
13-
from django_ledger.models import EntityModel, BillModel, VendorModel, AccountModel
14-
from django_ledger.settings import DJANGO_LEDGER_LOGIN_URL
13+
from django_ledger.models import EntityModel, BillModel, VendorModel
1514
from django_ledger.tests.base import DjangoLedgerBaseTest
1615
from django_ledger.urls.bill import urlpatterns as bill_urls
1716

django_ledger/tests/test_entity.py

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,12 @@
22
from random import choice
33
from urllib.parse import urlparse
44

5+
from django.conf import settings
56
from django.contrib.auth import get_user_model
67
from django.urls import reverse
78
from django.utils.timezone import localdate
89

910
from django_ledger.models import EntityModel
10-
from django_ledger.settings import DJANGO_LEDGER_LOGIN_URL
1111
from django_ledger.tests.base import DjangoLedgerBaseTest
1212
from django_ledger.urls.entity import urlpatterns as entity_urls
1313

@@ -51,12 +51,8 @@ def test_protected_views(self, test_date: date = None):
5151
response = self.CLIENT.get(url, follow=False)
5252
redirect_url = urlparse(response.url)
5353
redirect_path = redirect_url.path
54-
login_path = DJANGO_LEDGER_LOGIN_URL
55-
56-
self.assertEqual(response.status_code, 302,
57-
msg='EntityModelListView is not protected.')
58-
self.assertEqual(redirect_path, login_path,
59-
msg='EntityModelListView not redirecting to correct auth URL.')
54+
self.assertEqual(response.status_code, 302, msg=f'{path} is not protected.')
55+
self.assertEqual(redirect_path, settings.LOGIN_URL, msg=f'{path} not redirecting to correct auth URL.')
6056

6157
def test_entity_create(self):
6258
"""
@@ -170,7 +166,7 @@ def test_entity_update(self):
170166
})
171167
response = self.CLIENT.get(entity_update_url)
172168

173-
with self.assertNumQueries(4): # previously 5
169+
with self.assertNumQueries(4): # previously 5
174170
ent_data = response.context['form'].initial
175171
ent_data['name'] = 'New Cool Name LLC'
176172
ent_data = {k: v for k, v in ent_data.items() if v}
@@ -199,7 +195,7 @@ def test_entity_detail(self):
199195
})
200196
response = self.CLIENT.get(entity_detail_url)
201197

202-
with self.assertNumQueries(7): # previously 10
198+
with self.assertNumQueries(7): # previously 10
203199
local_dt = localdate()
204200
entity_month_detail_url = reverse('django_ledger:entity-dashboard-month',
205201
kwargs={

django_ledger/tests/test_purchase_order.py

Lines changed: 27 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
1+
from datetime import date, datetime
12
from random import choice, randint
3+
from typing import Union, Optional
24
from urllib.parse import urlparse
35
from uuid import uuid4
46

57
from django.contrib.auth import get_user_model
68
from django.urls import reverse
79

810
from django_ledger.models import EntityModel, PurchaseOrderModel
9-
from django_ledger.settings import DJANGO_LEDGER_LOGIN_URL
1011
from django_ledger.tests.base import DjangoLedgerBaseTest
1112
from django_ledger.urls.purchase_order import urlpatterns as po_urls
1213

@@ -20,11 +21,12 @@ def setUp(self) -> None:
2021
p.name: set(p.pattern.converters.keys()) for p in po_urls
2122
}
2223

23-
def create_purchase_order(self, entity_model: EntityModel) -> PurchaseOrderModel:
24-
po_title = f'Purchase Order General-{randint(1000, 9999)}'
25-
26-
po_model = PurchaseOrderModel(po_title=po_title)
24+
def create_purchase_order(self,
25+
entity_model: EntityModel,
26+
draft_date: Optional[Union[date, datetime]] = None) -> PurchaseOrderModel:
27+
po_model = PurchaseOrderModel()
2728
po_model = po_model.configure(entity_slug=entity_model,
29+
draft_date=draft_date,
2830
user_model=self.user_model,
2931
commit=True)
3032
return po_model
@@ -40,7 +42,10 @@ def test_protected_views(self):
4042
self.logout_client()
4143

4244
entity_model: EntityModel = choice(self.ENTITY_MODEL_QUERYSET)
43-
po_model = self.create_purchase_order(entity_model)
45+
po_model = self.create_purchase_order(
46+
entity_model=entity_model,
47+
draft_date=self.get_random_draft_date()
48+
)
4449

4550
self.assertEqual(len(self.URL_PATTERNS), 15)
4651
for path, kwargs in self.URL_PATTERNS.items():
@@ -51,21 +56,15 @@ def test_protected_views(self):
5156
if 'year' in kwargs:
5257
url_kwargs['year'] = po_model.date_draft.year
5358
if 'month' in kwargs:
54-
url_kwargs['month'] = po_model.date_draft.month
59+
url_kwargs['month'] = po_model.date_draft.month
5560
if 'ce_pk' in kwargs:
5661
url_kwargs['ce_pk'] = uuid4()
5762
if 'po_pk' in kwargs:
5863
url_kwargs['po_pk'] = uuid4()
5964

6065
url = reverse(f'django_ledger:{path}', kwargs=url_kwargs)
6166
redirect_response = self.CLIENT.get(url, follow=False)
62-
redirect_url = urlparse(redirect_response.url)
63-
redirect_path = redirect_url.path
64-
login_path = DJANGO_LEDGER_LOGIN_URL
65-
6667
self.assertEqual(redirect_response.status_code, 302, msg=f'{path} view is not protected.')
67-
self.assertEqual(redirect_path, login_path, msg=f'{path} view is not redirecting to correct auth URL')
68-
6968

7069
def test_purchase_order_list(self):
7170
"""
@@ -75,14 +74,14 @@ def test_purchase_order_list(self):
7574
entity_model: EntityModel = choice(self.ENTITY_MODEL_QUERYSET)
7675
po_list_url = reverse('django_ledger:po-list', kwargs={'entity_slug': entity_model.slug})
7776

78-
with self.assertNumQueries(6): # previously 5
77+
with self.assertNumQueries(6): # previously 5
7978
response = self.CLIENT.get(po_list_url)
8079
self.assertEqual(response.status_code, 200, msg="Fail to GET Purchase Order list page")
8180

8281
po_model_qs = response.context['po_list']
8382

8483
for po_model in po_model_qs:
85-
po_detail_url = reverse('django_ledger:po-detail',
84+
po_detail_url = reverse('django_ledger:po-detail',
8685
kwargs={
8786
'entity_slug': entity_model.slug,
8887
'po_pk': po_model.uuid
@@ -96,7 +95,6 @@ def test_purchase_order_list(self):
9695
# contains po-detail and po-delete urls
9796
self.assertContains(response, po_detail_url)
9897
self.assertContains(response, po_delete_url)
99-
10098

10199
def test_purchase_order_create(self):
102100
"""
@@ -126,7 +124,6 @@ def test_purchase_order_create(self):
126124
response = self.CLIENT.get(redirect_response.url)
127125
self.assertContains(response, po_title)
128126

129-
130127
def test_purchase_order_detail(self):
131128
"""
132129
Check elements on PO detail page.
@@ -139,17 +136,17 @@ def test_purchase_order_detail(self):
139136
# check links, do it on every test PO
140137
for po_model in po_model_qs:
141138
po_detail_url = reverse('django_ledger:po-detail', kwargs={
142-
'entity_slug': entity_model.slug,
143-
'po_pk': po_model.uuid
144-
})
139+
'entity_slug': entity_model.slug,
140+
'po_pk': po_model.uuid
141+
})
145142
po_update_url = reverse('django_ledger:po-update', kwargs={
146-
'entity_slug': entity_model.slug,
147-
'po_pk': po_model.uuid
148-
})
143+
'entity_slug': entity_model.slug,
144+
'po_pk': po_model.uuid
145+
})
149146
po_delete_url = reverse('django_ledger:po-delete', kwargs={
150-
'entity_slug': entity_model.slug,
151-
'po_pk': po_model.uuid
152-
})
147+
'entity_slug': entity_model.slug,
148+
'po_pk': po_model.uuid
149+
})
153150
status = po_model.po_status
154151

155152
with self.assertNumQueries(5):
@@ -163,15 +160,15 @@ def test_purchase_order_detail(self):
163160

164161
if status == po_model.PO_STATUS_DRAFT:
165162
self.assertContains(response, po_model.get_mark_as_review_html_id())
166-
#self.assertContains(response, po_delete_url)
163+
# self.assertContains(response, po_delete_url)
167164
self.assertContains(response, po_model.get_mark_as_canceled_html_id())
168165

169166
elif status == po_model.PO_STATUS_REVIEW:
170167
self.assertContains(response, po_model.get_mark_as_draft_html_id())
171168
self.assertContains(response, po_model.get_mark_as_approved_html_id())
172-
#self.assertContains(response, po_delete_url)
169+
# self.assertContains(response, po_delete_url)
173170
self.assertContains(response, po_model.get_mark_as_canceled_html_id())
174-
171+
175172
elif status == po_model.PO_STATUS_APPROVED:
176173
self.assertContains(response, po_model.get_mark_as_fulfilled_html_id())
177174
self.assertContains(response, po_model.get_mark_as_void_html_id())
@@ -184,4 +181,4 @@ def test_purchase_order_detail(self):
184181
# response = self.CLIENT.get(po_update_url)
185182
# self.assertEqual(response.status_code, 200, msg=f"Error browsing PO {po_model.uuid} update page.")
186183

187-
# after successful update, redirect to detail page
184+
# after successful update, redirect to detail page

django_ledger/views/entity.py

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -133,10 +133,7 @@ def get_context_data(self, *, object_list=None, **kwargs):
133133
def get_success_url(self):
134134
return reverse('django_ledger:home')
135135

136-
def post(self, request, *args, **kwargs):
137-
return self.delete(request, *args, **kwargs)
138-
139-
def delete(self, request, *args, **kwargs):
136+
def form_valid(self, form):
140137
entity_model: EntityModel = self.get_object()
141138
entity_model.default_coa = None
142139
entity_model.save(update_fields=['default_coa'])
@@ -151,7 +148,7 @@ def delete(self, request, *args, **kwargs):
151148
entity_slug=self.kwargs['entity_slug']
152149
).delete()
153150

154-
return super().delete(request, *args, **kwargs)
151+
return super().form_valid(form=form)
155152

156153

157154
# DASHBOARD VIEWS START ----

django_ledger/views/mixins.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -360,12 +360,12 @@ def get_io_digest(self, context, from_date=None, to_date=None, **kwargs):
360360

361361
if self.IO_DIGEST:
362362
txs_queryset, digest = entity_model.digest(user_model=self.request.user,
363-
to_date=to_date,
364-
unit_slug=unit_slug,
365-
by_period=True if by_period else False,
366-
process_ratios=True,
367-
process_roles=True,
368-
process_groups=True)
363+
to_date=to_date,
364+
unit_slug=unit_slug,
365+
by_period=True if by_period else False,
366+
process_ratios=True,
367+
process_roles=True,
368+
process_groups=True)
369369

370370
context.update(digest)
371371

0 commit comments

Comments
 (0)