def test_h2h_tie(self): self.first = 1.8 # # create a simple Rank and Prize Structure cps = CashPrizeStructureCreator(name='test1') cps.add(1, self.first) cps.set_buyin(1.0) cps.save() self.prize_structure = cps.prize_structure self.prize_structure.generator.prize_pool = 1.8 # minus rake self.prize_structure.save() self.ranks = cps.ranks self.contest.status = Contest.SCHEDULED self.contest.prize_structure = self.prize_structure self.contest.draft_group = self.draftgroup self.contest.entries = 2 self.contest.save() self.create_simple_teams_all_tie(2) pm = PayoutManager() pm.payout(finalize_score=False) payouts = Payout.objects.order_by('contest', '-rank') for payout in payouts: self.assertEqual(payout.rank, 1) trans = CashTransactionDetail.objects.get( transaction=payout.transaction, user=payout.user) self.assertAlmostEqual(trans.amount, decimal.Decimal(.90))
def test_calculate_rake_1_dollar_10_entry(self): from datetime import timedelta from django.utils import timezone # create a simple Rank and Prize Structure cps = CashPrizeStructureCreator(name='test1') cps.add(1, 4) cps.add(2, 3) cps.add(3, 2) cps.set_buyin(1) cps.save() prize_structure = cps.prize_structure # (10 entries * $10 buyin price - 10% rake fee) prize_structure.generator.prize_pool = 9 prize_structure.save() # ranks = cps.ranks contest = mommy.make(Contest, entries=10, prize_structure=prize_structure, end=timezone.now() + timedelta(hours=1)) # 1 entry -- we took in 1 paid out 4, net -3 self.createUserEntries(contest, 1, 1) calculate_rake(contest) self.assertEqual(calculate_rake(contest), -3) # 2 entries -- we took in 2 and paid out 7, net -5 self.createUserEntries(contest, 1, 1) calculate_rake(contest) self.assertEqual(calculate_rake(contest), -5) # 3 entries -- we took in 3 and paid out 9, net -6 self.createUserEntries(contest, 1, 1) self.assertEqual(calculate_rake(contest), -6) # 4 entries -- took in 4, paid out 9, net -5 self.createUserEntries(contest, 1, 1) self.assertEqual(calculate_rake(contest), -5) # 8 entries -- took in 8, paid out 9, net -1 self.createUserEntries(contest, 1, 4) self.assertEqual(calculate_rake(contest), -1) # full contest, 10 entries -- took in 10, paid out 9, net 1 self.createUserEntries(contest, 1, 2) self.assertEqual(calculate_rake(contest), 1)
def test_calculate_rake_10_dollar_10_entry(self): from datetime import timedelta from django.utils import timezone # create a simple Rank and Prize Structure cps = CashPrizeStructureCreator(name='test1') cps.add(1, 20) cps.add(2, 10) cps.add(3, 5) cps.set_buyin(10) cps.save() prize_structure = cps.prize_structure # (10 entries * $10 buyin price - 10% rake fee) prize_structure.generator.prize_pool = 90.0 prize_structure.save() # ranks = cps.ranks contest = mommy.make(Contest, entries=10, prize_structure=prize_structure, end=timezone.now() + timedelta(hours=1)) # 1 entry -- we took in 10 and paid out 20, net -10 self.createUserEntries(contest, 1, 1) calculate_rake(contest) self.assertEqual(calculate_rake(contest), -10) # 2 entries -- we took in 20 and paid out 30, net -10 self.createUserEntries(contest, 1, 1) calculate_rake(contest) self.assertEqual(calculate_rake(contest), -10) # 3 entries -- we took in 30 and paid out 35, net -5 self.createUserEntries(contest, 1, 1) self.assertEqual(calculate_rake(contest), -5) # 4 entries -- took in 40, paid out 35, net 5 self.createUserEntries(contest, 1, 1) self.assertEqual(calculate_rake(contest), 5) # 8 entries -- took in 80, paid out 35, net 45 self.createUserEntries(contest, 1, 4) self.assertEqual(calculate_rake(contest), 45) # full contest, 10 entries -- took in 100, paid out 35, net 65 self.createUserEntries(contest, 1, 2) self.assertEqual(calculate_rake(contest), 65)
def test_create_cash_prize_structure_with_adds(self): name = 'custom_name' total_ranks = 2 first = 75.00 second = 25.00 cps = CashPrizeStructureCreator(name=name) cps.add(1, first) cps.add(2, second) cps.set_buyin(5.00) cps.save() try: ps = PrizeStructure.objects.get(name__istartswith=name) except PrizeStructure.DoesNotExist: ps = None self.assertIsNotNone(ps) ranks = Rank.objects.filter(prize_structure=ps) self.assertEquals(total_ranks, len(ranks))
def create_prize_structure(): first = 100.0 second = 50.0 third = 25.0 # create a simple Rank and Prize Structure buyin = 10 cps = CashPrizeStructureCreator(name='test') cps.add(1, first) cps.add(2, second) cps.add(3, third) cps.set_buyin(buyin) cps.save() # cps.prize_structure.buyin = self.buyin cps.prize_structure.save() prize_structure = cps.prize_structure ranks = cps.ranks return prize_structure
def setUp(self): super().setUp() # creates very standard ticket amounts like 1,2,5, 10, 20, 50 TicketManager.create_default_ticket_amounts(verbose=False) self.first = 34.0 self.second = 10.0 self.third = 10.0 # # create a simple Rank and Prize Structure cps = CashPrizeStructureCreator(name='test1') cps.add(1, self.first) cps.add(2, self.second) cps.add(3, self.third) cps.set_buyin(10) cps.save() self.prize_structure = cps.prize_structure self.prize_structure.generator.prize_pool = 54.0 # minus rake self.prize_structure.save() self.ranks = cps.ranks self.world = BuildWorldForTesting() self.world.build_world() self.draftgroup = self.world.draftgroup self.contest = self.world.contest self.contest.status = Contest.SCHEDULED self.contest.prize_structure = self.prize_structure self.contest.draft_group = self.draftgroup self.contest.entries = 6 self.contest.save() self.contest_pool, created = ContestPoolCreator( 'nfl', self.prize_structure, self.draftgroup.start, (self.draftgroup.end - self.draftgroup.start).seconds * 60, self.draftgroup).get_or_create() self.contest_pool.entries = 6 self.contest_pool.save() self.scorer_class = TestSalaryScoreSystem
def setUp(self): super().setUp() # ensure the default ticket TicketManager.create_default_ticket_amounts(verbose=False) # add funds to user self.user = self.get_basic_user() ct = CashTransaction(self.user) ct.deposit(100) # salary_generator = Dummy.generate_salaries() # self.salary_pool = salary_generator.pool # start # # self.verbose = True # set to False to disable print statements # # The sport we are going to build fake stats for. # Lets use nfl, but it doesnt matter what sport we use self.sport = 'nfl' # # Ensure there are Games by using the Dummy to generate fake stats. # The ScheduleManager requires that Game objects exist # because when it creates scheduled Contest objects # it is required to create a draft group. self.dummy = Dummy(sport=self.sport) self.generator = self.dummy.generate() self.salary_pool = self.generator.pool self.site_sport = self.dummy.site_sport # stash the site_sport for easy use self.site_sport_manager = SiteSportManager() self.game_model = self.site_sport_manager.get_game_class( self.site_sport) # ie: sports.nfl.models.Game self.games = self.game_model.objects.all() # there should be handful now, for today if self.games.count() <= 0: raise Exception( 'buyin.tests.BuyinTest - we meant to create games.... but none were created!') # end # create a simple prize pool self.first = 100.0 self.second = 50.0 self.third = 25.0 self.buyin = 10 cps = CashPrizeStructureCreator(name='test') cps.add(1, self.first) cps.add(2, self.second) cps.add(3, self.third) cps.set_buyin(self.buyin) cps.save() cps.prize_structure.save() self.prize_structure = cps.prize_structure self.ranks = cps.ranks # # create the Contest # now = timezone.now() # start = DfsDateTimeUtil.create(now.date(), time(23,0)) # end = DfsDateTimeUtil.create(now.date() + timedelta(days=1), time(0,0)) start = self.games[0].start + timedelta(minutes=5) end = self.games[self.games.count() - 1].start # set 'end' to start of last game cc = ContestCreator("test_contest", self.sport, self.prize_structure, start, end) self.draft_group2 = DraftGroup() self.draft_group2.salary_pool = self.salary_pool self.draft_group2.start = start self.draft_group2.end = end self.draft_group2.save() self.contest_pool, created = ContestPoolCreator( self.sport, self.prize_structure, start, (end - start).seconds * 60, self.draft_group2 ).get_or_create() self.contest = cc.create() self.contest.status = Contest.RESERVABLE self.contest.save() self.draft_group = DraftGroup() self.draft_group.salary_pool = self.salary_pool self.draft_group.start = start self.draft_group.end = end self.draft_group.save()