Esempio n. 1
0
 def test_decline_prize_single(self):
   amount = Decimal('50.0')
   targetPrize = randgen.generate_prize(self.rand,event=self.event,sumDonations=False,randomDraw=False,minAmount=amount,maxAmount=amount,maxwinners=1)
   targetPrize.save()
   self.assertEqual(0, len(targetPrize.eligible_donors()))
   donorA = randgen.generate_donor(self.rand)
   donorA.save()
   donorB = randgen.generate_donor(self.rand)
   donorB.save()
   donationA = randgen.generate_donation(self.rand,donor=donorA,minAmount=amount,maxAmount=amount,event=self.event)
   donationA.save()
   self.assertEqual(1, len(targetPrize.eligible_donors()))
   self.assertEqual(donorA.id, targetPrize.eligible_donors()[0]['donor'])
   viewutil.draw_prize(targetPrize)
   self.assertEqual(donorA, targetPrize.get_winner())
   self.assertEqual(0, len(targetPrize.eligible_donors()))
   donationB = randgen.generate_donation(self.rand,donor=donorB,minAmount=amount,maxAmount=amount,event=self.event)
   donationB.save()
   self.assertEqual(1, len(targetPrize.eligible_donors()))
   self.assertEqual(donorB.id, targetPrize.eligible_donors()[0]['donor'])
   prizeWinnerEntry = targetPrize.prizewinner_set.filter(winner=donorA)[0]
   prizeWinnerEntry.acceptstate = 'DECLINED';
   prizeWinnerEntry.save()
   self.assertEqual(1, len(targetPrize.eligible_donors()))
   self.assertEqual(donorB.id, targetPrize.eligible_donors()[0]['donor'])
   viewutil.draw_prize(targetPrize)
   self.assertEqual(donorB, targetPrize.get_winner())
   self.assertEqual(1, len(targetPrize.get_winners()))
   self.assertEqual(0, len(targetPrize.eligible_donors()))
 def testWinMultiPrizeLowerThanMaxWin(self):
     donor = randgen.generate_donor(self.rand)
     donor.save()
     prize = randgen.generate_prize(self.rand)
     prize.event = self.event
     prize.maxwinners = 3
     prize.maxmultiwin = 2
     prize.save()
     models.DonorPrizeEntry.objects.create(donor=donor, prize=prize)
     prizeWinner = models.PrizeWinner.objects.create(
         winner=donor, prize=prize, pendingcount=1, declinecount=1)
     result, msg = viewutil.draw_prize(prize)
     self.assertFalse(result)
     donor2 = randgen.generate_donor(self.rand)
     donor2.save()
     models.DonorPrizeEntry.objects.create(donor=donor2, prize=prize)
     result, msg = viewutil.draw_prize(prize)
     self.assertTrue(result)
     prizeWinner = models.PrizeWinner.objects.get(
         winner=donor2, prize=prize)
     self.assertEquals(1, prizeWinner.pendingcount)
     result, msg = viewutil.draw_prize(prize)
     self.assertTrue(result)
     result, msg = viewutil.draw_prize(prize)
     self.assertFalse(result)
    def test_accept_deadline_offset(self):
        # 10 days in the future
        self.event.prize_accept_deadline_delta = 10
        # TODO: it should not take this much set-up to draw a single donor to a single prize
        amount = Decimal('50.0')
        targetPrize = randgen.generate_prize(
            self.rand, event=self.event, sumDonations=False, randomDraw=False, minAmount=amount, maxAmount=amount, maxwinners=1)
        targetPrize.save()
        winner = randgen.generate_donor(self.rand)
        winner.save()
        winningDonation = randgen.generate_donation(
            self.rand, donor=winner, minAmount=amount, maxAmount=amount, event=self.event)
        winningDonation.save()
        self.assertEqual(1, len(targetPrize.eligible_donors()))
        self.assertEqual(winner.id, targetPrize.eligible_donors()[0]['donor'])
        self.assertEqual(
            0, len(prizeutil.get_past_due_prize_winners(self.event)))
        currentDate = datetime.date.today()
        result, status = prizeutil.draw_prize(targetPrize)
        prizeWin = models.PrizeWinner.objects.get(prize=targetPrize)
        self.assertEqual(prizeWin.accept_deadline_date(), currentDate +
                         datetime.timedelta(days=self.event.prize_accept_deadline_delta))

        prizeWin.acceptdeadline = datetime.datetime.utcnow().replace(
            tzinfo=pytz.utc) - datetime.timedelta(days=2)
        prizeWin.save()
        self.assertEqual(0, len(targetPrize.eligible_donors()))
        pastDue = prizeutil.get_past_due_prize_winners(self.event)
        self.assertEqual(
            1, len(prizeutil.get_past_due_prize_winners(self.event)))
        self.assertEqual(prizeWin, pastDue[0])
    def testCountryRegionBlacklistFilterPrize(self):
        # Somewhat ethnocentric testing
        country = models.Country.objects.all()[0]
        prize = models.Prize.objects.create(event=self.event)
        donors = []
        allowedState = 'StateOne'
        disallowedState = 'StateTwo'
        for state in [allowedState, disallowedState]:
            donor = randgen.generate_donor(self.rand)
            donor.addresscountry = country
            donor.addressstate = state
            donor.save()
            donors.append(donor)
            randgen.generate_donation(
                self.rand, event=self.event, donor=donor, minAmount=Decimal(prize.minimumbid)).save()

        eligible = prize.eligible_donors()
        self.assertEqual(2, len(eligible))
        # Test a different country set
        countryRegion = models.CountryRegion.objects.create(
            country=country, name=disallowedState)
        prize.disallowed_prize_regions.add(countryRegion)
        prize.custom_country_filter = True
        prize.save()
        eligible = prize.eligible_donors()
        self.assertEqual(1, len(eligible))
