Пример #1
0
    def test_two_payments_involved(self):
        o1 = Person.objects.create(name=u'Owner 1', owner=True)
        o2 = Person.objects.create(name=u'Owner 2', owner=True)

        ex = Expense.objects.create(date=date(2011, 11, 12))
        ex.payment_set.create(ammount=900, paid_by=o1)
        ex.payment_set.create(ammount=100, paid_by=o2)
        ex.responsibility_set.create(ammount=300, owner=o1)
        ex.responsibility_set.create(ammount=700, owner=o2)

        ex = Expense.objects.create(date=date(2011, 11, 12))
        ex.payment_set.create(ammount=2000, paid_by=o2)
        ex.responsibility_set.create(ammount=1000, owner=o1)
        ex.responsibility_set.create(ammount=1000, owner=o2)

        payments = calculate_interpayments()
        self.assertEquals(len(payments), 1)
        self.assertEquals(payments[0], (o1, o2, 400))

        Interpayment.objects.create(date=date(2011, 11, 13),
                                    by=o1,
                                    to=o2,
                                    ammount=300)

        payments = calculate_interpayments()
        self.assertEquals(len(payments), 1)
        self.assertEquals(payments[0], (o1, o2, 100))

        Interpayment.objects.create(date=date(2011, 11, 13),
                                    by=o1,
                                    to=o2,
                                    ammount=100)

        payments = calculate_interpayments()
        self.assertEquals(len(payments), 0)
Пример #2
0
    def test_two_payments_involved(self):
        o1 = Person.objects.create(name=u'Owner 1', owner=True)
        o2 = Person.objects.create(name=u'Owner 2', owner=True)
        p1 = Person.objects.create(name=u'Pilot')

        ex = Expense.objects.create(date=date(2011, 11, 12))
        ex.payment_set.create(ammount=900, paid_by=o1)
        ex.payment_set.create(ammount=100, paid_by=o2)
        ex.responsibility_set.create(ammount=300, owner=o1)
        ex.responsibility_set.create(ammount=700, owner=o2)

        ex = Expense.objects.create(date=date(2011, 11, 12))
        ex.payment_set.create(ammount=100, paid_by=p1)
        ex.responsibility_set.create(ammount=50, owner=o1)
        ex.responsibility_set.create(ammount=50, owner=o2)

        payments = calculate_interpayments()
        self.assertEquals(len(payments), 2)
        self.assertTrue((o2, o1, 550) in payments)
        self.assertTrue((o2, p1, 100) in payments)

        # pilot is paid by o1 instead of 02
        Interpayment.objects.create(date=date(2011, 11, 13), by=o1, to=p1, ammount=100)

        payments = calculate_interpayments()
        self.assertEquals(len(payments), 1)
        self.assertEquals(payments[0], (o2, o1, 650))
        
        Interpayment.objects.create(date=date(2011, 11, 13), by=o2, to=o1, ammount=650)

        payments = calculate_interpayments()
        self.assertEquals(len(payments), 0)
Пример #3
0
    def test_two_payments_involved(self):
        o1 = Person.objects.create(name=u'Owner 1', owner=True)
        o2 = Person.objects.create(name=u'Owner 2', owner=True)

        ex = Expense.objects.create(date=date(2011, 11, 12))
        ex.payment_set.create(ammount=900, paid_by=o1)
        ex.payment_set.create(ammount=100, paid_by=o2)
        ex.responsibility_set.create(ammount=300, owner=o1)
        ex.responsibility_set.create(ammount=700, owner=o2)

        ex = Expense.objects.create(date=date(2011, 11, 12))
        ex.payment_set.create(ammount=2000, paid_by=o2)
        ex.responsibility_set.create(ammount=1000, owner=o1)
        ex.responsibility_set.create(ammount=1000, owner=o2)

        payments = calculate_interpayments()
        self.assertEquals(len(payments), 1)
        self.assertEquals(payments[0], (o1, o2, 400))
        
        Interpayment.objects.create(date=date(2011, 11, 13), by=o1, to=o2, ammount=300)

        payments = calculate_interpayments()
        self.assertEquals(len(payments), 1)
        self.assertEquals(payments[0], (o1, o2, 100))
        
        Interpayment.objects.create(date=date(2011, 11, 13), by=o1, to=o2, ammount=100)

        payments = calculate_interpayments()
        self.assertEquals(len(payments), 0)
Пример #4
0
    def test_cents_and_float_precision(self):
        o1 = Person.objects.create(name=u'Owner 1', owner=True)
        o2 = Person.objects.create(name=u'Owner 2', owner=True)
        p1 = Person.objects.create(name=u'Pilot')

        ex = Expense.objects.create(date=date(2011, 11, 12))
        ex.payment_set.create(ammount=900, paid_by=o1)
        ex.payment_set.create(ammount=100, paid_by=o2)
        ex.responsibility_set.create(ammount=300, owner=o1)
        ex.responsibility_set.create(ammount=700, owner=o2)

        ex = Expense.objects.create(date=date(2011, 11, 12))
        ex.payment_set.create(ammount=100.01, paid_by=p1)
        ex.responsibility_set.create(ammount=50, owner=o1)
        ex.responsibility_set.create(ammount=50.01, owner=o2)

        payments = calculate_interpayments()
        self.assertEquals(len(payments), 2)
        self.assertTrue((o2, o1, 550) in payments)
        self.assertTrue((o2, p1, 100.01) in payments)

        # pilot is paid by o1 instead of 02
        Interpayment.objects.create(date=date(2011, 11, 13),
                                    by=o1,
                                    to=p1,
                                    ammount=100)

        payments = calculate_interpayments()
        self.assertEquals(len(payments), 2)
        self.assertTrue((o2, o1, 650) in payments)
        self.assertTrue((o2, p1, .01) in payments)

        Interpayment.objects.create(date=date(2011, 11, 13),
                                    by=o2,
                                    to=o1,
                                    ammount=650)
        Interpayment.objects.create(date=date(2011, 11, 13),
                                    by=o2,
                                    to=p1,
                                    ammount=.01)

        payments = calculate_interpayments()
        self.assertEquals(len(payments), 0)
