def test_custom_per_project_upper_limit(self): """Error if trying to donate more than a project needs""" data = {'payment_amount': '50.00'} account = Account(goal=8000, current=3001) form = DonationAmountForm(data=data, account=account) self.assertFalse(form.is_valid()) errors = form.errors.as_data() self.assertEqual('max_value', errors['payment_amount'][0].code) self.assertTrue('$49.99' in errors['payment_amount'][0].message) account.current = 3000 form = DonationAmountForm(data=data, account=account) self.assertTrue(form.is_valid())
def test_custom_per_project_upper_limit(self): """Error if trying to donate more than a project needs""" data = {'payment_amount': '50.00'} account = Account(goal=8000, current=3001) form = DonationAmountForm(data=data, account=account) self.assertFalse(form.is_valid()) errors = form.errors.as_data() self.assertEqual('max_value', errors['payment_amount'][0].code) self.assertTrue('$49.99' in errors['payment_amount'][0].message) account.current = 3000 form = DonationAmountForm(data=data, account=account) self.assertTrue(form.is_valid())
def test_serialize_account(self): account = Account() project = Project(account=account) result = api._serialize_account(project) self.assertEqual(result['goal'], None) self.assertEqual(result['community_contribution'], None) self.assertEqual(result['total_donated'], 0) self.assertEqual(result['total_raised'], 0) self.assertEqual(result['total_cost'], 0) self.assertEqual(result['percent_raised'], 0) self.assertEqual(result['percent_community'], 0) self.assertEqual(result['remaining'], 0) self.assertEqual(result['funded'], False) account.goal = 2400 account.community_contribution = 600 account.current = 900 result = api._serialize_account(project) self.assertEqual(result['goal'], 2400) self.assertEqual(result['community_contribution'], 600) self.assertEqual(result['total_donated'], 900) self.assertEqual(result['total_raised'], 1500) self.assertEqual(result['total_cost'], 3000) self.assertEqual(result['percent_raised'], 50) self.assertEqual(result['percent_community'], 20) self.assertEqual(result['remaining'], 1500) self.assertEqual(result['funded'], False) account.current = 2400 result = api._serialize_account(project) self.assertEqual(result['total_donated'], 2400) self.assertEqual(result['total_raised'], 3000) self.assertEqual(result['percent_raised'], 100) self.assertEqual(result['remaining'], 0) self.assertEqual(result['funded'], True)
def test_amount_errors(self): pd = api.ProjectDonation() host = 'example.com' account = Account(goal=200, current=0) # no payment amount data = {} result = pd.errors_or_paygov(account, data, host) self.assertEqual(result.status_code, 400) self.assertTrue('amount' in result.content.decode('utf-8')) # low payment amount data['payment_amount'] = '0.99' result = pd.errors_or_paygov(account, data, host) self.assertEqual(result.status_code, 400) self.assertTrue('amount' in result.content.decode('utf-8')) # high payment amount data['payment_amount'] = '10000' result = pd.errors_or_paygov(account, data, host) self.assertEqual(result.status_code, 400) self.assertTrue('amount' in result.content.decode('utf-8')) # too much for project data['payment_amount'] = '3' result = pd.errors_or_paygov(account, data, host) self.assertEqual(result.status_code, 400) self.assertTrue('amount' in result.content.decode('utf-8')) # passes the amount test but not the donor form data['payment_amount'] = '2' result = pd.errors_or_paygov(account, data, host) self.assertEqual(result.status_code, 400) self.assertTrue('amount' not in result.content.decode('utf-8')) # account is full account.current = 200 result = pd.errors_or_paygov(account, data, host) self.assertEqual(result.status_code, 400) self.assertTrue('amount' in result.content.decode('utf-8'))