Esempio n. 5
0
 def testSaveWithExistingDoesNotThrow(self):
   rand = random.Random(None)
   d1 = randgen.generate_donor(rand)
   d1.paypalemail = d1.email
   d1.clean()
   d1.save()
   d1.clean()
 def test_draw_prize_multiple_donors_norandom_nosum(self):
     startRun = self.runsList[25]
     endRun = self.runsList[34]
     prize = randgen.generate_prize(
         self.rand, event=self.event, sumDonations=False, randomDraw=False, startRun=startRun, endRun=endRun)
     prize.save()
     largestDonor = None
     largestAmount = Decimal('0.00')
     for donor in self.donorList:
         numDonations = self.rand.getrandbits(4)
         redHerrings = self.rand.getrandbits(4)
         for i in range(0, numDonations):
             donation = randgen.generate_donation(self.rand, donor=donor, event=self.event, minAmount=Decimal(
                 '0.01'), maxAmount=Decimal('1000.00'), minTime=prize.start_draw_time(), maxTime=prize.end_draw_time())
             donation.save()
             if donation.amount > largestAmount:
                 largestDonor = donor
                 largestAmount = donation.amount
         # toss in a few extras to keep the drawer on its toes
         for i in range(0, redHerrings):
             donation = None
             if self.rand.getrandbits(1) == 0:
                 donation = randgen.generate_donation(self.rand, donor=donor, event=self.event, minAmount=Decimal(
                     '1000.01'), maxAmount=Decimal('2000.00'), maxTime=prize.start_draw_time() - datetime.timedelta(seconds=1))
             else:
                 donation = randgen.generate_donation(self.rand, donor=donor, event=self.event, minAmount=Decimal(
                     '1000.01'), maxAmount=prize.minimumbid - Decimal('2000.00'), minTime=prize.end_draw_time() + datetime.timedelta(seconds=1))
             donation.save()
     eligibleDonors = prize.eligible_donors()
     self.assertEqual(1, len(eligibleDonors))
     self.assertEqual(largestDonor.id, eligibleDonors[0]['donor'])
     self.assertEqual(1.0, eligibleDonors[0]['weight'])
     self.assertEqual(largestAmount, eligibleDonors[0]['amount'])
     for seed in [9524, 373, 747]:
         prize.prizewinner_set.all().delete()
         prize.save()
         result, message = viewutil.draw_prize(prize, seed)
         self.assertTrue(result)
         self.assertEqual(largestDonor.id, prize.get_winner().id)
     newDonor = randgen.generate_donor(self.rand)
     newDonor.save()
     newDonation = randgen.generate_donation(self.rand, donor=newDonor, event=self.event, minAmount=Decimal(
         '1000.01'), maxAmount=Decimal('2000.00'), minTime=prize.start_draw_time(), maxTime=prize.end_draw_time())
     newDonation.save()
     eligibleDonors = prize.eligible_donors()
     self.assertEqual(1, len(eligibleDonors))
     self.assertEqual(newDonor.id, eligibleDonors[0]['donor'])
     self.assertEqual(1.0, eligibleDonors[0]['weight'])
     self.assertEqual(newDonation.amount, eligibleDonors[0]['amount'])
     for seed in [9524, 373, 747]:
         prize.prizewinner_set.all().delete()
         prize.save()
         result, message = viewutil.draw_prize(prize, seed)
         self.assertTrue(result)
         self.assertEqual(newDonor.id, prize.get_winner().id)
