Esempio n. 1
0
    def test_process_payouts_multiple_payouts(self):
        engine = payout_engine.PayoutEngine()
        payout_engine.Context.objects.all()[0].payouts_n = 10

        data = {'EUR': {'*****@*****.**': [(10, 1), (4, 2)], '*****@*****.**': [(2.21, 1), (20, 2)], '*****@*****.**': [(4, 1)]}}

        result = engine._process_payouts(data)

        assert len(result) == 1

        expected = [
            {'amount': {'currency': 'EUR', 'value': '10.00'}, 'sender_item_id': '1_10', 'recipient_type': 'EMAIL', 'receiver': createMail(1)},
            {'amount': {'currency': 'EUR', 'value': '4.00'}, 'sender_item_id': '2_11', 'recipient_type': 'EMAIL', 'receiver': createMail(1)},
            {'amount': {'currency': 'EUR', 'value': '2.21'}, 'sender_item_id': '1_12', 'recipient_type': 'EMAIL', 'receiver': createMail(2)},
            {'amount': {'currency': 'EUR', 'value': '20.00'}, 'sender_item_id': '2_13', 'recipient_type': 'EMAIL', 'receiver': createMail(2)},
            {'amount': {'currency': 'EUR', 'value': '4.00'}, 'sender_item_id': '1_14', 'recipient_type': 'EMAIL', 'receiver': createMail(3)}
        ]
        engine.paypal.batch_payout.assert_called_once_with(expected)

        assert payout_engine.Context.objects.all()[0].payouts_n == 15

        payout_engine.get_database_connection().wstore_payout.insert_one.assert_not_called()
        assert payout_engine.get_database_connection().wstore_payout.find_one_and_update.call_args_list == [
            call({'_id': self.reference},
                 {'$set': {'_lock': True}}),
            call({'_id': self.reference},
                 {'$set': {'_lock': False}})]
    def test_process_payouts_multiple_payouts(self):
        engine = payout_engine.PayoutEngine()
        payout_engine.Context.objects.all()[0].payouts_n = 10

        data = {'EUR': {'*****@*****.**': [(10, 1), (4, 2)], '*****@*****.**': [(2.21, 1), (20, 2)], '*****@*****.**': [(4, 1)]}}

        result = engine._process_payouts(data)

        assert len(result) == 1

        expected = [
            {'amount': {'currency': 'EUR', 'value': '10.00'}, 'sender_item_id': '1_10', 'recipient_type': 'EMAIL', 'receiver': createMail(1)},
            {'amount': {'currency': 'EUR', 'value': '4.00'}, 'sender_item_id': '2_11', 'recipient_type': 'EMAIL', 'receiver': createMail(1)},
            {'amount': {'currency': 'EUR', 'value': '2.21'}, 'sender_item_id': '1_12', 'recipient_type': 'EMAIL', 'receiver': createMail(2)},
            {'amount': {'currency': 'EUR', 'value': '20.00'}, 'sender_item_id': '2_13', 'recipient_type': 'EMAIL', 'receiver': createMail(2)},
            {'amount': {'currency': 'EUR', 'value': '4.00'}, 'sender_item_id': '1_14', 'recipient_type': 'EMAIL', 'receiver': createMail(3)}
        ]
        engine.paypal.batch_payout.assert_called_once_with(expected)

        assert payout_engine.Context.objects.all()[0].payouts_n == 15

        payout_engine.get_database_connection().wstore_payout.insert_one.assert_not_called()
        assert payout_engine.get_database_connection().wstore_payout.find_one_and_update.call_args_list == [
            call({'_id': self.reference},
                 {'$set': {'_lock': True}}),
            call({'_id': self.reference},
                 {'$set': {'_lock': False}})]
    def test_process_payouts_create_lock(self):
        engine = payout_engine.PayoutEngine()
        payout_engine.get_database_connection(
        ).wstore_payout.find_one_and_update.side_effect = [
            None, MagicMock(), None
        ]
        payout_engine.Context.objects.all()[0].payouts_n = 10

        data = {}
        engine._process_payouts(data)

        assert payout_engine.Context.objects.all()[0].payouts_n == 10

        payout_engine.get_database_connection(
        ).wstore_payout.insert_one.assert_called_once_with({
            '_id': self.reference,
            '_lock': False
        })

        payout_engine.get_database_connection(
        ).wstore_payout.find_one_and_update.assert_has_calls([
            call({'_id': self.reference}, {'$set': {
                '_lock': True
            }}),
            call({'_id': self.reference}, {'$set': {
                '_lock': True
            }}),
            call({'_id': self.reference}, {'$set': {
                '_lock': False
            }})
        ])
Esempio n. 4
0
    def test_process_payouts_raise_in_lock(self):
        engine = payout_engine.PayoutEngine()
        payout_engine.get_database_connection().wstore_payout.find_one_and_update.return_value = {'_lock': True}
        payout_engine.Context.objects.all()[0].payouts_n = 10

        data = {}

        with self.assertRaisesMessage(PayoutError, 'There is a payout running.'):
            engine._process_payouts(data)

        assert payout_engine.Context.objects.all()[0].payouts_n == 10

        payout_engine.get_database_connection().wstore_payout.insert_one.assert_not_called()

        payout_engine.get_database_connection().wstore_payout.find_one_and_update.assert_has_calls([
            call({'_id': self.reference},
                 {'$set': {'_lock': True}})])
    def test_process_payouts_raise_in_lock(self):
        engine = payout_engine.PayoutEngine()
        payout_engine.get_database_connection().wstore_payout.find_one_and_update.return_value = {'_lock': True}
        payout_engine.Context.objects.all()[0].payouts_n = 10

        data = {}

        with self.assertRaisesMessage(PayoutError, 'There is a payout running.'):
            engine._process_payouts(data)

        assert payout_engine.Context.objects.all()[0].payouts_n == 10

        payout_engine.get_database_connection().wstore_payout.insert_one.assert_not_called()

        payout_engine.get_database_connection().wstore_payout.find_one_and_update.assert_has_calls([
            call({'_id': self.reference},
                 {'$set': {'_lock': True}})])
    def test_process_payouts_create_lock(self):
        engine = payout_engine.PayoutEngine()
        payout_engine.get_database_connection().wstore_payout.find_one_and_update.side_effect = [None, MagicMock(), None]
        payout_engine.Context.objects.all()[0].payouts_n = 10

        data = {}
        engine._process_payouts(data)

        assert payout_engine.Context.objects.all()[0].payouts_n == 10

        payout_engine.get_database_connection().wstore_payout.insert_one.assert_called_once_with({'_id': self.reference, '_lock': False})

        payout_engine.get_database_connection().wstore_payout.find_one_and_update.assert_has_calls([
            call({'_id': self.reference},
                 {'$set': {'_lock': True}}),
            call({'_id': self.reference},
                 {'$set': {'_lock': True}}),
            call({'_id': self.reference},
                 {'$set': {'_lock': False}})])