def test_point_reservation_and_balance(self): # check that point reservations and cancellation changes the balance # properly def update_balance(): return defer.succeed(5) wallet = MocLbryumWallet() wallet._update_balance = update_balance d = wallet.update_balance() # test point reservation d.addCallback(lambda _: self.assertEqual(5, wallet.get_balance())) d.addCallback(lambda _: wallet.reserve_points('testid', 2)) d.addCallback(lambda _: self.assertEqual(3, wallet.get_balance())) d.addCallback( lambda _: self.assertEqual(2, wallet.total_reserved_points)) # test reserved points cancellation d.addCallback(lambda _: wallet.cancel_point_reservation( ReservedPoints('testid', 2))) d.addCallback(lambda _: self.assertEqual(5, wallet.get_balance())) d.addCallback( lambda _: self.assertEqual(0, wallet.total_reserved_points)) # test point sending d.addCallback(lambda _: wallet.reserve_points('testid', 2)) d.addCallback(lambda reserve_points: wallet.send_points_to_address( reserve_points, 1)) d.addCallback(lambda _: self.assertEqual(3, wallet.get_balance())) # test failed point reservation d.addCallback(lambda _: wallet.reserve_points('testid', 4)) d.addCallback(lambda out: self.assertEqual(None, out)) return d
def test_point_reservation_and_balance(self): # check that point reservations and cancellation changes the balance # properly def update_balance(): return defer.succeed(5) self.wallet._update_balance = update_balance yield self.wallet.update_balance() self.assertEqual(5, self.wallet.get_balance()) # test point reservation yield self.wallet.reserve_points('testid', 2) self.assertEqual(3, self.wallet.get_balance()) self.assertEqual(2, self.wallet.total_reserved_points) # test reserved points cancellation yield self.wallet.cancel_point_reservation(ReservedPoints('testid', 2)) self.assertEqual(5, self.wallet.get_balance()) self.assertEqual(0, self.wallet.total_reserved_points) # test point sending reserve_points = yield self.wallet.reserve_points('testid', 2) yield self.wallet.send_points_to_address(reserve_points, 1) self.assertEqual(3, self.wallet.get_balance()) # test failed point reservation out = yield self.wallet.reserve_points('testid', 4) self.assertEqual(None, out)
def reserve_points(self, peer, amount): """ Ensure a certain amount of points are available to be sent as payment, before the service is rendered @param peer: The peer to which the payment will ultimately be sent @param amount: The amount of points to reserve @return: A ReservedPoints object which is given to send_points once the service has been rendered """ if self.wallet_balance >= self.total_reserved_points + amount: self.total_reserved_points += amount return ReservedPoints(peer, amount) return None