Esempio n. 7
0
 def testSingleEntry(self):
   donor = randgen.generate_donor(self.rand)
   donor.save()
   prize = randgen.generate_prize(self.rand,event=self.event)
   prize.save()
   entry = tracker.models.DonorPrizeEntry(donor=donor,prize=prize)
   entry.save()
   eligible = prize.eligible_donors()
   self.assertEqual(1, len(eligible))
   self.assertEqual(donor.pk, eligible[0]['donor'])
   self.assertEqual(entry.weight, eligible[0]['weight'])
Esempio n. 8
0
    def testCountryFilterPrize(self):
        # TODO: fix this so either there's less boilerplate, or the boilerplate is shared
        countries = list(models.Country.objects.all()[0:4])
        prize = models.Prize.objects.create(event=self.event)
        for country in countries[0:3]:
            self.event.allowed_prize_countries.add(country)
        self.event.save()
        prize.allowed_prize_countries.add(countries[0])
        prize.allowed_prize_countries.add(countries[1])
        prize.save()
        donors = []
        for country in countries:
            donor = randgen.generate_donor(self.rand)
            donor.addresscountry = country
            donor.save()
            donors.append(donor)
            randgen.generate_donation(self.rand,
                                      event=self.event,
                                      donor=donor,
                                      minAmount=Decimal(
                                          prize.minimumbid)).save()
        self.assertTrue(prize.is_donor_allowed_to_receive(donors[0]))
        self.assertTrue(prize.is_donor_allowed_to_receive(donors[1]))
        self.assertTrue(prize.is_donor_allowed_to_receive(donors[2]))
        self.assertFalse(prize.is_donor_allowed_to_receive(donors[3]))
        # by default don't use the prize filter
        eligible = prize.eligible_donors()
        self.assertEqual(3, len(eligible))

        prize.custom_country_filter = True
        prize.save()
        self.assertTrue(prize.is_donor_allowed_to_receive(donors[0]))
        self.assertTrue(prize.is_donor_allowed_to_receive(donors[1]))
        self.assertFalse(prize.is_donor_allowed_to_receive(donors[2]))
        self.assertFalse(prize.is_donor_allowed_to_receive(donors[3]))
        eligible = prize.eligible_donors()
        self.assertEqual(2, len(eligible))
        # Test a different country set
        prize.allowed_prize_countries.add(countries[3])
        prize.save()
        self.assertTrue(prize.is_donor_allowed_to_receive(donors[0]))
        self.assertTrue(prize.is_donor_allowed_to_receive(donors[1]))
        self.assertFalse(prize.is_donor_allowed_to_receive(donors[2]))
        self.assertTrue(prize.is_donor_allowed_to_receive(donors[3]))
        eligible = prize.eligible_donors()
        self.assertEqual(3, len(eligible))
        # Test a blank country set
        prize.allowed_prize_countries.clear()
        prize.save()
        for donor in donors:
            self.assertTrue(prize.is_donor_allowed_to_receive(donor))
        eligible = prize.eligible_donors()
        self.assertEqual(4, len(eligible))
 def setUp(self):
     self.super_user = User.objects.create_superuser(
         'admin', '*****@*****.**', 'password')
     self.rand = random.Random(None)
     self.event = randgen.generate_event(self.rand)
     self.event.save()
     self.prize = randgen.generate_prize(self.rand, event=self.event)
     self.prize.save()
     self.donor = randgen.generate_donor(self.rand)
     self.donor.save()
     self.prize_winner = models.PrizeWinner.objects.create(
         winner=self.donor, prize=self.prize)
     self.donor_prize_entry = models.DonorPrizeEntry.objects.create(
         donor=self.donor, prize=self.prize)
