def test_iter_payday_events(self): Payday.start().run() team = self.make_participant('team', kind='group') alice = self.make_participant('alice') self.make_exchange('mango-cc', 10000, 0, alice) self.make_exchange('mango-cc', -5000, 0, alice) self.db.run(""" UPDATE transfers SET timestamp = "timestamp" - interval '1 month' """) bob = self.make_participant('bob') carl = self.make_participant('carl') david = self.make_participant('david') self.make_exchange('mango-cc', 10000, 0, david) david.set_tip_to(team, Decimal('1.00')) team.set_take_for(bob, Decimal('1.00'), bob) alice.set_tip_to(bob, Decimal('5.00')) assert bob.balance == 0 for i in range(2): Payday.start().run() self.db.run(""" UPDATE paydays SET ts_start = ts_start - interval '1 week' , ts_end = ts_end - interval '1 week'; UPDATE transfers SET timestamp = "timestamp" - interval '1 week'; """) bob = Participant.from_id(bob.id) assert bob.balance == 12 Payday().start() events = list(iter_payday_events(self.db, bob)) assert len(events) == 9 assert events[0]['kind'] == 'totals' assert events[0]['given'] == 0 assert events[0]['received'] == 12 assert events[1]['kind'] == 'day-open' assert events[1]['payday_number'] == 2 assert events[2]['balance'] == 12 assert events[-1]['kind'] == 'day-close' assert events[-1]['balance'] == 0 alice = Participant.from_id(alice.id) assert alice.balance == 4990 events = list(iter_payday_events(self.db, alice)) assert events[0]['given'] == 10 assert len(events) == 11 carl = Participant.from_id(carl.id) assert carl.balance == 0 events = list(iter_payday_events(self.db, carl)) assert len(events) == 0
def test_iter_payday_events_with_failed_exchanges(self): alice = self.make_participant('alice') self.make_exchange('mango-cc', 50, 0, alice) self.make_exchange('mango-cc', 12, 0, alice, status='failed') self.make_exchange('mango-ba', -40, 0, alice, status='failed') events = list(iter_payday_events(self.db, alice)) assert len(events) == 5 assert events[0]['kind'] == 'day-open' assert events[0]['balance'] == 50 assert events[1]['kind'] == 'credit' assert events[1]['balance'] == 50 assert events[2]['kind'] == 'charge' assert events[2]['balance'] == 50 assert events[3]['kind'] == 'charge' assert events[3]['balance'] == 50 assert events[4]['kind'] == 'day-close' assert events[4]['balance'] == 0
def test_iter_payday_events_with_failed_exchanges(self): alice = self.make_participant('alice') self.make_exchange('mango-cc', 50, 0, alice) self.make_exchange('mango-cc', 12, 0, alice, status='failed') self.make_exchange('mango-ba', -40, 0, alice, status='failed') events = list(iter_payday_events(self.db, alice)) assert len(events) == 5 assert events[0]['kind'] == 'day-open' assert events[0]['balances'] == EUR(50) assert events[1]['kind'] == 'credit' assert events[1]['balances'] == EUR(50) assert events[2]['kind'] == 'charge' assert events[2]['balances'] == EUR(50) assert events[3]['kind'] == 'charge' assert events[3]['balances'] == EUR(50) assert events[4]['kind'] == 'day-close' assert events[4]['balances'] == 0
def test_iter_payday_events(self): now = datetime.now() Payday.start().run() team = self.make_participant('team', kind='group') alice = self.make_participant('alice') self.make_exchange('mango-cc', 10000, 0, alice) self.make_exchange('mango-cc', -5000, 0, alice) self.db.run(""" UPDATE transfers SET timestamp = "timestamp" - interval '1 month' """) bob = self.make_participant('bob') carl = self.make_participant('carl') david = self.make_participant('david') self.make_exchange('mango-cc', 10000, 0, david) david.set_tip_to(team, Decimal('1.00')) team.set_take_for(bob, Decimal('1.00'), team) alice.set_tip_to(bob, Decimal('5.00')) assert bob.balance == 0 for i in range(2): Payday.start().run() self.db.run(""" UPDATE paydays SET ts_start = ts_start - interval '1 week' , ts_end = ts_end - interval '1 week'; UPDATE transfers SET timestamp = "timestamp" - interval '1 week'; """) bob = Participant.from_id(bob.id) assert bob.balance == 12 Payday().start() # Make sure events are all in the same year delta = '%s days' % (364 - (now - datetime(now.year, 1, 1)).days) self.db.run(""" UPDATE paydays SET ts_start = ts_start + interval %(delta)s , ts_end = ts_end + interval %(delta)s; UPDATE transfers SET timestamp = "timestamp" + interval %(delta)s; """, dict(delta=delta)) events = list(iter_payday_events(self.db, bob, now.year)) assert len(events) == 9 assert events[0]['kind'] == 'totals' assert events[0]['given'] == 0 assert events[0]['received'] == 12 assert events[1]['kind'] == 'day-open' assert events[1]['payday_number'] == 2 assert events[2]['balance'] == 12 assert events[-1]['kind'] == 'day-close' assert events[-1]['balance'] == 0 alice = Participant.from_id(alice.id) assert alice.balance == 4990 events = list(iter_payday_events(self.db, alice, now.year)) assert events[0]['given'] == 10 assert len(events) == 11 carl = Participant.from_id(carl.id) assert carl.balance == 0 events = list(iter_payday_events(self.db, carl, now.year)) assert len(events) == 0
def test_iter_payday_events(self): now = datetime.now() Payday.start().run() team = self.make_participant('team', kind='group') alice = self.make_participant('alice') self.make_exchange('mango-cc', 10000, 0, alice) self.make_exchange('mango-cc', -5000, 0, alice) self.db.run(""" UPDATE exchanges SET timestamp = "timestamp" - interval '1 week' """) bob = self.make_participant('bob') carl = self.make_participant('carl') david = self.make_participant('david') self.make_exchange('mango-cc', 10000, 0, david) david.set_tip_to(team, EUR('1.00')) team.set_take_for(bob, EUR('1.00'), team) alice.set_tip_to(bob, EUR('5.00')) assert bob.balance == 0 for i in range(2): Payday.start().run() self.db.run(""" UPDATE exchanges SET timestamp = "timestamp" - interval '1 week'; UPDATE paydays SET ts_start = ts_start - interval '1 week' , ts_end = ts_end - interval '1 week'; UPDATE transfers SET timestamp = "timestamp" - interval '1 week'; """) bob = Participant.from_id(bob.id) assert bob.balance == 12 Payday().start() # Make sure events are all in the same year delta = '%s days' % (364 - (now - datetime(now.year, 1, 1)).days) self.db.run( """ UPDATE exchanges SET timestamp = "timestamp" + interval %(delta)s; UPDATE paydays SET ts_start = ts_start + interval %(delta)s; UPDATE paydays SET ts_end = ts_end + interval %(delta)s WHERE ts_end >= ts_start; UPDATE transfers SET timestamp = "timestamp" + interval %(delta)s; """, dict(delta=delta)) events = list(iter_payday_events(self.db, bob, now.year)) assert len(events) == 9 assert events[0]['kind'] == 'totals' assert not events[0]['regular_donations']['sent'] assert events[0]['regular_donations']['received'] == EUR(12) assert events[1]['kind'] == 'day-open' assert events[1]['payday_number'] == 3 assert events[2]['balances'] == EUR(12) assert events[-1]['kind'] == 'day-close' assert events[-1]['balances'] == 0 alice = Participant.from_id(alice.id) assert alice.balance == 4990 events = list(iter_payday_events(self.db, alice, now.year)) assert events[0]['regular_donations']['sent'] == EUR(10) assert len(events) == 11 carl = Participant.from_id(carl.id) assert carl.balance == 0 events = list(iter_payday_events(self.db, carl, now.year)) assert len(events) == 0