コード例 #1
0
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)
コード例 #2
0
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
コード例 #3
0
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)
コード例 #4
0
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)
コード例 #5
0
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)