Esempio n. 10
0
    def testCountryFilterPrize(self):
        # TODO: fix this so either there's less boilerplate, or the boilerplate is shared
        countries = list(models.Country.objects.all()[0:4])
        prize = models.Prize.objects.create(event=self.event)
        for country in countries[0:3]:
            self.event.allowed_prize_countries.add(country)
        self.event.save()
        prize.allowed_prize_countries.add(countries[0])
        prize.allowed_prize_countries.add(countries[1])
        prize.save()
        donors = []
        for country in countries:
            donor = randgen.generate_donor(self.rand)
            donor.addresscountry = country
            donor.save()
            donors.append(donor)
            randgen.generate_donation(
                self.rand, event=self.event, donor=donor, minAmount=Decimal(prize.minimumbid)).save()
        self.assertTrue(prize.is_donor_allowed_to_receive(donors[0]))
        self.assertTrue(prize.is_donor_allowed_to_receive(donors[1]))
        self.assertTrue(prize.is_donor_allowed_to_receive(donors[2]))
        self.assertFalse(prize.is_donor_allowed_to_receive(donors[3]))
        # by default don't use the prize filter
        eligible = prize.eligible_donors()
        self.assertEqual(3, len(eligible))

        prize.custom_country_filter = True
        prize.save()
        self.assertTrue(prize.is_donor_allowed_to_receive(donors[0]))
        self.assertTrue(prize.is_donor_allowed_to_receive(donors[1]))
        self.assertFalse(prize.is_donor_allowed_to_receive(donors[2]))
        self.assertFalse(prize.is_donor_allowed_to_receive(donors[3]))
        eligible = prize.eligible_donors()
        self.assertEqual(2, len(eligible))
        # Test a different country set
        prize.allowed_prize_countries.add(countries[3])
        prize.save()
        self.assertTrue(prize.is_donor_allowed_to_receive(donors[0]))
        self.assertTrue(prize.is_donor_allowed_to_receive(donors[1]))
        self.assertFalse(prize.is_donor_allowed_to_receive(donors[2]))
        self.assertTrue(prize.is_donor_allowed_to_receive(donors[3]))
        eligible = prize.eligible_donors()
        self.assertEqual(3, len(eligible))
        # Test a blank country set
        prize.allowed_prize_countries.clear()
        prize.save()
        for donor in donors:
            self.assertTrue(prize.is_donor_allowed_to_receive(donor))
        eligible = prize.eligible_donors()
        self.assertEqual(4, len(eligible))
Esempio n. 11
0
 def setUp(self):
     self.super_user = User.objects.create_superuser(
         'admin', '*****@*****.**', 'password')
     self.rand = random.Random(None)
     self.event = randgen.generate_event(self.rand)
     self.event.save()
     self.prize = randgen.generate_prize(self.rand, event=self.event)
     self.prize.save()
     self.donor = randgen.generate_donor(self.rand)
     self.donor.save()
     self.prize_winner = models.PrizeWinner.objects.create(
         winner=self.donor, prize=self.prize)
     self.donor_prize_entry = models.DonorPrizeEntry.objects.create(
         donor=self.donor, prize=self.prize)
Esempio n. 12
0
 def testMultipleEntries(self):
     numDonors = 5
     donors = []
     prize = randgen.generate_prize(self.rand, event=self.event)
     prize.save()
     for i in range(0, numDonors):
         donor = randgen.generate_donor(self.rand)
         donor.save()
         entry = models.DonorPrizeEntry(donor=donor, prize=prize)
         entry.save()
         donors.append(donor.pk)
     eligible = prize.eligible_donors()
     self.assertEqual(numDonors, len(eligible))
     for donorId in map(lambda x: x['donor'], eligible):
         self.assertTrue(donorId in donors)
Esempio n. 13
0
 def testMultipleEntries(self):
   numDonors = 5
   donors = []
   prize = randgen.generate_prize(self.rand,event=self.event)
   prize.save()
   for i in range(0,numDonors):
     donor = randgen.generate_donor(self.rand)
     donor.save()
     entry = tracker.models.DonorPrizeEntry(donor=donor,prize=prize)
     entry.save()
     donors.append(donor.pk)
   eligible = prize.eligible_donors()
   self.assertEqual(numDonors, len(eligible))
   for donorId in map(lambda x: x['donor'], eligible):
     self.assertTrue(donorId in donors) 
