def __refund_entry(self, entry): """ refund a single entry. THIS DOES NOT remove the entry from a contest! :param entry: :return: """ buyin = entry.contest_pool.prize_structure.buyin bm = BuyinManager(entry.user) transaction = None # Create a cash or ticket deposit as a refund, # based on what the user used to get into the contest if bm.entry_did_use_ticket(entry): tm = TicketManager(entry.user) tm.deposit(buyin) transaction = tm.transaction refund = self.__create_refund(transaction, entry) else: ct = CashTransaction(entry.user) ct.deposit(buyin) transaction = ct.transaction refund = self.__create_refund(transaction, entry) # Create refund transaction from escrow escrow_ct = CashTransaction(self.get_escrow_user()) escrow_ct.withdraw(buyin, trans=transaction) return refund
def test_simple_ticket_buyin(self): tm = TicketManager(self.user) try: tm.get_ticket_amount(self.buyin) except Exception: ta = TicketAmount() ta.amount = self.buyin ta.save() tm.deposit(amount=self.buyin) bm = BuyinManager(self.user) bm.buyin(self.contest_pool) tm.ticket.refresh_from_db() self.assertEqual((tm.ticket.consume_transaction is not None), True)
class RefundTest(AbstractTest, RefundBuildWorldMixin): def setUp(self): super().setUp() self.user1 = self.get_basic_user("test1") self.user2 = self.get_basic_user("test2") self.user3 = self.get_basic_user("test3") self.build_world() self.user1_ct = CashTransaction(self.user1) self.user1_ct.deposit(100) self.user2_ct = CashTransaction(self.user2) self.user2_ct.deposit(50) ta = TicketAmount.objects.get(amount=10.00) self.user3_tm = TicketManager(self.user3) self.user3_tm.deposit(10) self.escrow_user = self.user2_ct.get_escrow_user() self.escrow_ct = CashTransaction(self.escrow_user) bm = BuyinManager(self.user1) bm.buyin(self.contest_pool) bm = BuyinManager(self.user2) bm.buyin(self.contest_pool) bm = BuyinManager(self.user3) bm.buyin(self.contest_pool) Entry.objects.filter(contest_pool=self.contest_pool).update( contest=self.contest) def test_refund(self): self.assertEqual(self.user1_ct.get_balance_amount(), 90) self.assertEqual(self.user2_ct.get_balance_amount(), 40) self.assertEqual(self.escrow_ct.get_balance_amount(), 30) self.assertEqual(self.user3_tm.get_available_tickets().count(), 0) refund_manager = RefundManager() refund_manager.refund(self.contest, force=True) self.assertEqual(self.user1_ct.get_balance_amount(), 100) self.assertEqual(self.user2_ct.get_balance_amount(), 50) self.assertEqual(self.escrow_ct.get_balance_amount(), 0) self.assertEqual(self.user3_tm.get_available_tickets().count(), 1) # in progress should be refundable in cases # where its not a GPP and it did not fill # def test_contest_is_in_progress(self): # self.contest.status = self.contest.INPROGRESS # self.contest.save() # self.should_raise_contest_is_in_progress_or_closed_exception() def test_contest_is_cancelled(self): self.contest.status = self.contest.CANCELLED self.contest.save() self.should_raise_contest_is_cancelled_or_closed() def test_contest_is_closed(self): self.contest.status = self.contest.CLOSED self.contest.save() self.should_raise_contest_is_cancelled_or_closed() # completed is an "in progress" status, which has # no more live inprogress games # def test_contest_is_completed(self): # self.contest.status = self.contest.COMPLETED # self.contest.save() # self.should_raise_contest_is_in_progress_or_closed_exception() def should_raise_contest_is_cancelled_or_closed(self): self.assertEqual(self.user1_ct.get_balance_amount(), 90) self.assertEqual(self.user2_ct.get_balance_amount(), 40) self.assertEqual(self.escrow_ct.get_balance_amount(), 30) self.assertEqual(self.user3_tm.get_available_tickets().count(), 0) refund_manager = RefundManager() self.assertRaises( ContestCanNotBeRefunded, lambda: refund_manager.refund(self.contest, force=True)) self.assertEqual(self.user1_ct.get_balance_amount(), 90) self.assertEqual(self.user2_ct.get_balance_amount(), 40) self.assertEqual(self.escrow_ct.get_balance_amount(), 30) self.assertEqual(self.user3_tm.get_available_tickets().count(), 0)