]> asedeno.scripts.mit.edu Git - bluechips.git/blob - bluechips/tests/functional/test_transfer.py
cleaning up code and improving test coverage
[bluechips.git] / bluechips / tests / functional / test_transfer.py
1 from datetime import date
2 from decimal import Decimal
3 from bluechips.tests import *
4
5 from bluechips import model
6 from bluechips.model import meta
7
8 class TestTransferController(TestController):
9
10     def test_index(self):
11         response = self.app.get(url_for(controller='transfer'))
12         # Test response...
13         response.mustcontain('Add a New Transfer')
14         form = response.form
15
16         user_rich = meta.Session.query(model.User).\
17                 filter_by(name=u'Rich Scheme').one()
18         user_ben = meta.Session.query(model.User).\
19                 filter_by(name=u'Ben Bitdiddle').one()
20
21         form['debtor_id'] = user_rich.id
22         form['creditor_id'] = user_ben.id
23         form['amount'] = '123.45'
24         # Make sure date is today.
25         today = date.today()
26         assert form['date'].value == today.strftime('%m/%d/%Y')
27         form['description'] = 'A test transfer from Rich to Ben'
28
29         response = form.submit()
30         response = response.follow()
31         response.mustcontain('Transfer', 'created.')
32
33         t = meta.Session.query(model.Transfer).\
34                 order_by(model.Transfer.id.desc()).first()
35         assert t.debtor.name == u'Rich Scheme'
36         assert t.creditor.name == u'Ben Bitdiddle'
37         assert t.amount == 12345
38         assert t.date == today
39         assert t.description == u'A test transfer from Rich to Ben'
40
41     def test_edit(self):
42         user_rich = meta.Session.query(model.User).\
43                 filter_by(name=u'Rich Scheme').one()
44         user_ben = meta.Session.query(model.User).\
45                 filter_by(name=u'Ben Bitdiddle').one()
46         t = model.Transfer(user_rich, user_ben, 12345)
47         t.description = u'Test transfer'
48         meta.Session.add(t)
49         meta.Session.commit()
50
51         response = self.app.get(url_for(controller='transfer',
52                                         action='edit',
53                                         id=t.id))
54         response.mustcontain('Edit a Transfer')
55         form = response.form
56
57         assert int(form['debtor_id'].value) == t.debtor_id
58         assert int(form['creditor_id'].value) == t.creditor_id
59         assert Decimal(form['amount'].value) * 100 == t.amount
60         assert form['date'].value == t.date.strftime('%m/%d/%Y')
61         assert form['description'].value == t.description
62
63         form['description'] = u'A new description'
64
65         response = form.submit()
66         response = response.follow()
67         response.mustcontain('Transfer', 'updated.')
68
69         t = meta.Session.query(model.Transfer).\
70                 order_by(model.Transfer.id.desc()).first()
71         assert t.description == u'A new description'
72
73     def test_edit_nonexistent(self):
74         response = self.app.get(url_for(controller='transfer',
75                                         action='edit',
76                                         id=21424), status=404)
77
78     def test_update_nonexistent(self):
79         response = self.app.post(url_for(controller='transfer',
80                                          action='update',
81                                          id=21424),
82                                  params=self.sample_params,
83                                  status=404)
84
85     def test_update_get_redirects(self):
86         response = self.app.get(url_for(controller='transfer',
87                                         action='update'),
88                                 status=302)
89         assert (dict(response.headers)['location'] ==
90                 url_for(controller='transfer', action='edit', qualified=True))
91
92     def setUp(self):
93         self.sample_params = {
94             'debtor_id': '1',
95             'creditor_id': '2',
96             'amount': '33.98',
97             'date': '4/1/2007',
98             'description': 'Example transfer params.'}
99
100     def tearDown(self):
101         transfers = meta.Session.query(model.Transfer).all()
102         for t in transfers:
103             meta.Session.delete(t)
104         meta.Session.commit()