Esempio n. 14
0
 def testWinMultiPrizeWithAccept(self):
     donor = randgen.generate_donor(self.rand)
     donor.save()
     prize = randgen.generate_prize(self.rand)
     prize.event = self.event
     prize.maxwinners = 3
     prize.maxmultiwin = 3
     prize.save()
     models.DonorPrizeEntry.objects.create(donor=donor, prize=prize)
     prizeWinner = models.PrizeWinner.objects.create(
         winner=donor, prize=prize, pendingcount=1, acceptcount=1)
     result, msg = prizeutil.draw_prize(prize)
     self.assertTrue(result)
     prizeWinner = models.PrizeWinner.objects.get(winner=donor, prize=prize)
     self.assertEquals(2, prizeWinner.pendingcount)
     result, msg = prizeutil.draw_prize(prize)
     self.assertFalse(result)
Esempio n. 15
0
 def testWinMultiPrizeWithDeny(self):
     donor = randgen.generate_donor(self.rand)
     donor.save()
     prize = randgen.generate_prize(self.rand)
     prize.event = self.event
     prize.maxwinners = 3
     prize.maxmultiwin = 3
     prize.save()
     models.DonorPrizeEntry.objects.create(donor=donor, prize=prize)
     prizeWinner = models.PrizeWinner.objects.create(winner=donor,
                                                     prize=prize,
                                                     pendingcount=1,
                                                     declinecount=1)
     result, msg = prizeutil.draw_prize(prize)
     self.assertTrue(result)
     prizeWinner = models.PrizeWinner.objects.get(winner=donor, prize=prize)
     self.assertEquals(2, prizeWinner.pendingcount)
     result, msg = prizeutil.draw_prize(prize)
     self.assertFalse(result)
Esempio n. 16
0
    def test_accept_deadline_offset(self):
        # 10 days in the future
        self.event.prize_accept_deadline_delta = 10
        # TODO: it should not take this much set-up to draw a single donor to a single prize
        amount = Decimal('50.0')
        targetPrize = randgen.generate_prize(self.rand,
                                             event=self.event,
                                             sumDonations=False,
                                             randomDraw=False,
                                             minAmount=amount,
                                             maxAmount=amount,
                                             maxwinners=1)
        targetPrize.save()
        winner = randgen.generate_donor(self.rand)
        winner.save()
        winningDonation = randgen.generate_donation(self.rand,
                                                    donor=winner,
                                                    minAmount=amount,
                                                    maxAmount=amount,
                                                    event=self.event)
        winningDonation.save()
        self.assertEqual(1, len(targetPrize.eligible_donors()))
        self.assertEqual(winner.id, targetPrize.eligible_donors()[0]['donor'])
        self.assertEqual(0,
                         len(prizeutil.get_past_due_prize_winners(self.event)))
        currentDate = datetime.date.today()
        result, status = prizeutil.draw_prize(targetPrize)
        prizeWin = models.PrizeWinner.objects.get(prize=targetPrize)
        self.assertEqual(
            prizeWin.accept_deadline_date(), currentDate +
            datetime.timedelta(days=self.event.prize_accept_deadline_delta))

        prizeWin.acceptdeadline = datetime.datetime.utcnow().replace(
            tzinfo=pytz.utc) - datetime.timedelta(days=2)
        prizeWin.save()
        self.assertEqual(0, len(targetPrize.eligible_donors()))
        pastDue = prizeutil.get_past_due_prize_winners(self.event)
        self.assertEqual(1,
                         len(prizeutil.get_past_due_prize_winners(self.event)))
        self.assertEqual(prizeWin, pastDue[0])
Esempio n. 17
0
    def testCountryFilterEvent(self):
        countries = list(models.Country.objects.all()[0:4])
        self.event.allowed_prize_countries.add(countries[0])
        self.event.allowed_prize_countries.add(countries[1])
        self.event.save()
        prize = models.Prize.objects.create(event=self.event)
        donors = []
        for country in countries:
            donor = randgen.generate_donor(self.rand)
            donor.addresscountry = country
            donor.save()
            donors.append(donor)
            randgen.generate_donation(self.rand,
                                      event=self.event,
                                      donor=donor,
                                      minAmount=Decimal(
                                          prize.minimumbid)).save()

        self.assertTrue(prize.is_donor_allowed_to_receive(donors[0]))
        self.assertTrue(prize.is_donor_allowed_to_receive(donors[1]))
        self.assertFalse(prize.is_donor_allowed_to_receive(donors[2]))
        self.assertFalse(prize.is_donor_allowed_to_receive(donors[3]))
        eligible = prize.eligible_donors()
        self.assertEqual(2, len(eligible))
        # Test a different country set
        self.event.allowed_prize_countries.add(countries[3])
        self.event.save()
        self.assertTrue(prize.is_donor_allowed_to_receive(donors[0]))
        self.assertTrue(prize.is_donor_allowed_to_receive(donors[1]))
        self.assertFalse(prize.is_donor_allowed_to_receive(donors[2]))
        self.assertTrue(prize.is_donor_allowed_to_receive(donors[3]))
        eligible = prize.eligible_donors()
        self.assertEqual(3, len(eligible))
        # Test a blank country set
        self.event.allowed_prize_countries.clear()
        self.event.save()
        for donor in donors:
            self.assertTrue(prize.is_donor_allowed_to_receive(donor))
        eligible = prize.eligible_donors()
        self.assertEqual(4, len(eligible))
