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 ==='])