1 from datetime import date
2 from decimal import Decimal
4 from webhelpers.html.secure_form import token_key
6 from bluechips.tests import *
7 from bluechips import model
8 from bluechips.model import meta
10 class TestTransferController(TestController):
13 response = self.app.get(url_for(controller='transfer'))
15 response.mustcontain('Add a New Transfer')
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()
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.
28 assert form['date'].value == today.strftime('%m/%d/%Y')
29 form['description'] = 'A test transfer from Rich to Ben'
31 response = form.submit()
32 response = response.follow()
33 response.mustcontain('Transfer', 'created.')
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'
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'
53 response = self.app.get(url_for(controller='transfer',
56 response.mustcontain('Edit a Transfer')
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
65 form['description'] = u'A new description'
67 response = form.submit()
68 response = response.follow()
69 response.mustcontain('Transfer', 'updated.')
71 t = meta.Session.query(model.Transfer).\
72 order_by(model.Transfer.id.desc()).first()
73 assert t.description == u'A new description'
75 response = self.app.get(url_for(controller='transfer',
78 response = response.form.submit('delete').follow()
79 response.mustcontain('Transfer', 'deleted')
81 def test_edit_nonexistent(self):
82 response = self.app.get(url_for(controller='transfer',
84 id=21424), status=404)
86 def test_update_nonexistent(self):
87 response = self.app.get(url_for(controller='transfer',
89 params = self.sample_params.copy()
90 params[token_key] = response.form[token_key].value
91 self.app.post(url_for(controller='transfer',
97 def test_xsrf_protection(self):
98 self.app.post(url_for(controller='transfer',
100 params=self.sample_params,
104 def test_update_get_redirects(self):
105 response = self.app.get(url_for(controller='transfer',
108 assert (dict(response.headers)['location'] ==
109 url_for(controller='transfer', action='edit', qualified=True))
111 def test_delete_nonexistent(self):
112 self.app.get(url_for(controller='transfer',
117 def test_destroy_nonexistent(self):
118 response = self.app.get(url_for(controller='transfer',
120 params = self.sample_params.copy()
121 params[token_key] = response.form[token_key].value
122 self.app.post(url_for(controller='transfer',
128 def test_delete_xsrf_protection(self):
129 self.app.post(url_for(controller='transfer',
132 params={'delete': 'Delete'},
136 self.sample_params = {
141 'description': 'Example transfer params.'}
144 transfers = meta.Session.query(model.Transfer).all()
146 meta.Session.delete(t)
147 meta.Session.commit()