]> asedeno.scripts.mit.edu Git - bluechips.git/blobdiff - bluechips/tests/functional/test_spend.py
Fix division of currency
[bluechips.git] / bluechips / tests / functional / test_spend.py
index d0213047bc9a5c4d51285fe1a4d77b9e87357149..b7884c8113ec8bd915d133b36efd4c708cd3d221 100644 (file)
@@ -1,6 +1,8 @@
 from datetime import date
 from formencode import Invalid
 
+from webhelpers.html.secure_form import token_key
+
 from bluechips.tests import *
 
 from bluechips import model
@@ -53,7 +55,7 @@ class TestSpendController(TestController):
         assert shares[4] == Currency('12.34')
 
 
-    def test_edit(self):
+    def test_edit_and_delete(self):
         user = meta.Session.query(model.User).\
                 filter_by(name=u'Charlie Root').one()
         e = model.Expenditure(user, 53812, u'Lemon bundt cake', None)
@@ -84,20 +86,81 @@ class TestSpendController(TestController):
                 order_by(model.Expenditure.id.desc()).first()
         assert e.description == u'Updated bundt cake'
 
+        response = self.app.get(url_for(controller='spend',
+                                        action='delete',
+                                        id=e.id))
+        response = response.form.submit('delete').follow()
+        response.mustcontain('Expenditure', 'deleted')
+
+    def test_delete_nonexistent(self):
+        self.app.get(url_for(controller='spend',
+                             action='delete',
+                             id=124344),
+                     status=404)
+
+    def test_destroy_nonexistent(self):
+        response = self.app.get(url_for(controller='spend',
+                                        action='edit'))
+        params = self.sample_params.copy()
+        params[token_key] = response.form[token_key].value
+        self.app.post(url_for(controller='spend',
+                              action='destroy',
+                              id=124344), 
+                      params=params,
+                      status=404)
+
+    def test_delete_xsrf_protection(self):
+        self.app.post(url_for(controller='spend',
+                              action='destroy',
+                              id=1),
+                      params={'delete': 'Delete'},
+                      status=403)
+
+    def test_edit_zero_value(self):
+        user = meta.Session.query(model.User).\
+                filter_by(name=u'Charlie Root').one()
+        e = model.Expenditure(user, 0, u'A zero value expenditure', None)
+        e.even_split()
+        meta.Session.add(e)
+        meta.Session.commit()
+
+        response = self.app.get(url_for(controller='spend',
+                                        action='edit',
+                                        id=e.id))
+        response.mustcontain('Edit an Expenditure')
+        form = response.form
+
+        assert int(form['spender_id'].value) == user.id
+        assert form['amount'].value == '0.00'
+        assert form['date'].value == date.today().strftime('%m/%d/%Y')
+        assert form['description'].value == u'A zero value expenditure'
+        for ii in range(4):
+            assert form['shares-%d.amount' % ii].value == '0'
+
     def test_edit_nonexistent(self):
         response = self.app.get(url_for(controller='spend',
                                         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)
+        response = self.app.get(url_for(controller='spend',
+                                        action='edit'))
+        params = self.sample_params.copy()
+        params[token_key] = response.form[token_key].value
+        self.app.post(url_for(controller='spend',
+                              action='update',
+                              id=14234), 
+                      params=params,
+                      status=404)
+
+    def test_xsrf_protection(self):
+        self.app.post(url_for(controller='spend',
+                              action='update'),
+                      params=self.sample_params,
+                      status=403)
 
     def test_all_zero_shares_fails(self):
-        params = self.sample_post.copy()
+        params = self.sample_params.copy()
         for ii in range(4):
             params['shares-%d.amount' % ii] = '0'
         v = ExpenditureSchema()
@@ -107,7 +170,7 @@ class TestSpendController(TestController):
             pass
 
     def setUp(self):
-        self.sample_post = {
+        self.sample_params = {
             'spender_id': '1',
             'amount': '44.12',
             'date': '10/5/2008',