Esempio n. 18
0
 def test_cannot_exceed_max_winners(self):
   targetPrize = randgen.generate_prize(self.rand,event=self.event)
   targetPrize.maxwinners=2
   targetPrize.save()
   numDonors = 4
   donors = []
   for i in range(0, numDonors):
     donor = randgen.generate_donor(self.rand)
     donor.save()
     donors.append(donor)
   pw0 = tracker.models.PrizeWinner(winner=donors[0], prize=targetPrize)
   pw0.clean()
   pw0.save()
   pw1 = tracker.models.PrizeWinner(winner=donors[1], prize=targetPrize)
   pw1.clean()
   pw1.save()
   with self.assertRaises(ValidationError):
     pw2 = tracker.models.PrizeWinner(winner=donors[2], prize=targetPrize) 
     pw2.clean()
   pw0.acceptstate = 'DECLINED'
   pw0.save()
   pw2.clean()
   pw2.save()
Esempio n. 19
0
    def testCountryFilterEvent(self):
        countries = list(models.Country.objects.all()[0:4])
        self.event.allowed_prize_countries.add(countries[0])
        self.event.allowed_prize_countries.add(countries[1])
        self.event.save()
        prize = models.Prize.objects.create(event=self.event)
        donors = []
        for country in countries:
            donor = randgen.generate_donor(self.rand)
            donor.addresscountry = country
            donor.save()
            donors.append(donor)
            randgen.generate_donation(
                self.rand, event=self.event, donor=donor, minAmount=Decimal(prize.minimumbid)).save()

        self.assertTrue(prize.is_donor_allowed_to_receive(donors[0]))
        self.assertTrue(prize.is_donor_allowed_to_receive(donors[1]))
        self.assertFalse(prize.is_donor_allowed_to_receive(donors[2]))
        self.assertFalse(prize.is_donor_allowed_to_receive(donors[3]))
        eligible = prize.eligible_donors()
        self.assertEqual(2, len(eligible))
        # Test a different country set
        self.event.allowed_prize_countries.add(countries[3])
        self.event.save()
        self.assertTrue(prize.is_donor_allowed_to_receive(donors[0]))
        self.assertTrue(prize.is_donor_allowed_to_receive(donors[1]))
        self.assertFalse(prize.is_donor_allowed_to_receive(donors[2]))
        self.assertTrue(prize.is_donor_allowed_to_receive(donors[3]))
        eligible = prize.eligible_donors()
        self.assertEqual(3, len(eligible))
        # Test a blank country set
        self.event.allowed_prize_countries.clear()
        self.event.save()
        for donor in donors:
            self.assertTrue(prize.is_donor_allowed_to_receive(donor))
        eligible = prize.eligible_donors()
        self.assertEqual(4, len(eligible))