Пример #5
0
    def test_one_owes_all_to_other(self):
        o1 = Person.objects.create(name=u'Owner 1', owner=True)
        o2 = Person.objects.create(name=u'Owner 2', owner=True)

        ex = Expense.objects.create(date=date(2011, 11, 13))
        ex.payment_set.create(ammount=1000, paid_by=o2)
        ex.responsibility_set.create(ammount=1000, owner=o1)

        payments = calculate_interpayments()
        self.assertEquals(len(payments), 1)
        self.assertEquals(payments[0], (o1, o2, 1000))
Пример #6
0
    def test_no_interpayments_are_required_when_there_are_no_debts(self):
        o1 = Person.objects.create(name=u'Owner 1', owner=True)
        o2 = Person.objects.create(name=u'Owner 2', owner=True)

        ex = Expense.objects.create(date=date(2011, 11, 13))
        ex.payment_set.create(ammount=500, paid_by=o1)
        ex.payment_set.create(ammount=500, paid_by=o2)
        ex.responsibility_set.create(ammount=500, owner=o1)
        ex.responsibility_set.create(ammount=500, owner=o2)

        self.assertEquals(len(calculate_interpayments()), 0)
Пример #7
0
    def test_one_owes_all_to_other(self):
        o1 = Person.objects.create(name=u'Owner 1', owner=True)
        o2 = Person.objects.create(name=u'Owner 2', owner=True)

        ex = Expense.objects.create(date=date(2011, 11, 13))
        ex.payment_set.create(ammount=1000, paid_by=o2)
        ex.responsibility_set.create(ammount=1000, owner=o1)

        payments = calculate_interpayments()
        self.assertEquals(len(payments), 1)
        self.assertEquals(payments[0], (o1, o2, 1000))
Пример #8
0
    def test_no_interpayments_are_required_when_there_are_no_debts(self):
        o1 = Person.objects.create(name=u'Owner 1', owner=True)
        o2 = Person.objects.create(name=u'Owner 2', owner=True)

        ex = Expense.objects.create(date=date(2011, 11, 13))
        ex.payment_set.create(ammount=500, paid_by=o1)
        ex.payment_set.create(ammount=500, paid_by=o2)
        ex.responsibility_set.create(ammount=500, owner=o1)
        ex.responsibility_set.create(ammount=500, owner=o2)
        
        self.assertEquals(len(calculate_interpayments()), 0)
Пример #9
0
    def test_mixed_still_one_payment(self):
        o1 = Person.objects.create(name=u'Owner 1', owner=True)
        o2 = Person.objects.create(name=u'Owner 2', owner=True)

        ex = Expense.objects.create(date=date(2011, 11, 13))
        ex.payment_set.create(ammount=900, paid_by=o1)
        ex.payment_set.create(ammount=100, paid_by=o2)
        ex.responsibility_set.create(ammount=300, owner=o1)
        ex.responsibility_set.create(ammount=700, owner=o2)

        payments = calculate_interpayments()
        self.assertEquals(len(payments), 1)
        self.assertEquals(payments[0], (o2, o1, 600))
Пример #10
0
    def test_mixed_still_one_payment(self):
        o1 = Person.objects.create(name=u'Owner 1', owner=True)
        o2 = Person.objects.create(name=u'Owner 2', owner=True)

        ex = Expense.objects.create(date=date(2011, 11, 13))
        ex.payment_set.create(ammount=900, paid_by=o1)
        ex.payment_set.create(ammount=100, paid_by=o2)
        ex.responsibility_set.create(ammount=300, owner=o1)
        ex.responsibility_set.create(ammount=700, owner=o2)

        payments = calculate_interpayments()
        self.assertEquals(len(payments), 1)
        self.assertEquals(payments[0], (o2, o1, 600))
Пример #11
0
    def test_previous_interpayments_are_considered_in_calculation(self):
        o1 = Person.objects.create(name=u'Owner 1', owner=True)
        o2 = Person.objects.create(name=u'Owner 2', owner=True)

        ex = Expense.objects.create(date=date(2011, 11, 12))
        ex.payment_set.create(ammount=900, paid_by=o1)
        ex.payment_set.create(ammount=100, paid_by=o2)
        ex.responsibility_set.create(ammount=300, owner=o1)
        ex.responsibility_set.create(ammount=700, owner=o2)

        Interpayment.objects.create(date=date(2011, 11, 13), by=o2, to=o1, ammount=300)

        payments = calculate_interpayments()
        self.assertEquals(len(payments), 1)
        self.assertEquals(payments[0], (o2, o1, 300))
Пример #12
0
    def test_previous_interpayments_are_considered_in_calculation(self):
        o1 = Person.objects.create(name=u'Owner 1', owner=True)
        o2 = Person.objects.create(name=u'Owner 2', owner=True)

        ex = Expense.objects.create(date=date(2011, 11, 12))
        ex.payment_set.create(ammount=900, paid_by=o1)
        ex.payment_set.create(ammount=100, paid_by=o2)
        ex.responsibility_set.create(ammount=300, owner=o1)
        ex.responsibility_set.create(ammount=700, owner=o2)

        Interpayment.objects.create(date=date(2011, 11, 13),
                                    by=o2,
                                    to=o1,
                                    ammount=300)

        payments = calculate_interpayments()
        self.assertEquals(len(payments), 1)
        self.assertEquals(payments[0], (o2, o1, 300))