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 }}) ])
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}})])