Esempio n. 20
0
 def test_cannot_exceed_max_winners(self):
     targetPrize = randgen.generate_prize(self.rand, event=self.event)
     targetPrize.maxwinners = 2
     targetPrize.save()
     numDonors = 4
     donors = []
     for i in range(0, numDonors):
         donor = randgen.generate_donor(self.rand)
         donor.save()
         donors.append(donor)
     pw0 = models.PrizeWinner(winner=donors[0], prize=targetPrize)
     pw0.clean()
     pw0.save()
     pw1 = models.PrizeWinner(winner=donors[1], prize=targetPrize)
     pw1.clean()
     pw1.save()
     with self.assertRaises(ValidationError):
         pw2 = models.PrizeWinner(winner=donors[2], prize=targetPrize)
         pw2.clean()
     pw0.pendingcount = 0
     pw0.declinecount = 1
     pw0.save()
     pw2.clean()
     pw2.save()
 def test_cannot_exceed_max_winners(self):
     targetPrize = randgen.generate_prize(self.rand, event=self.event)
     targetPrize.maxwinners = 2
     targetPrize.save()
     numDonors = 4
     donors = []
     for i in range(0, numDonors):
         donor = randgen.generate_donor(self.rand)
         donor.save()
         donors.append(donor)
     pw0 = models.PrizeWinner(winner=donors[0], prize=targetPrize)
     pw0.clean()
     pw0.save()
     pw1 = models.PrizeWinner(winner=donors[1], prize=targetPrize)
     pw1.clean()
     pw1.save()
     with self.assertRaises(ValidationError):
         pw2 = models.PrizeWinner(winner=donors[2], prize=targetPrize)
         pw2.clean()
     pw0.pendingcount = 0
     pw0.declinecount = 1
     pw0.save()
     pw2.clean()
     pw2.save()
Esempio n. 22
0
 def test_draw_prize_multiple_donors_norandom_nosum(self):
     startRun = self.runsList[25]
     endRun = self.runsList[34]
     prize = randgen.generate_prize(self.rand,
                                    event=self.event,
                                    sumDonations=False,
                                    randomDraw=False,
                                    startRun=startRun,
                                    endRun=endRun)
     prize.save()
     largestDonor = None
     largestAmount = Decimal('0.00')
     for donor in self.donorList:
         numDonations = self.rand.getrandbits(4)
         redHerrings = self.rand.getrandbits(4)
         for i in range(0, numDonations):
             donation = randgen.generate_donation(
                 self.rand,
                 donor=donor,
                 event=self.event,
                 minAmount=Decimal('0.01'),
                 maxAmount=Decimal('1000.00'),
                 minTime=prize.start_draw_time(),
                 maxTime=prize.end_draw_time())
             donation.save()
             if donation.amount > largestAmount:
                 largestDonor = donor
                 largestAmount = donation.amount
         # toss in a few extras to keep the drawer on its toes
         for i in range(0, redHerrings):
             donation = None
             if self.rand.getrandbits(1) == 0:
                 donation = randgen.generate_donation(
                     self.rand,
                     donor=donor,
                     event=self.event,
                     minAmount=Decimal('1000.01'),
                     maxAmount=Decimal('2000.00'),
                     maxTime=prize.start_draw_time() -
                     datetime.timedelta(seconds=1))
             else:
                 donation = randgen.generate_donation(
                     self.rand,
                     donor=donor,
                     event=self.event,
                     minAmount=Decimal('1000.01'),
                     maxAmount=prize.minimumbid - Decimal('2000.00'),
                     minTime=prize.end_draw_time() +
                     datetime.timedelta(seconds=1))
             donation.save()
     eligibleDonors = prize.eligible_donors()
     self.assertEqual(1, len(eligibleDonors))
     self.assertEqual(largestDonor.id, eligibleDonors[0]['donor'])
     self.assertEqual(1.0, eligibleDonors[0]['weight'])
     self.assertEqual(largestAmount, eligibleDonors[0]['amount'])
     for seed in [9524, 373, 747]:
         prize.prizewinner_set.all().delete()
         prize.save()
         result, message = prizeutil.draw_prize(prize, seed)
         self.assertTrue(result)
         self.assertEqual(largestDonor.id, prize.get_winner().id)
     newDonor = randgen.generate_donor(self.rand)
     newDonor.save()
     newDonation = randgen.generate_donation(
         self.rand,
         donor=newDonor,
         event=self.event,
         minAmount=Decimal('1000.01'),
         maxAmount=Decimal('2000.00'),
         minTime=prize.start_draw_time(),
         maxTime=prize.end_draw_time())
     newDonation.save()
     eligibleDonors = prize.eligible_donors()
     self.assertEqual(1, len(eligibleDonors))
     self.assertEqual(newDonor.id, eligibleDonors[0]['donor'])
     self.assertEqual(1.0, eligibleDonors[0]['weight'])
     self.assertEqual(newDonation.amount, eligibleDonors[0]['amount'])
     for seed in [9524, 373, 747]:
         prize.prizewinner_set.all().delete()
         prize.save()
         result, message = prizeutil.draw_prize(prize, seed)
         self.assertTrue(result)
         self.assertEqual(newDonor.id, prize.get_winner().id)