Exemplo n.º 1
0
    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')
Exemplo n.º 2
0
 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)
Exemplo n.º 3
0
 def test_share_factor_sum(self):
     from moneypot.models import Participant
     pot = _make_a_pot()
     alice = Participant(name='Alice', email='*****@*****.**')
     pot.participants.append(alice)
     alice.share_factor = 2
     self.assertEqual(pot.share_factor_sum, 2)
     bob = Participant(name='Bob', email='*****@*****.**')
     pot.participants.append(bob)  # with default share factor of one
     self.assertEqual(pot.share_factor_sum, 3)
Exemplo n.º 4
0
 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')
Exemplo n.º 5
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')
Exemplo n.º 6
0
 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)
Exemplo n.º 7
0
 def test_unicode(self):
     from moneypot.models import Participant
     p = Participant(name="P1", email="*****@*****.**")
     self.assertEqual(p.__unicode__(), 'P1 ([email protected])')