Exemple #1
0
 def option(self):
     flag = True
     while flag:
         print("Choose one of the following options to continue:")
         print("1 - show all data")
         print("2 - show data for specific date")
         print("3 - show expenses, ordered by categories")
         print("4 - add new income")
         print("5 - add new expense")
         print("6 - exit")
         choice = input()
         if choice == '1':
             obj = MoneyTracker(self.AggregatedObject)
             obj.list_user_data()
         if choice == '2':
             date = input()
             obj = MoneyTracker(self.AggregatedObject)
             obj.show_user_data_per_date(date)
         if choice == '3':
             obj = MoneyTracker(self.AggregatedObject)
             print(obj.list_user_expenses_ordered_by_categories())
         if choice == '4':
             print("New income amount:")
             money = input()
             if int(money) < 0:
                 raise CustomError('enter a valid amount')
             print("New income type:")
             income_category = input()
             print("New income date:")
             date = input()
             obj = MoneyTracker(self.AggregatedObject)
             i = Income(int(money), income_category, date)
             obj.add_income(i)
             # for el in obj.AggregatedObject.incomes:
             #   print(el)
         if choice == '5':
             print("New expense amount:")
             money = input()
             if int(money) < 0:
                 raise CustomError('enter a valid amount')
             print("New expense type:")
             expense_category = input()
             print("New expense date:")
             date = input()
             obj = MoneyTracker(self.AggregatedObject)
             i = Expense(int(money), expense_category, date)
             obj.add_expense(i)
             # for el in obj.AggregatedObject.expenses:
             #   print(el)
         if choice == '6':
             flag = False
         if choice not in ('1', '2', '3', '4', '5', '6'):
             raise Exception('Invalid input')
class MoneyTrackerTests(unittest.TestCase):
    def setUp(self):
        self.categories = [
            Income('760', 'Salary'),
            Expense('5.5', 'Eating Out'),
            Expense('34', 'Clothes'),
            Income('50', 'Savings')
        ]
        self.strings = [
            '760, Salary, New Income', '5.5, Eating Out, New Expense',
            '34, Clothes, New Expense', '50, Savings, New Income'
        ]

        self.strings1 = [
            '50, Savings, New Income', '15, Food, New Expense',
            '200, Deposit, New Income', '5, Sports, New Expense'
        ]

        self.categories1 = [
            Income('50', 'Savings'),
            Expense('15', 'Food'),
            Income('200', 'Deposit'),
            Expense('5', 'Sports')
        ]
        self.aggregator1 = AggregateData({
            '=== 22-03-2018 ===': self.strings,
            '=== 23-03-2018 ===': self.strings1
        })
        self.tracker1 = MoneyTracker(self.aggregator1)

    def test_list_user_expenses_ordered_by_categories(self):
        result = [
            self.categories[2], self.categories[1], self.categories1[1],
            self.categories1[3]
        ]
        self.assertEqual(
            self.tracker1.list_user_expenses_ordered_by_categories(), result)

    def test_list_income_categories(self):
        result = [
            self.categories[0], self.categories[3], self.categories1[0],
            self.categories1[2]
        ]
        self.assertEqual(self.tracker1.list_income_categories(), result)

    def test_list_expense(self):
        result = [
            self.categories[1], self.categories[2], self.categories1[1],
            self.categories1[3]
        ]
        self.assertEqual(self.tracker1.list_expense_categories(), result)

    def test_add_income(self):
        with self.subTest("with new date"):
            data = self.tracker1.list_user_data()
            self.tracker1.add_income("Stipendiq", 100, '22-03-2018')
            self.assertTrue(
                Income(100, "Stipendiq") in data['=== 22-03-2018 ==='])

        with self.subTest("with old date"):
            data = self.tracker1.list_user_data()
            self.tracker1.add_expense("Tototo", 1.5, '22-03-2018')
            self.assertTrue(
                Income(1.5, "Tototo") in data['=== 22-03-2018 ==='])

    def test_add_expense(self):
        with self.subTest("with new date"):
            data = self.tracker1.list_user_data()
            self.tracker1.add_expense("Kniga", 17, '22-03-9999')
            self.assertTrue(Expense(17, "Kniga") in data['=== 22-03-9999 ==='])

        with self.subTest("with old date"):
            data = self.tracker1.list_user_data()
            self.tracker1.add_expense("Kola", 155.5, '22-03-2018')
            self.assertTrue(
                Expense(155.5, "Kola") in data['=== 22-03-2018 ==='])