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))
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)
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'])
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)
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)
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)
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)
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)
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)
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 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))
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()
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))
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()
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)