def test_update_cached_amounts(self): team = self.make_participant('team', kind='group') alice = self.make_participant('alice', balance=100) bob = self.make_participant('bob') carl = self.make_participant('carl', balance=1.56) dana = self.make_participant('dana') emma = Participant.make_stub(username='******') alice.set_tip_to(dana, '3.00') alice.set_tip_to(bob, '6.00') alice.set_tip_to(emma, '1.00') alice.set_tip_to(team, '4.00') bob.set_tip_to(alice, '5.00') team.add_member(bob) team.set_take_for(bob, D('1.00'), bob) bob.set_tip_to(dana, '2.00') # funded by bob's take bob.set_tip_to(emma, '7.00') # not funded, insufficient receiving carl.set_tip_to(dana, '2.08') # not funded, insufficient balance def check(): alice = Participant.from_username('alice') bob = Participant.from_username('bob') carl = Participant.from_username('carl') dana = Participant.from_username('dana') emma = Participant.from_username('emma') assert alice.giving == D('13.00') assert alice.pledging == D('1.00') assert alice.receiving == D('5.00') assert bob.giving == D('7.00') assert bob.receiving == D('7.00') assert bob.taking == D('1.00') assert carl.giving == D('0.00') assert carl.receiving == D('0.00') assert dana.receiving == D('5.00') assert dana.npatrons == 2 assert emma.receiving == D('1.00') assert emma.npatrons == 1 funded_tips = self.db.all("SELECT amount FROM tips WHERE is_funded ORDER BY id") assert funded_tips == [3, 6, 1, 4, 5, 2] # Pre-test check check() # Check that update_cached_amounts doesn't mess anything up Payday.start().update_cached_amounts() check() # Check that update_cached_amounts actually updates amounts self.db.run(""" UPDATE tips SET is_funded = false; UPDATE participants SET giving = 0 , npatrons = 0 , pledging = 0 , receiving = 0 , taking = 0; """) Payday.start().update_cached_amounts() check()
def test_update_cached_amounts(self): team = self.make_participant('team', kind='group') alice = self.make_participant('alice') alice_card = self.upsert_route(alice, 'stripe-card') bob = self.make_participant('bob') carl = self.make_participant('carl') carl_card = self.upsert_route(carl, 'stripe-card') dana = self.make_participant('dana') emma = Participant.make_stub(username='******') team2 = self.make_participant('team2', kind='group') team2.add_member(dana) alice.set_tip_to(dana, EUR('3.00')) self.make_payin_and_transfer(alice_card, dana, EUR('30.00')) alice.set_tip_to(bob, EUR('6.00')) self.make_payin_and_transfer(alice_card, bob, EUR('60.00')) alice.set_tip_to(emma, EUR('0.50')) alice.set_tip_to(team, EUR('1.20')) alice.set_tip_to(team2, EUR('0.49')) self.make_payin_and_transfer(alice_card, team2, EUR('4.90')) bob.set_tip_to(alice, EUR('5.00')) team.set_take_for(bob, EUR('1.00'), team) self.make_payin_and_transfer(alice_card, team, EUR('12.00')) bob.set_tip_to(dana, EUR('2.00')) # funded by bob's take bob.set_tip_to(emma, EUR('7.00')) # not funded, insufficient receiving carl.set_tip_to(dana, EUR('2.08')) # not funded, insufficient balance self.make_payin_and_transfer(carl_card, dana, EUR('1.56')) fred = self.make_participant('fred') fred_card = self.upsert_route(fred, 'stripe-card') fred.set_tip_to(dana, EUR('2.22')) self.make_payin_and_transfer(fred_card, dana, EUR('8.88')) self.db.run( "UPDATE participants SET is_suspended = true WHERE username = '******'" ) dana.update_receiving() def check(): alice = Participant.from_username('alice') bob = Participant.from_username('bob') carl = Participant.from_username('carl') dana = Participant.from_username('dana') emma = Participant.from_username('emma') assert alice.giving == EUR('10.69') assert alice.receiving == EUR('0.00') assert alice.npatrons == 0 assert alice.nteampatrons == 0 assert bob.giving == EUR('0.00') assert bob.taking == EUR('1.00') assert bob.receiving == EUR('7.00') assert bob.npatrons == 1 assert bob.nteampatrons == 1 assert carl.giving == EUR('0.00') assert carl.receiving == EUR('0.00') assert carl.npatrons == 0 assert carl.nteampatrons == 0 assert dana.receiving == EUR('3.49') assert dana.npatrons == 1 assert dana.nteampatrons == 1 assert emma.receiving == EUR('0.50') assert emma.npatrons == 1 assert emma.nteampatrons == 0 funded_tips = self.db.all( "SELECT amount FROM tips WHERE is_funded ORDER BY id") assert funded_tips == [ 3, 6, 0.5, EUR('1.20'), EUR('0.49'), EUR('2.22') ] team = Participant.from_username('team') assert team.receiving == EUR('1.20') assert team.npatrons == 1 assert team.leftover == EUR('0.20') team2 = Participant.from_username('team2') assert team2.receiving == EUR('0.49') assert team2.npatrons == 1 assert team2.leftover == EUR('0.00') janet = self.janet.refetch() assert janet.giving == 0 assert janet.receiving == 0 assert janet.taking == 0 assert janet.npatrons == 0 assert janet.nteampatrons == 0 # Pre-test check check() # Check that update_cached_amounts doesn't mess anything up Payday.start().update_cached_amounts() check() # Check that update_cached_amounts actually updates amounts self.db.run(""" UPDATE tips t SET is_funded = true FROM participants p WHERE p.id = t.tippee AND p.mangopay_user_id IS NOT NULL; UPDATE participants SET giving = (10000,'EUR') , taking = (10000,'EUR') WHERE mangopay_user_id IS NOT NULL; UPDATE participants SET npatrons = 10000 , receiving = (10000,'EUR'); """) Payday.start().update_cached_amounts() check() # Check that the update methods of Participant concur for p in self.db.all("SELECT p.*::participants FROM participants p"): p.update_receiving() p.update_giving() check()
def make_stub(self, **kw): return Participant.make_stub(**kw)
def make_stub(self, **kw): return Participant.make_stub(**kw)
def test_update_cached_amounts(self): team = self.make_participant('team', kind='group') alice = self.make_participant('alice') alice_card = self.upsert_route(alice, 'stripe-card') bob = self.make_participant('bob') carl = self.make_participant('carl') carl_card = self.upsert_route(carl, 'stripe-card') dana = self.make_participant('dana') emma = Participant.make_stub(username='******') team2 = self.make_participant('team2', kind='group') team2.add_member(dana) alice.set_tip_to(dana, EUR('3.00')) self.make_payin_and_transfer(alice_card, dana, EUR('30.00')) alice.set_tip_to(bob, EUR('6.00')) self.make_payin_and_transfer(alice_card, bob, EUR('60.00')) alice.set_tip_to(emma, EUR('0.50')) alice.set_tip_to(team, EUR('1.20')) alice.set_tip_to(team2, EUR('0.49')) self.make_payin_and_transfer(alice_card, team2, EUR('4.90')) bob.set_tip_to(alice, EUR('5.00')) team.set_take_for(bob, EUR('1.00'), team) self.make_payin_and_transfer(alice_card, team, EUR('12.00')) bob.set_tip_to(dana, EUR('2.00')) # funded by bob's take bob.set_tip_to(emma, EUR('7.00')) # not funded, insufficient receiving carl.set_tip_to(dana, EUR('2.08')) # not funded, insufficient balance self.make_payin_and_transfer(carl_card, dana, EUR('1.56')) def check(): alice = Participant.from_username('alice') bob = Participant.from_username('bob') carl = Participant.from_username('carl') dana = Participant.from_username('dana') emma = Participant.from_username('emma') assert alice.giving == EUR('10.69') assert alice.receiving == EUR('0.00') assert alice.npatrons == 0 assert alice.nteampatrons == 0 assert bob.giving == EUR('0.00') assert bob.taking == EUR('1.00') assert bob.receiving == EUR('7.00') assert bob.npatrons == 1 assert bob.nteampatrons == 1 assert carl.giving == EUR('0.00') assert carl.receiving == EUR('0.00') assert carl.npatrons == 0 assert carl.nteampatrons == 0 assert dana.receiving == EUR('3.49') assert dana.npatrons == 1 assert dana.nteampatrons == 1 assert emma.receiving == EUR('0.50') assert emma.npatrons == 1 assert emma.nteampatrons == 0 funded_tips = self.db.all("SELECT amount FROM tips WHERE is_funded ORDER BY id") assert funded_tips == [3, 6, 0.5, EUR('1.20'), EUR('0.49')] team = Participant.from_username('team') assert team.receiving == EUR('1.20') assert team.npatrons == 1 assert team.leftover == EUR('0.20') team2 = Participant.from_username('team2') assert team2.receiving == EUR('0.49') assert team2.npatrons == 1 assert team2.leftover == EUR('0.00') janet = self.janet.refetch() assert janet.giving == 0 assert janet.receiving == 0 assert janet.taking == 0 assert janet.npatrons == 0 assert janet.nteampatrons == 0 # Pre-test check check() # Check that update_cached_amounts doesn't mess anything up Payday.start().update_cached_amounts() check() # Check that update_cached_amounts actually updates amounts self.db.run(""" UPDATE tips t SET is_funded = true FROM participants p WHERE p.id = t.tippee AND p.mangopay_user_id IS NOT NULL; UPDATE participants SET giving = (10000,'EUR') , taking = (10000,'EUR') WHERE mangopay_user_id IS NOT NULL; UPDATE participants SET npatrons = 10000 , receiving = (10000,'EUR') WHERE status = 'active'; """) Payday.start().update_cached_amounts() check() # Check that the update methods of Participant concur for p in self.db.all("SELECT p.*::participants FROM participants p"): p.update_receiving() p.update_giving() check()
def test_update_cached_amounts(self): team = self.make_participant('team', kind='group') alice = self.make_participant('alice', balance=100) bob = self.make_participant('bob') carl = self.make_participant('carl', balance=1.56) dana = self.make_participant('dana') emma = Participant.make_stub(username='******') team2 = self.make_participant('team2', kind='group') team2.add_member(dana) alice.set_tip_to(dana, '3.00') alice.set_tip_to(bob, '6.00') alice.set_tip_to(emma, '0.50') alice.set_tip_to(team, '1.20') alice.set_tip_to(team2, '0.49') bob.set_tip_to(alice, '5.00') team.add_member(bob) team.set_take_for(bob, D('1.00'), team) bob.set_tip_to(dana, '2.00') # funded by bob's take bob.set_tip_to(emma, '7.00') # not funded, insufficient receiving carl.set_tip_to(dana, '2.08') # not funded, insufficient balance def check(): alice = Participant.from_username('alice') bob = Participant.from_username('bob') carl = Participant.from_username('carl') dana = Participant.from_username('dana') emma = Participant.from_username('emma') assert alice.giving == D('10.69') assert alice.receiving == D('5.00') assert bob.giving == D('7.00') assert bob.receiving == D('7.00') assert bob.taking == D('1.00') assert carl.giving == D('0.00') assert carl.receiving == D('0.00') assert dana.receiving == D('5.00') assert dana.npatrons == 2 assert emma.receiving == D('0.50') assert emma.npatrons == 1 funded_tips = self.db.all( "SELECT amount FROM tips WHERE is_funded ORDER BY id") assert funded_tips == [3, 6, 0.5, D('1.20'), D('0.49'), 5, 2] team = Participant.from_username('team') assert team.receiving == D('1.20') assert team.npatrons == 1 team2 = Participant.from_username('team2') assert team2.receiving == D('0.49') assert team2.npatrons == 1 janet = self.janet.refetch() assert janet.giving == 0 assert janet.receiving == 0 assert janet.taking == 0 assert janet.npatrons == 0 # Pre-test check check() # Check that update_cached_amounts doesn't mess anything up Payday.start().update_cached_amounts() check() # Check that update_cached_amounts actually updates amounts self.db.run(""" UPDATE tips t SET is_funded = true FROM participants p WHERE p.id = t.tippee AND p.mangopay_user_id IS NOT NULL; UPDATE participants SET giving = 10000 , taking = 10000 WHERE mangopay_user_id IS NOT NULL; UPDATE participants SET npatrons = 10000 , receiving = 10000 WHERE status = 'active'; """) Payday.start().update_cached_amounts() check() # Check that the update methods of Participant concur for p in self.db.all("SELECT p.*::participants FROM participants p"): p.update_receiving() p.update_giving() check()
def test_update_cached_amounts(self): team = self.make_participant('team', kind='group') alice = self.make_participant('alice', balance=100) bob = self.make_participant('bob') carl = self.make_participant('carl', balance=1.56) dana = self.make_participant('dana') emma = Participant.make_stub(username='******') team2 = self.make_participant('team2', kind='group') team2.add_member(dana) alice.set_tip_to(dana, '3.00') alice.set_tip_to(bob, '6.00') alice.set_tip_to(emma, '0.50') alice.set_tip_to(team, '1.20') alice.set_tip_to(team2, '0.49') bob.set_tip_to(alice, '5.00') team.add_member(bob) team.set_take_for(bob, D('1.00'), team) bob.set_tip_to(dana, '2.00') # funded by bob's take bob.set_tip_to(emma, '7.00') # not funded, insufficient receiving carl.set_tip_to(dana, '2.08') # not funded, insufficient balance def check(): alice = Participant.from_username('alice') bob = Participant.from_username('bob') carl = Participant.from_username('carl') dana = Participant.from_username('dana') emma = Participant.from_username('emma') assert alice.giving == D('10.69') assert alice.receiving == D('5.00') assert bob.giving == D('7.00') assert bob.receiving == D('7.00') assert bob.taking == D('1.00') assert carl.giving == D('0.00') assert carl.receiving == D('0.00') assert dana.receiving == D('5.00') assert dana.npatrons == 2 assert emma.receiving == D('0.50') assert emma.npatrons == 1 funded_tips = self.db.all("SELECT amount FROM tips WHERE is_funded ORDER BY id") assert funded_tips == [3, 6, 0.5, D('1.20'), D('0.49'), 5, 2] team = Participant.from_username('team') assert team.receiving == D('1.20') assert team.npatrons == 1 team2 = Participant.from_username('team2') assert team2.receiving == D('0.49') assert team2.npatrons == 1 janet = self.janet.refetch() assert janet.giving == 0 assert janet.receiving == 0 assert janet.taking == 0 assert janet.npatrons == 0 # Pre-test check check() # Check that update_cached_amounts doesn't mess anything up Payday.start().update_cached_amounts() check() # Check that update_cached_amounts actually updates amounts self.db.run(""" UPDATE tips t SET is_funded = true FROM participants p WHERE p.id = t.tippee AND p.mangopay_user_id IS NOT NULL; UPDATE participants SET giving = 10000 , taking = 10000 WHERE mangopay_user_id IS NOT NULL; UPDATE participants SET npatrons = 10000 , receiving = 10000 WHERE status = 'active'; """) Payday.start().update_cached_amounts() check() # Check that the update methods of Participant concur for p in self.db.all("SELECT p.*::participants FROM participants p"): p.update_receiving() p.update_giving() check()
def test_update_cached_amounts(self): team = self.make_participant('team', kind='group') alice = self.make_participant('alice', balance=100) bob = self.make_participant('bob') carl = self.make_participant('carl', balance=1.56) dana = self.make_participant('dana') emma = Participant.make_stub(username='******') alice.set_tip_to(dana, '3.00') alice.set_tip_to(bob, '6.00') alice.set_tip_to(emma, '0.50') alice.set_tip_to(team, '1.00') bob.set_tip_to(alice, '5.00') team.add_member(bob) team.set_take_for(bob, D('1.00'), bob) bob.set_tip_to(dana, '2.00') # funded by bob's take bob.set_tip_to(emma, '7.00') # not funded, insufficient receiving carl.set_tip_to(dana, '2.08') # not funded, insufficient balance def check(): alice = Participant.from_username('alice') bob = Participant.from_username('bob') carl = Participant.from_username('carl') dana = Participant.from_username('dana') emma = Participant.from_username('emma') assert alice.giving == D('10.00') assert alice.receiving == D('5.00') assert bob.giving == D('7.00') assert bob.receiving == D('7.00') assert bob.taking == D('1.00') assert carl.giving == D('0.00') assert carl.receiving == D('0.00') assert dana.receiving == D('5.00') assert dana.npatrons == 2 assert emma.receiving == D('0.50') assert emma.npatrons == 1 funded_tips = self.db.all( "SELECT amount FROM tips WHERE is_funded ORDER BY id") assert funded_tips == [3, 6, 0.5, 1, 5, 2] # Pre-test check check() # Check that update_cached_amounts doesn't mess anything up Payday.start().update_cached_amounts() check() # Check that update_cached_amounts actually updates amounts self.db.run(""" UPDATE tips t SET is_funded = false FROM participants p WHERE p.id = t.tippee AND p.mangopay_user_id IS NOT NULL; UPDATE participants SET giving = 0 , npatrons = 0 , receiving = 0 , taking = 0 WHERE mangopay_user_id IS NOT NULL; """) Payday.start().update_cached_amounts() check()