class TestBillingCharges(Harness): BALANCED_ACCOUNT_URI = u'/v1/marketplaces/M123/accounts/A123' BALANCED_TOKEN = u'/v1/marketplaces/M123/accounts/A123/cards/C123' STRIPE_CUSTOMER_ID = u'cus_deadbeef' def setUp(self): super(TestBillingCharges, self).setUp() self.payday = Payday(self.postgres) self.alice = self.make_participant('alice') def test_mark_missing_funding(self): self.payday.start() before = PaydayModel.query.first().attrs_dict() missing_count = before['ncc_missing'] self.payday.mark_missing_funding() after = PaydayModel.query.first().attrs_dict() self.assertEqual(after['ncc_missing'], missing_count + 1) def test_mark_charge_failed(self): self.payday.start() before = PaydayModel.query.first().attrs_dict() fail_count = before['ncc_failing'] with self.postgres.get_connection() as conn: cur = conn.cursor() self.payday.mark_charge_failed(cur) conn.commit() after = PaydayModel.query.first().attrs_dict() self.assertEqual(after['ncc_failing'], fail_count + 1) def test_mark_charge_success(self): self.payday.start() charge_amount, fee = 4, 2 with self.postgres.get_connection() as conn: cur = conn.cursor() self.payday.mark_charge_success(cur, charge_amount, fee) conn.commit() # verify paydays actual = PaydayModel.query.first().attrs_dict() self.assertEqual(actual['ncharges'], 1) @mock.patch('stripe.Charge') def test_charge_on_stripe(self, ba): amount_to_charge = Decimal('10.00') # $10.00 USD expected_fee = Decimal('0.61') charge_amount, fee, msg = self.payday.charge_on_stripe( self.alice.username, self.STRIPE_CUSTOMER_ID, amount_to_charge) assert_equals(charge_amount, amount_to_charge + fee) assert_equals(fee, expected_fee) self.assertTrue(ba.find.called_with(self.STRIPE_CUSTOMER_ID)) customer = ba.find.return_value self.assertTrue( customer.debit.called_with( int(charge_amount * 100) , self.alice.username ) ) @mock.patch('balanced.Account') def test_charge_on_balanced(self, ba): amount_to_charge = Decimal('10.00') # $10.00 USD expected_fee = Decimal('0.61') charge_amount, fee, msg = self.payday.charge_on_balanced( self.alice.username, self.BALANCED_ACCOUNT_URI, amount_to_charge) self.assertEqual(charge_amount, amount_to_charge + fee) self.assertEqual(fee, expected_fee) self.assertTrue(ba.find.called_with(self.BALANCED_ACCOUNT_URI)) customer = ba.find.return_value self.assertTrue( customer.debit.called_with( int(charge_amount * 100) , self.alice.username ) ) @mock.patch('balanced.Account') def test_charge_on_balanced_small_amount(self, ba): amount_to_charge = Decimal('0.06') # $0.06 USD expected_fee = Decimal('0.59') expected_amount = Decimal('10.00') charge_amount, fee, msg = \ self.payday.charge_on_balanced(self.alice.username, self.BALANCED_ACCOUNT_URI, amount_to_charge) assert_equals(charge_amount, expected_amount) assert_equals(fee, expected_fee) customer = ba.find.return_value self.assertTrue( customer.debit.called_with( int(charge_amount * 100) , self.alice.username ) ) @mock.patch('balanced.Account') def test_charge_on_balanced_failure(self, ba): amount_to_charge = Decimal('0.06') # $0.06 USD error_message = 'Woah, crazy' ba.find.side_effect = balanced.exc.HTTPError(error_message) charge_amount, fee, msg = self.payday.charge_on_balanced( self.alice.username, self.BALANCED_ACCOUNT_URI, amount_to_charge) assert_equals(msg, error_message)
class TestBillingCharges(TestPaydayBase): BALANCED_ACCOUNT_URI = u'/v1/marketplaces/M123/accounts/A123' BALANCED_TOKEN = u'/v1/marketplaces/M123/accounts/A123/cards/C123' STRIPE_CUSTOMER_ID = u'cus_deadbeef' def setUp(self): super(TestBillingCharges, self).setUp() self.payday = Payday(self.db) def test_mark_missing_funding(self): self.payday.start() before = self.fetch_payday() missing_count = before['ncc_missing'] self.payday.mark_missing_funding() after = self.fetch_payday() assert after['ncc_missing'] == missing_count + 1 def test_mark_charge_failed(self): self.payday.start() before = self.fetch_payday() fail_count = before['ncc_failing'] with self.db.get_cursor() as cursor: self.payday.mark_charge_failed(cursor) after = self.fetch_payday() assert after['ncc_failing'] == fail_count + 1 def test_mark_charge_success(self): self.payday.start() charge_amount, fee = 4, 2 with self.db.get_cursor() as cursor: self.payday.mark_charge_success(cursor, charge_amount, fee) # verify paydays actual = self.fetch_payday() assert actual['ncharges'] == 1 @mock.patch('stripe.Charge') def test_charge_on_stripe(self, ba): amount_to_charge = Decimal('10.00') # $10.00 USD expected_fee = Decimal('0.61') charge_amount, fee, msg = self.payday.charge_on_stripe( self.alice.username, self.STRIPE_CUSTOMER_ID, amount_to_charge) assert charge_amount == amount_to_charge + fee assert fee == expected_fee assert ba.find.called_with(self.STRIPE_CUSTOMER_ID) customer = ba.find.return_value assert customer.debit.called_with( int(charge_amount * 100) , self.alice.username ) @mock.patch('balanced.Account') def test_charge_on_balanced(self, ba): amount_to_charge = Decimal('10.00') # $10.00 USD expected_fee = Decimal('0.61') charge_amount, fee, msg = self.payday.charge_on_balanced( self.alice.username, self.BALANCED_ACCOUNT_URI, amount_to_charge) assert charge_amount == amount_to_charge + fee assert fee == expected_fee assert ba.find.called_with(self.BALANCED_ACCOUNT_URI) customer = ba.find.return_value assert customer.debit.called_with( int(charge_amount * 100) , self.alice.username ) @mock.patch('balanced.Account') def test_charge_on_balanced_small_amount(self, ba): amount_to_charge = Decimal('0.06') # $0.06 USD expected_fee = Decimal('0.59') expected_amount = Decimal('10.00') charge_amount, fee, msg = \ self.payday.charge_on_balanced(self.alice.username, self.BALANCED_ACCOUNT_URI, amount_to_charge) assert charge_amount == expected_amount assert fee == expected_fee customer = ba.find.return_value assert customer.debit.called_with( int(charge_amount * 100) , self.alice.username ) @mock.patch('balanced.Account') def test_charge_on_balanced_failure(self, ba): amount_to_charge = Decimal('0.06') # $0.06 USD error_message = 'Woah, crazy' ba.find.side_effect = balanced.exc.HTTPError(error_message) charge_amount, fee, msg = self.payday.charge_on_balanced( self.alice.username, self.BALANCED_ACCOUNT_URI, amount_to_charge) assert msg == error_message
class TestBillingCharges(Harness): BALANCED_ACCOUNT_URI = u'/v1/marketplaces/M123/accounts/A123' BALANCED_TOKEN = u'/v1/marketplaces/M123/accounts/A123/cards/C123' STRIPE_CUSTOMER_ID = u'cus_deadbeef' def setUp(self): super(TestBillingCharges, self).setUp() self.payday = Payday(self.postgres) self.alice = self.make_participant('alice') def test_mark_missing_funding(self): self.payday.start() before = PaydayModel.query.first().attrs_dict() missing_count = before['ncc_missing'] self.payday.mark_missing_funding() after = PaydayModel.query.first().attrs_dict() self.assertEqual(after['ncc_missing'], missing_count + 1) def test_mark_charge_failed(self): self.payday.start() before = PaydayModel.query.first().attrs_dict() fail_count = before['ncc_failing'] with self.postgres.get_connection() as conn: cur = conn.cursor() self.payday.mark_charge_failed(cur) conn.commit() after = PaydayModel.query.first().attrs_dict() self.assertEqual(after['ncc_failing'], fail_count + 1) def test_mark_charge_success(self): self.payday.start() charge_amount, fee = 4, 2 with self.postgres.get_connection() as conn: cur = conn.cursor() self.payday.mark_charge_success(cur, charge_amount, fee) conn.commit() # verify paydays actual = PaydayModel.query.first().attrs_dict() self.assertEqual(actual['ncharges'], 1) @mock.patch('stripe.Charge') def test_charge_on_stripe(self, ba): amount_to_charge = Decimal('10.00') # $10.00 USD expected_fee = (amount_to_charge + FEE_CHARGE[0]) * FEE_CHARGE[1] expected_fee = (amount_to_charge - expected_fee.quantize( FEE_CHARGE[0], rounding=ROUND_UP)) * -1 charge_amount, fee, msg = self.payday.charge_on_stripe( self.alice.id, self.STRIPE_CUSTOMER_ID, amount_to_charge) assert_equals(charge_amount, amount_to_charge + fee) assert_equals(fee, expected_fee) self.assertTrue(ba.find.called_with(self.STRIPE_CUSTOMER_ID)) customer = ba.find.return_value self.assertTrue( customer.debit.called_with(int(charge_amount * 100), self.alice.id)) @mock.patch('balanced.Account') def test_charge_on_balanced(self, ba): amount_to_charge = Decimal('10.00') # $10.00 USD expected_fee = (amount_to_charge + FEE_CHARGE[0]) * FEE_CHARGE[1] expected_fee = (amount_to_charge - expected_fee.quantize( FEE_CHARGE[0], rounding=ROUND_UP)) * -1 charge_amount, fee, msg = self.payday.charge_on_balanced( self.alice.id, self.BALANCED_ACCOUNT_URI, amount_to_charge) self.assertEqual(charge_amount, amount_to_charge + fee) self.assertEqual(fee, expected_fee) self.assertTrue(ba.find.called_with(self.BALANCED_ACCOUNT_URI)) customer = ba.find.return_value self.assertTrue( customer.debit.called_with(int(charge_amount * 100), self.alice.id)) @mock.patch('balanced.Account') def test_charge_on_balanced_small_amount(self, ba): amount_to_charge = Decimal('0.06') # $0.06 USD expected_fee = Decimal('0.68') expected_amount = Decimal('10.00') charge_amount, fee, msg = \ self.payday.charge_on_balanced(self.alice.id, self.BALANCED_ACCOUNT_URI, amount_to_charge) assert_equals(charge_amount, expected_amount) assert_equals(fee, expected_fee) customer = ba.find.return_value self.assertTrue( customer.debit.called_with(int(charge_amount * 100), self.alice.id)) @mock.patch('balanced.Account') def test_charge_on_balanced_failure(self, ba): amount_to_charge = Decimal('0.06') # $0.06 USD error_message = 'Woah, crazy' ba.find.side_effect = balanced.exc.HTTPError(error_message) charge_amount, fee, msg = self.payday.charge_on_balanced( self.alice.id, self.BALANCED_ACCOUNT_URI, amount_to_charge) assert_equals(msg, error_message)
class TestBillingCharges(TestPaydayBase): BALANCED_ACCOUNT_URI = u'/v1/marketplaces/M123/accounts/A123' BALANCED_TOKEN = u'/v1/marketplaces/M123/accounts/A123/cards/C123' STRIPE_CUSTOMER_ID = u'cus_deadbeef' def setUp(self): super(TestBillingCharges, self).setUp() self.payday = Payday(self.db) def test_mark_missing_funding(self): self.payday.start() before = self.fetch_payday() missing_count = before['ncc_missing'] self.payday.mark_missing_funding() after = self.fetch_payday() self.assertEqual(after['ncc_missing'], missing_count + 1) def test_mark_charge_failed(self): self.payday.start() before = self.fetch_payday() fail_count = before['ncc_failing'] with self.db.get_cursor() as cursor: self.payday.mark_charge_failed(cursor) after = self.fetch_payday() self.assertEqual(after['ncc_failing'], fail_count + 1) def test_mark_charge_success(self): self.payday.start() charge_amount, fee = 4, 2 with self.db.get_cursor() as cursor: self.payday.mark_charge_success(cursor, charge_amount, fee) # verify paydays actual = self.fetch_payday() self.assertEqual(actual['ncharges'], 1) @mock.patch('stripe.Charge') def test_charge_on_stripe(self, ba): amount_to_charge = Decimal('10.00') # $10.00 USD expected_fee = Decimal('0.61') charge_amount, fee, msg = self.payday.charge_on_stripe( self.alice.username, self.STRIPE_CUSTOMER_ID, amount_to_charge) assert_equals(charge_amount, amount_to_charge + fee) assert_equals(fee, expected_fee) self.assertTrue(ba.find.called_with(self.STRIPE_CUSTOMER_ID)) customer = ba.find.return_value self.assertTrue( customer.debit.called_with(int(charge_amount * 100), self.alice.username)) @mock.patch('balanced.Account') def test_charge_on_balanced(self, ba): amount_to_charge = Decimal('10.00') # $10.00 USD expected_fee = Decimal('0.61') charge_amount, fee, msg = self.payday.charge_on_balanced( self.alice.username, self.BALANCED_ACCOUNT_URI, amount_to_charge) self.assertEqual(charge_amount, amount_to_charge + fee) self.assertEqual(fee, expected_fee) self.assertTrue(ba.find.called_with(self.BALANCED_ACCOUNT_URI)) customer = ba.find.return_value self.assertTrue( customer.debit.called_with(int(charge_amount * 100), self.alice.username)) @mock.patch('balanced.Account') def test_charge_on_balanced_small_amount(self, ba): amount_to_charge = Decimal('0.06') # $0.06 USD expected_fee = Decimal('0.59') expected_amount = Decimal('10.00') charge_amount, fee, msg = \ self.payday.charge_on_balanced(self.alice.username, self.BALANCED_ACCOUNT_URI, amount_to_charge) assert_equals(charge_amount, expected_amount) assert_equals(fee, expected_fee) customer = ba.find.return_value self.assertTrue( customer.debit.called_with(int(charge_amount * 100), self.alice.username)) @mock.patch('balanced.Account') def test_charge_on_balanced_failure(self, ba): amount_to_charge = Decimal('0.06') # $0.06 USD error_message = 'Woah, crazy' ba.find.side_effect = balanced.exc.HTTPError(error_message) charge_amount, fee, msg = self.payday.charge_on_balanced( self.alice.username, self.BALANCED_ACCOUNT_URI, amount_to_charge) assert_equals(msg, error_message)
class TestBillingCharges(Harness): BALANCED_ACCOUNT_URI = u"/v1/marketplaces/M123/accounts/A123" BALANCED_TOKEN = u"/v1/marketplaces/M123/accounts/A123/cards/C123" STRIPE_CUSTOMER_ID = u"cus_deadbeef" def setUp(self): super(TestBillingCharges, self).setUp() self.payday = Payday(self.postgres) self.alice = self.make_participant("alice") def test_mark_missing_funding(self): self.payday.start() before = PaydayModel.query.first().attrs_dict() missing_count = before["ncc_missing"] self.payday.mark_missing_funding() after = PaydayModel.query.first().attrs_dict() self.assertEqual(after["ncc_missing"], missing_count + 1) def test_mark_charge_failed(self): self.payday.start() before = PaydayModel.query.first().attrs_dict() fail_count = before["ncc_failing"] with self.postgres.get_connection() as conn: cur = conn.cursor() self.payday.mark_charge_failed(cur) conn.commit() after = PaydayModel.query.first().attrs_dict() self.assertEqual(after["ncc_failing"], fail_count + 1) def test_mark_charge_success(self): self.payday.start() charge_amount, fee = 4, 2 with self.postgres.get_connection() as conn: cur = conn.cursor() self.payday.mark_charge_success(cur, charge_amount, fee) conn.commit() # verify paydays actual = PaydayModel.query.first().attrs_dict() self.assertEqual(actual["ncharges"], 1) @mock.patch("stripe.Charge") def test_charge_on_stripe(self, ba): amount_to_charge = Decimal("10.00") # $10.00 USD expected_fee = (amount_to_charge + FEE_CHARGE[0]) * FEE_CHARGE[1] expected_fee = (amount_to_charge - expected_fee.quantize(FEE_CHARGE[0], rounding=ROUND_UP)) * -1 charge_amount, fee, msg = self.payday.charge_on_stripe(self.alice.id, self.STRIPE_CUSTOMER_ID, amount_to_charge) assert_equals(charge_amount, amount_to_charge + fee) assert_equals(fee, expected_fee) self.assertTrue(ba.find.called_with(self.STRIPE_CUSTOMER_ID)) customer = ba.find.return_value self.assertTrue(customer.debit.called_with(int(charge_amount * 100), self.alice.id)) @mock.patch("balanced.Account") def test_charge_on_balanced(self, ba): amount_to_charge = Decimal("10.00") # $10.00 USD expected_fee = (amount_to_charge + FEE_CHARGE[0]) * FEE_CHARGE[1] expected_fee = (amount_to_charge - expected_fee.quantize(FEE_CHARGE[0], rounding=ROUND_UP)) * -1 charge_amount, fee, msg = self.payday.charge_on_balanced( self.alice.id, self.BALANCED_ACCOUNT_URI, amount_to_charge ) self.assertEqual(charge_amount, amount_to_charge + fee) self.assertEqual(fee, expected_fee) self.assertTrue(ba.find.called_with(self.BALANCED_ACCOUNT_URI)) customer = ba.find.return_value self.assertTrue(customer.debit.called_with(int(charge_amount * 100), self.alice.id)) @mock.patch("balanced.Account") def test_charge_on_balanced_small_amount(self, ba): amount_to_charge = Decimal("0.06") # $0.06 USD expected_fee = Decimal("0.68") expected_amount = Decimal("10.00") charge_amount, fee, msg = self.payday.charge_on_balanced( self.alice.id, self.BALANCED_ACCOUNT_URI, amount_to_charge ) assert_equals(charge_amount, expected_amount) assert_equals(fee, expected_fee) customer = ba.find.return_value self.assertTrue(customer.debit.called_with(int(charge_amount * 100), self.alice.id)) @mock.patch("balanced.Account") def test_charge_on_balanced_failure(self, ba): amount_to_charge = Decimal("0.06") # $0.06 USD error_message = "Woah, crazy" ba.find.side_effect = balanced.exc.HTTPError(error_message) charge_amount, fee, msg = self.payday.charge_on_balanced( self.alice.id, self.BALANCED_ACCOUNT_URI, amount_to_charge ) assert_equals(msg, error_message)