def test_to_dict(): """ Tests for the to_dict method """ expense = Expense(1, "school", 200) # Checks if method exists assert hasattr(expense, "to_dict") # Checks if return value is of correct type assert type(expense.to_dict()) == dict
def update_expense(ID, category, amount, date): EM = ExpenseManager() EM.from_csv(expense_csv) expense = Expense(ID, category, amount, date) EM.upd_expense(ID, expense) EM.override_to_csv(expense_csv)
def test_get_serializable_field_names(): """ Tests for the get_serializable_field_names method """ expense = Expense(1, "school", 200) # Checks if method exists assert hasattr(expense, "get_serializable_field_names") # Checks if method returns correct value assert expense.get_serializable_field_names() == [ 'ID', 'Category', 'Amount', 'Date' ] # Checks if return value is of correct type assert type(expense.get_serializable_field_names()) == list
def override_to_csv(self, csv_file): """Write to a csv file""" fields = Expense.get_serializable_field_names() with open(csv_file, "w", newline="") as f: writer = csv.DictWriter(f, fields) writer.writeheader() for expense in self._expenses.values(): writer.writerow(expense.to_dict())
def test_upd_expense(): """ Tests for the upd_expense method """ manager = ExpenseManager() expense = Expense(1, "Health", 300, "2020-05-12") updated_expense = Expense(1, "School", 100.1, "2020-05-11") # Checks if method exists assert hasattr(manager, "upd_expense") # Adds expense manager.add_expense(expense) assert manager._expenses[1] == expense # Checks that update expense works correctly manager.upd_expense(1, updated_expense) assert manager._expenses[1] == updated_expense
def test_by_category(): manager = ExpenseManager() Expense1 = Expense(1, "Food", 50, "2020-04-29") Expense2 = Expense(2, "School", 20, "2021-04-30") Expense3 = Expense(3, "Food", 36.6, "2021-05-01") Expense4 = Expense(4, "Family", 100, "2021-05-02") Expense5 = Expense(5, "Family", 88.8, "2021-01-02") # Add to the manager manager.add_expense(Expense1) manager.add_expense(Expense2) manager.add_expense(Expense3) manager.add_expense(Expense4) manager.add_expense(Expense5) assert manager.by_category()["Food"][0] == 36.6 assert manager.by_category()["Family"][0] == 188.8 assert manager.by_category()["Health"][0] == 0
def from_csv(self, csv_file): """Get data from a csv file :param csv_file: csv file to get from :type csv_file, i.e. the filepath """ with open(csv_file, "r") as f: reader = csv.DictReader(f) for item in reader: expense = Expense.create_from_dict(item) self.add_expense(expense)
def test_add_expense(): """ Tests for the add_expense method """ manager = ExpenseManager() expense1 = Expense(1, "Health", 300, "2020-05-12") expense2 = Expense(2, "School", 1000, "2021-04-20") expense3 = Expense(3, "Food", 25.6, "2021-4-30") # Checks if method exists assert hasattr(manager, "add_expense") # Tests that method correctly adds expenses to dictionary manager.add_expense(expense1) manager.add_expense(expense2) manager.add_expense(expense3) assert manager._expenses[1] == expense1 assert manager._expenses[2] == expense2 assert manager._expenses[3] == expense3
def test_create_from_dict(): """ Tests for the create_from_dict method """ expense = Expense(1, "school", 200) # Checks if method exists assert hasattr(expense, "create_from_dict") # Checks if method returns correct value type (object) test_dictionary = { 'ID': 1, 'Category': "school", 'Amount': 200.00, 'Date': "2021-05-05", } assert type(expense.create_from_dict(test_dictionary) == object) # Checks if returned object is instance of Expense class expense_object = expense.create_from_dict(test_dictionary) assert isinstance(expense_object, Expense)
def test_del_expense(): """ Tests for the del_expense method """ manager = ExpenseManager() expense1 = Expense(1, "Health", 300, "2020-05-12") expense2 = Expense(2, "School", 100.1, "2020-05-11") # Checks if method exists assert hasattr(manager, "del_expense") # Adds expenses manager.add_expense(expense1) manager.add_expense(expense2) assert manager._expenses[1] == expense1 assert manager._expenses[2] == expense2 # Checks that added expenses are deleted correctly manager.del_expense(1) manager.del_expense(2) with pytest.raises(KeyError): assert manager._expenses[1] assert manager._expenses[2]
def update_expense(ID, category, amount, date): """ Updates the specified expense :param ID: ID of expense to be updated :type ID: int :return: None :rtype: None """ EM = ExpenseManager() EM.from_csv(expense_csv) expense = Expense(ID, category, amount, date) EM.upd_expense(ID, expense) EM.override_to_csv(expense_csv)
def test_attributes(): """ Tests if Expense class has the correct attributes and they are set correctly """ expense = Expense(1, "school", 200) # Checks if private attributes exist assert hasattr(expense, "_ID") assert hasattr(expense, "_Category") assert hasattr(expense, "_Amount") assert hasattr(expense, "_Date") # Checks private attributes were assigned correctly assert expense._ID == 1 assert expense._Category == "school" assert expense._Amount == "200.00" assert expense._Date == date.today()
def test_get_details(): """ Tests for the get_details method """ manager = ExpenseManager() expense = Expense(1, "School", 200, "2020-02-13") # Checks if method exists assert hasattr(manager, "get_details") # Adds expense manager.add_expense(expense) # Checks if correct values are returned expense_object = manager.get_details(1) assert getattr(expense_object, "_Category") == "School" assert getattr(expense_object, "_Amount") == "200.00"
def expense(): ## Expense ## # Get input from html try: category = request.form['category'] except KeyError: flash("Please select a category") return redirect(url_for("index")) try: amount = float(request.form['amount']) except ValueError: flash("Please enter a valid number for expense amount") return redirect(url_for("index")) if category != "": # Store as a class Expense object EM = ExpenseManager() Next_ID = EM.read_largest_id(expense_csv) + 1 # Assign the next ID# expense = Expense(Next_ID, category, amount) # Add the expense into the Expense Manager EM.add_expense(expense) # Deduct expense amount from balance bal_dict = from_csv(balance_csv) bal_dict["balance"] = float(bal_dict["balance"]) - float( expense.Amount) if bal_dict["balance"] < float(bal_dict["budget"]): flash("Your balance has exceeded your budget!") # Save expense EM.to_csv(expense_csv) # Save balance, budget add_to_csv(bal_dict["balance"], bal_dict["budget"]) elif len(category) == 0: flash("Category can't be left empty") return redirect(url_for("index")) flash(f'Expense #{Next_ID} has been added!') flash(f'${expense.Amount} deducted from balance') return redirect(url_for("index"))
def read_largest_id(self, csv_file): """Get largest id from csv_file :param csv_file: csv file to get from :type csv_file, i.e. the filepath """ id = [] with open(csv_file, "r") as f: reader = csv.DictReader(f) for item in reader: expense = Expense.create_from_dict(item) id.append(expense.ID) id.sort(reverse=True) # Check if the csv have no record at all if len(id) == 0: largest_ID = 0 else: largest_ID = id[0] return largest_ID
def test_by_month_expense(): manager = ExpenseManager() Expense1 = Expense(1, "Food", 50, "2020-04-29") Expense2 = Expense(2, "School", 20, "2021-04-30") Expense3 = Expense(3, "Food", 36.6, "2021-05-01") Expense4 = Expense(4, "Family", 100, "2021-05-02") Expense5 = Expense(5, "Family", 88.8, "2021-01-02") Expense6 = Expense(6, "Health", 62, "2021-01-31") # Add to the manager manager.add_expense(Expense1) manager.add_expense(Expense2) manager.add_expense(Expense3) manager.add_expense(Expense4) manager.add_expense(Expense5) manager.add_expense(Expense6) assert manager.by_month_expense()["Apr"] == 20 assert manager.by_month_expense()["May"] == 136.6 assert manager.by_month_expense()["Jan"] == 150.8
def test_properties(): """ Tests for Expense class properties """ expense = Expense(1, "school", 200) # Checks if properties exist assert type(expense.__class__.ID) == property assert type(expense.__class__.Category) == property assert type(expense.__class__.Amount) == property assert type(expense.__class__.Date) == property # Tests if properties return correct values expense._ID = 20 assert expense.ID == 20 expense._Category = "health" assert expense.Category == "health" expense._Amount = 500 assert expense.Amount == 500 expense._Date = date.today() assert expense.Date == date.today()
def __init__(self): super().__init__() self.setupUi(self) self.show() self.submitButton.clicked.connect(self.submit) self.expense = Expense()
from Models.loan import Loan from Models.expense import Expense from Models.saving import Saving from Models.deposit import Deposit from Models.withdrawal import Withdrawal from Models.transfer import Transfer from Models.deposit import Deposit from Models.recurring import Recurring from Models.fixedDeposit import FixedDeposit from Models.database import db # Initialize tables #db.dropTables() Member.create_table() Loan.create_table() Expense.create_table() Saving.create_table() Deposit.create_table() Withdrawal.create_table() Transfer.create_table() Deposit.create_table() # Creating sample entries # m = Member() # m.name = "Utkarsh" # Member.add(m) # l = Loan() # l.amount = 10000 # Loan.add(l) # Loan.init(Loan) # print(Loan.query.all())