def test3paricipantsolver(self): ''' create one pot, 3 participants, one expense solve this: the two others have to pay 1/3 of the total expense. ''' from moneypot.models import Participant import datetime pot = _make_a_pot() alice = Participant(name='Alice', email='*****@*****.**') pot.participants.append(alice) # share factor defaults to 1 bob = Participant(name='Bob', email='*****@*****.**') pot.participants.append(bob) # with default share factor of 1 charlie = Participant(name='charlie', email='*****@*****.**') pot.participants.append(charlie) alice.add_expense(description='Water', amount=3, date=datetime.date.today()) #close this pot and create open payment to balance the payments #alice paid 3 Euro, bob has to pay 1 euro to alice and charlie too #TODO: there may be problems with half-cent payments... what to do about this? payments = pot.close_and_solve() self.assertEqual(len(payments), 2) payment = payments[0] self.assertEqual(payment.from_participant, bob) self.assertEqual(payment.to_participant, alice) self.assertEqual(payment.amount, 1) self.assertEqual(payment.status, 'open') payment = payments[1] self.assertEqual(payment.from_participant, charlie) self.assertEqual(payment.to_participant, alice) self.assertEqual(payment.amount, 1) self.assertEqual(payment.status, 'open')
def test_sum(self): from moneypot.models import Participant import datetime pot = _make_a_pot() alice = Participant(name='Alice', email='*****@*****.**') pot.participants.append(alice) transaction.begin() alice.add_expense(description='Water', amount=10, date=datetime.date.today()) self.assertEqual(pot.sum, 10)
def test_sorted_expenses(self): ''' sort expenses by date ''' from moneypot.models import Participant import datetime pot = _make_a_pot() self.session.add(pot) self.session.flush() # is needed for pot having an id alice = Participant(name='Alice', email='*****@*****.**') pot.participants.append(alice) #add 2 expenses, one from 2000 alice.add_expense(description='Water', amount=10, date=datetime.date.today()) alice.add_expense(description='Juice', amount=5, date=datetime.date(200, 1, 1)) expense_list = pot.expenses_sorted_by_date() self.assertEqual(len(expense_list), 2) self.assertEqual(expense_list[0].description, 'Juice') self.assertEqual(expense_list[1].description, 'Water')
def test_result(self): ''' let's assume alice spend 10€, and bob 5€. But alice has share_factor 2, bob has 1. Therefore their result should be 0 ''' from moneypot.models import Participant import datetime pot = _make_a_pot() alice = Participant(name='Alice', email='*****@*****.**') pot.participants.append(alice) alice.share_factor = 2 bob = Participant(name='Bob', email='*****@*****.**') pot.participants.append(bob) # with default share factor of one alice.add_expense(description='Water', amount=10, date=datetime.date.today()) bob.add_expense(description='Juice', amount=5, date=datetime.date.today()) self.assertEqual(pot.sum, 15) self.assertEqual(pot.share_factor_sum, 3) self.assertEqual(alice.sum, 10) self.assertEqual(alice.result, 0) self.assertEqual(bob.result, 0)
def test2paricipantsolver(self): ''' create one pot, two participants, one expense solve this: second participant must pay this amount ''' from moneypot.models import Participant import datetime pot = _make_a_pot() alice = Participant(name='Alice', email='*****@*****.**') pot.participants.append(alice) # share factor defaults to 1 bob = Participant(name='Bob', email='*****@*****.**') pot.participants.append(bob) # with default share factor of 1 alice.add_expense(description='Water', amount=10, date=datetime.date.today()) #close this pot and create open payment to balance the payments #alice paid 10 Euro, bob has to pay 5 euro to alice payments = pot.close_and_solve() self.assertEqual(len(payments), 1) payment = payments[0] self.assertEqual(payment.from_participant, bob) self.assertEqual(payment.to_participant, alice) self.assertEqual(payment.amount, 5) self.assertEqual(payment.status, 'open')