]> asedeno.scripts.mit.edu Git - bluechips.git/blob - bluechips/tests/functional/test_transfer.py
Update BlueChips for WebHelpers 1.0 and beyond
[bluechips.git] / bluechips / tests / functional / test_transfer.py
1 from datetime import date
2 from decimal import Decimal
3
4 from webhelpers.pylonslib.secure_form import token_key
5
6 from bluechips.tests import *
7 from bluechips import model
8 from bluechips.model import meta
9
10 class TestTransferController(TestController):
11
12     def test_index(self):
13         response = self.app.get(url_for(controller='transfer'))
14         # Test response...
15         response.mustcontain('Add a New Transfer')
16         form = response.form
17
18         user_rich = meta.Session.query(model.User).\
19                 filter_by(name=u'Rich Scheme').one()
20         user_ben = meta.Session.query(model.User).\
21                 filter_by(name=u'Ben Bitdiddle').one()
22
23         form['debtor_id'] = user_rich.id
24         form['creditor_id'] = user_ben.id
25         form['amount'] = '123.45'
26         # Make sure date is today.
27         today = date.today()
28         assert form['date'].value == today.strftime('%m/%d/%Y')
29         form['description'] = 'A test transfer from Rich to Ben'
30
31         response = form.submit()
32         response = response.follow()
33         response.mustcontain('Transfer', 'created.')
34
35         t = meta.Session.query(model.Transfer).\
36                 order_by(model.Transfer.id.desc()).first()
37         assert t.debtor.name == u'Rich Scheme'
38         assert t.creditor.name == u'Ben Bitdiddle'
39         assert t.amount == 12345
40         assert t.date == today
41         assert t.description == u'A test transfer from Rich to Ben'
42
43     def test_edit_and_delete(self):
44         user_rich = meta.Session.query(model.User).\
45                 filter_by(name=u'Rich Scheme').one()
46         user_ben = meta.Session.query(model.User).\
47                 filter_by(name=u'Ben Bitdiddle').one()
48         t = model.Transfer(user_rich, user_ben, 12345)
49         t.description = u'Test transfer'
50         meta.Session.add(t)
51         meta.Session.commit()
52
53         response = self.app.get(url_for(controller='transfer',
54                                         action='edit',
55                                         id=t.id))
56         response.mustcontain('Edit a Transfer')
57         form = response.form
58
59         assert int(form['debtor_id'].value) == t.debtor_id
60         assert int(form['creditor_id'].value) == t.creditor_id
61         assert Decimal(form['amount'].value) * 100 == t.amount
62         assert form['date'].value == t.date.strftime('%m/%d/%Y')
63         assert form['description'].value == t.description
64
65         form['description'] = u'A new description'
66
67         response = form.submit()
68         response = response.follow()
69         response.mustcontain('Transfer', 'updated.')
70
71         t = meta.Session.query(model.Transfer).\
72                 order_by(model.Transfer.id.desc()).first()
73         assert t.description == u'A new description'
74
75         response = self.app.get(url_for(controller='transfer',
76                                         action='delete',
77                                         id=t.id))
78         response = response.form.submit('delete').follow()
79         response.mustcontain('Transfer', 'deleted')
80
81     def test_edit_nonexistent(self):
82         response = self.app.get(url_for(controller='transfer',
83                                         action='edit',
84                                         id=21424), status=404)
85
86     def test_update_nonexistent(self):
87         response = self.app.get(url_for(controller='transfer',
88                                         action='edit'))
89         params = self.sample_params.copy()
90         params[token_key] = response.form[token_key].value
91         self.app.post(url_for(controller='transfer',
92                               action='update',
93                               id=21424),
94                       params=params,
95                       status=404)
96
97     def test_xsrf_protection(self):
98         self.app.post(url_for(controller='transfer',
99                               action='update'),
100                       params=self.sample_params,
101                       status=403)
102
103
104     def test_update_get_redirects(self):
105         response = self.app.get(url_for(controller='transfer',
106                                         action='update'),
107                                 status=302)
108         assert (dict(response.headers)['location'] ==
109                 url_for(controller='transfer', action='edit', qualified=True))
110
111     def test_delete_nonexistent(self):
112         self.app.get(url_for(controller='transfer',
113                              action='delete',
114                              id=124244),
115                      status=404)
116
117     def test_destroy_nonexistent(self):
118         response = self.app.get(url_for(controller='transfer',
119                                         action='edit'))
120         params = self.sample_params.copy()
121         params[token_key] = response.form[token_key].value
122         self.app.post(url_for(controller='transfer',
123                               action='destroy',
124                               id=124344), 
125                       params=params,
126                       status=404)
127
128     def test_delete_xsrf_protection(self):
129         self.app.post(url_for(controller='transfer',
130                               action='destroy',
131                               id=1),
132                       params={'delete': 'Delete'},
133                       status=403)
134
135     def setUp(self):
136         self.sample_params = {
137             'debtor_id': '1',
138             'creditor_id': '2',
139             'amount': '33.98',
140             'date': '4/1/2007',
141             'description': 'Example transfer params.'}
142
143     def tearDown(self):
144         transfers = meta.Session.query(model.Transfer).all()
145         for t in transfers:
146             meta.Session.delete(t)
147         meta.Session.commit()