From 1456c7ccd83b055606d31173c1203310319557bc Mon Sep 17 00:00:00 2001 From: Scott Torborg Date: Sat, 7 Nov 2009 15:24:08 -1000 Subject: [PATCH] cleaning up code and improving test coverage --- bluechips/controllers/spend.py | 21 ++++---- bluechips/lib/app_globals.py | 2 +- bluechips/tests/functional/test_spend.py | 53 +++++++++++++++++++-- bluechips/tests/functional/test_transfer.py | 22 +++++++++ 4 files changed, 81 insertions(+), 17 deletions(-) diff --git a/bluechips/controllers/spend.py b/bluechips/controllers/spend.py index 8d2dc4a..aceb6ad 100644 --- a/bluechips/controllers/spend.py +++ b/bluechips/controllers/spend.py @@ -65,10 +65,9 @@ class SpendController(BaseController): c.values = {} for ii, user_row in enumerate(c.users): user_id, user = user_row + val = 0 if user.resident: val = Decimal(100) / Decimal(num_residents) - else: - val = 0 c.values['shares-%d.amount' % ii] = val else: c.title = 'Edit an Expenditure' @@ -78,17 +77,15 @@ class SpendController(BaseController): c.values = {} for ii, user_row in enumerate(c.users): user_id, user = user_row - try: - share = [s.share for s in c.expenditure.splits - if s.user == user][0] - if c.expenditure.amount == 0: - percent = 0 - else: - percent = (Decimal(100) * Decimal(int(share)) / - Decimal(int(c.expenditure.amount))).\ - quantize(Decimal("0.001")) - except IndexError: + shares_by_user = dict(((sp.user, sp.share) for sp + in c.expenditure.splits)) + share = shares_by_user.get(user, 0) + if c.expenditure.amount == 0: percent = 0 + else: + percent = (Decimal(100) * Decimal(int(share)) / + Decimal(int(c.expenditure.amount))).\ + quantize(Decimal("0.001")) c.values['shares-%d.amount' % ii] = percent return render('/spend/index.mako') diff --git a/bluechips/lib/app_globals.py b/bluechips/lib/app_globals.py index 016a9e1..edf6aa5 100644 --- a/bluechips/lib/app_globals.py +++ b/bluechips/lib/app_globals.py @@ -33,7 +33,7 @@ class Globals(object): log.info("From: %s\nTo: %s\nSubject: %s\n\n%s", msg.From, msg.To, msg.Subject, msg.Body) else: - self.mailer.send(msg) + self.mailer.send(msg) # pragma: nocover def handle_notification(self, users, subject, body): "Send a notification email." diff --git a/bluechips/tests/functional/test_spend.py b/bluechips/tests/functional/test_spend.py index 9a7aff0..d021304 100644 --- a/bluechips/tests/functional/test_spend.py +++ b/bluechips/tests/functional/test_spend.py @@ -1,8 +1,13 @@ from datetime import date +from formencode import Invalid + from bluechips.tests import * from bluechips import model from bluechips.model import meta +from bluechips.model.types import Currency + +from bluechips.controllers.spend import ExpenditureSchema class TestSpendController(TestController): @@ -16,15 +21,17 @@ class TestSpendController(TestController): filter_by(name=u'Charlie Root').one() form['spender_id'] = user.id - form['amount'] = '66.78' + form['amount'] = '74.04' # Make sure date is today. today = date.today() assert form['date'].value == today.strftime('%m/%d/%Y') form['description'] = 'A test expenditure' form['shares-0.amount'] = '1' form['shares-1.amount'] = '2' - form['shares-2.amount'] = '3' - form['shares-3.amount'] = '4' + form['shares-2.amount'] = '2' + form['shares-3.amount'] = '1' + for ii in range(4): + assert int(form['shares-%d.user_id' % ii].value) == ii + 1 response = form.submit() response = response.follow() @@ -33,11 +40,17 @@ class TestSpendController(TestController): e = meta.Session.query(model.Expenditure).\ order_by(model.Expenditure.id.desc()).first() assert e.spender.name == u'Charlie Root' - assert e.amount == 6678 + assert e.amount == 7404 assert e.date == today assert e.description == u'A test expenditure' # Test the split. + shares = dict(((sp.user_id, sp.share) + for sp in e.splits)) + assert shares[1] == Currency('12.34') + assert shares[2] == Currency('24.68') + assert shares[3] == Currency('24.68') + assert shares[4] == Currency('12.34') def test_edit(self): @@ -76,6 +89,38 @@ class TestSpendController(TestController): action='edit', id=124234), status=404) + def test_update_nonexistent(self): + response = self.app.post(url_for(controller='spend', + action='update', + id=14234), + params=self.sample_post, + status=404) + + def test_all_zero_shares_fails(self): + params = self.sample_post.copy() + for ii in range(4): + params['shares-%d.amount' % ii] = '0' + v = ExpenditureSchema() + try: + v.to_python(params) + except Invalid: + pass + + def setUp(self): + self.sample_post = { + 'spender_id': '1', + 'amount': '44.12', + 'date': '10/5/2008', + 'description': 'Example expenditure post data.', + 'shares-0.user_id': '1', + 'shares-0.amount': '1', + 'shares-1.user_id': '2', + 'shares-1.amount': '1', + 'shares-2.user_id': '3', + 'shares-2.amount': '1', + 'shares-3.user_id': '4', + 'shares-3.amount': '1'} + def tearDown(self): expenditures = meta.Session.query(model.Expenditure).all() for e in expenditures: diff --git a/bluechips/tests/functional/test_transfer.py b/bluechips/tests/functional/test_transfer.py index b38f71c..9e01e6a 100644 --- a/bluechips/tests/functional/test_transfer.py +++ b/bluechips/tests/functional/test_transfer.py @@ -75,6 +75,28 @@ class TestTransferController(TestController): action='edit', id=21424), status=404) + def test_update_nonexistent(self): + response = self.app.post(url_for(controller='transfer', + action='update', + id=21424), + params=self.sample_params, + status=404) + + def test_update_get_redirects(self): + response = self.app.get(url_for(controller='transfer', + action='update'), + status=302) + assert (dict(response.headers)['location'] == + url_for(controller='transfer', action='edit', qualified=True)) + + def setUp(self): + self.sample_params = { + 'debtor_id': '1', + 'creditor_id': '2', + 'amount': '33.98', + 'date': '4/1/2007', + 'description': 'Example transfer params.'} + def tearDown(self): transfers = meta.Session.query(model.Transfer).all() for t in transfers: -- 2.45.2