示例#1
0
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
示例#2
0
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)
示例#3
0
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
示例#4
0
 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())
示例#5
0
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
示例#6
0
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
示例#7
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)
示例#8
0
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
示例#9
0
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)
示例#10
0
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]
示例#11
0
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)
示例#12
0
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()
示例#13
0
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"
示例#14
0
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"))
示例#15
0
    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
示例#16
0
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
示例#17
0
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()
示例#18
0
 def __init__(self):
     super().__init__()
     self.setupUi(self)
     self.show()
     self.submitButton.clicked.connect(self.submit)
     self.expense = Expense()
示例#19
0
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())