From 2844d849e09ddba500efdb42008c98ae7277c3ce Mon Sep 17 00:00:00 2001 From: ruthra kumar Date: Fri, 28 Jul 2023 21:02:21 +0530 Subject: [PATCH] refactor(test): introduce and make use of mixins in unit tests (#36382) * refactor(test): create and use test mixin * chore(test): replace get_user_default with variable (cherry picked from commit 3b5805541017ae3abc2bafa17dcc698fe6922a73) --- .../test_deferred_revenue_and_expense.py | 194 ++++++------------ erpnext/accounts/test/accounts_mixin.py | 80 ++++++++ 2 files changed, 144 insertions(+), 130 deletions(-) create mode 100644 erpnext/accounts/test/accounts_mixin.py diff --git a/erpnext/accounts/report/deferred_revenue_and_expense/test_deferred_revenue_and_expense.py b/erpnext/accounts/report/deferred_revenue_and_expense/test_deferred_revenue_and_expense.py index c84b843f1fd8..28d0c20a9187 100644 --- a/erpnext/accounts/report/deferred_revenue_and_expense/test_deferred_revenue_and_expense.py +++ b/erpnext/accounts/report/deferred_revenue_and_expense/test_deferred_revenue_and_expense.py @@ -2,6 +2,7 @@ import frappe from frappe import qb +from frappe.tests.utils import FrappeTestCase, change_settings from frappe.utils import nowdate from erpnext.accounts.doctype.account.test_account import create_account @@ -10,16 +11,15 @@ from erpnext.accounts.report.deferred_revenue_and_expense.deferred_revenue_and_expense import ( Deferred_Revenue_and_Expense_Report, ) +from erpnext.accounts.test.accounts_mixin import AccountsTestMixin from erpnext.accounts.utils import get_fiscal_year from erpnext.buying.doctype.supplier.test_supplier import create_supplier from erpnext.stock.doctype.item.test_item import create_item -class TestDeferredRevenueAndExpense(unittest.TestCase): +class TestDeferredRevenueAndExpense(FrappeTestCase, AccountsTestMixin): @classmethod def setUpClass(self): - clear_accounts_and_items() - create_company() self.maxDiff = None def clear_old_entries(self): @@ -51,55 +51,58 @@ def clear_old_entries(self): if deferred_invoices: qb.from_(pinv).delete().where(pinv.name.isin(deferred_invoices)).run() - def test_deferred_revenue(self): - self.clear_old_entries() - + def setup_deferred_accounts_and_items(self): # created deferred expense accounts, if not found - deferred_revenue_account = create_account( + self.deferred_revenue_account = create_account( account_name="Deferred Revenue", - parent_account="Current Liabilities - _CD", - company="_Test Company DR", + parent_account="Current Liabilities - " + self.company_abbr, + company=self.company, ) - acc_settings = frappe.get_doc("Accounts Settings", "Accounts Settings") - acc_settings.book_deferred_entries_based_on = "Months" - acc_settings.save() + # created deferred expense accounts, if not found + self.deferred_expense_account = create_account( + account_name="Deferred Expense", + parent_account="Current Assets - " + self.company_abbr, + company=self.company, + ) + + def setUp(self): + self.create_company() + self.create_customer("_Test Customer") + self.create_supplier("_Test Furniture Supplier") + self.setup_deferred_accounts_and_items() + self.clear_old_entries() - customer = frappe.new_doc("Customer") - customer.customer_name = "_Test Customer DR" - customer.type = "Individual" - customer.insert() + def tearDown(self): + frappe.db.rollback() - item = create_item( - "_Test Internet Subscription", - is_stock_item=0, - warehouse="All Warehouses - _CD", - company="_Test Company DR", - ) + @change_settings("Accounts Settings", {"book_deferred_entries_based_on": "Months"}) + def test_deferred_revenue(self): + self.create_item("_Test Internet Subscription", 0, self.warehouse, self.company) + item = frappe.get_doc("Item", self.item) item.enable_deferred_revenue = 1 - item.deferred_revenue_account = deferred_revenue_account + item.deferred_revenue_account = self.deferred_revenue_account item.no_of_months = 3 item.save() si = create_sales_invoice( - item=item.name, - company="_Test Company DR", - customer="_Test Customer DR", - debit_to="Debtors - _CD", + item=self.item, + company=self.company, + customer=self.customer, + debit_to=self.debit_to, posting_date="2021-05-01", - parent_cost_center="Main - _CD", - cost_center="Main - _CD", + parent_cost_center=self.cost_center, + cost_center=self.cost_center, do_not_save=True, rate=300, price_list_rate=300, ) - si.items[0].income_account = "Sales - _CD" + si.items[0].income_account = self.income_account si.items[0].enable_deferred_revenue = 1 si.items[0].service_start_date = "2021-05-01" si.items[0].service_end_date = "2021-08-01" - si.items[0].deferred_revenue_account = deferred_revenue_account - si.items[0].income_account = "Sales - _CD" + si.items[0].deferred_revenue_account = self.deferred_revenue_account si.save() si.submit() @@ -110,7 +113,7 @@ def test_deferred_revenue(self): start_date="2021-05-01", end_date="2021-08-01", type="Income", - company="_Test Company DR", + company=self.company, ) ) pda.insert() @@ -120,7 +123,7 @@ def test_deferred_revenue(self): fiscal_year = frappe.get_doc("Fiscal Year", get_fiscal_year(date="2021-05-01")) self.filters = frappe._dict( { - "company": frappe.defaults.get_user_default("Company"), + "company": self.company, "filter_based_on": "Date Range", "period_start_date": "2021-05-01", "period_end_date": "2021-08-01", @@ -142,57 +145,36 @@ def test_deferred_revenue(self): ] self.assertEqual(report.period_total, expected) + @change_settings("Accounts Settings", {"book_deferred_entries_based_on": "Months"}) def test_deferred_expense(self): - self.clear_old_entries() - - # created deferred expense accounts, if not found - deferred_expense_account = create_account( - account_name="Deferred Expense", - parent_account="Current Assets - _CD", - company="_Test Company DR", - ) - - acc_settings = frappe.get_doc("Accounts Settings", "Accounts Settings") - acc_settings.book_deferred_entries_based_on = "Months" - acc_settings.save() - - supplier = create_supplier( - supplier_name="_Test Furniture Supplier", supplier_group="Local", supplier_type="Company" - ) - supplier.save() - - item = create_item( - "_Test Office Desk", - is_stock_item=0, - warehouse="All Warehouses - _CD", - company="_Test Company DR", - ) + self.create_item("_Test Office Desk", 0, self.warehouse, self.company) + item = frappe.get_doc("Item", self.item) item.enable_deferred_expense = 1 - item.deferred_expense_account = deferred_expense_account + item.deferred_expense_account = self.deferred_expense_account item.no_of_months_exp = 3 item.save() pi = make_purchase_invoice( - item=item.name, - company="_Test Company DR", - supplier="_Test Furniture Supplier", + item=self.item, + company=self.company, + supplier=self.supplier, is_return=False, update_stock=False, posting_date=frappe.utils.datetime.date(2021, 5, 1), - parent_cost_center="Main - _CD", - cost_center="Main - _CD", + parent_cost_center=self.cost_center, + cost_center=self.cost_center, do_not_save=True, rate=300, price_list_rate=300, - warehouse="All Warehouses - _CD", + warehouse=self.warehouse, qty=1, ) pi.set_posting_time = True pi.items[0].enable_deferred_expense = 1 pi.items[0].service_start_date = "2021-05-01" pi.items[0].service_end_date = "2021-08-01" - pi.items[0].deferred_expense_account = deferred_expense_account - pi.items[0].expense_account = "Office Maintenance Expenses - _CD" + pi.items[0].deferred_expense_account = self.deferred_expense_account + pi.items[0].expense_account = self.expense_account pi.save() pi.submit() @@ -203,7 +185,7 @@ def test_deferred_expense(self): start_date="2021-05-01", end_date="2021-08-01", type="Expense", - company="_Test Company DR", + company=self.company, ) ) pda.insert() @@ -213,7 +195,7 @@ def test_deferred_expense(self): fiscal_year = frappe.get_doc("Fiscal Year", get_fiscal_year(date="2021-05-01")) self.filters = frappe._dict( { - "company": frappe.defaults.get_user_default("Company"), + "company": self.company, "filter_based_on": "Date Range", "period_start_date": "2021-05-01", "period_end_date": "2021-08-01", @@ -235,52 +217,31 @@ def test_deferred_expense(self): ] self.assertEqual(report.period_total, expected) + @change_settings("Accounts Settings", {"book_deferred_entries_based_on": "Months"}) def test_zero_months(self): - self.clear_old_entries() - # created deferred expense accounts, if not found - deferred_revenue_account = create_account( - account_name="Deferred Revenue", - parent_account="Current Liabilities - _CD", - company="_Test Company DR", - ) - - acc_settings = frappe.get_doc("Accounts Settings", "Accounts Settings") - acc_settings.book_deferred_entries_based_on = "Months" - acc_settings.save() - - customer = frappe.new_doc("Customer") - customer.customer_name = "_Test Customer DR" - customer.type = "Individual" - customer.insert() - - item = create_item( - "_Test Internet Subscription", - is_stock_item=0, - warehouse="All Warehouses - _CD", - company="_Test Company DR", - ) + self.create_item("_Test Internet Subscription", 0, self.warehouse, self.company) + item = frappe.get_doc("Item", self.item) item.enable_deferred_revenue = 1 - item.deferred_revenue_account = deferred_revenue_account + item.deferred_revenue_account = self.deferred_revenue_account item.no_of_months = 0 item.save() si = create_sales_invoice( item=item.name, - company="_Test Company DR", - customer="_Test Customer DR", - debit_to="Debtors - _CD", + company=self.company, + customer=self.customer, + debit_to=self.debit_to, posting_date="2021-05-01", - parent_cost_center="Main - _CD", - cost_center="Main - _CD", + parent_cost_center=self.cost_center, + cost_center=self.cost_center, do_not_save=True, rate=300, price_list_rate=300, ) si.items[0].enable_deferred_revenue = 1 - si.items[0].income_account = "Sales - _CD" - si.items[0].deferred_revenue_account = deferred_revenue_account - si.items[0].income_account = "Sales - _CD" + si.items[0].income_account = self.income_account + si.items[0].deferred_revenue_account = self.deferred_revenue_account si.save() si.submit() @@ -291,7 +252,7 @@ def test_zero_months(self): start_date="2021-05-01", end_date="2021-08-01", type="Income", - company="_Test Company DR", + company=self.company, ) ) pda.insert() @@ -301,7 +262,7 @@ def test_zero_months(self): fiscal_year = frappe.get_doc("Fiscal Year", get_fiscal_year(date="2021-05-01")) self.filters = frappe._dict( { - "company": frappe.defaults.get_user_default("Company"), + "company": self.company, "filter_based_on": "Date Range", "period_start_date": "2021-05-01", "period_end_date": "2021-08-01", @@ -322,30 +283,3 @@ def test_zero_months(self): {"key": "aug_2021", "total": 0, "actual": 0}, ] self.assertEqual(report.period_total, expected) - - -def create_company(): - company = frappe.db.exists("Company", "_Test Company DR") - if not company: - company = frappe.new_doc("Company") - company.company_name = "_Test Company DR" - company.default_currency = "INR" - company.chart_of_accounts = "Standard" - company.insert() - - -def clear_accounts_and_items(): - item = qb.DocType("Item") - account = qb.DocType("Account") - customer = qb.DocType("Customer") - supplier = qb.DocType("Supplier") - - qb.from_(account).delete().where( - (account.account_name == "Deferred Revenue") - | (account.account_name == "Deferred Expense") & (account.company == "_Test Company DR") - ).run() - qb.from_(item).delete().where( - (item.item_code == "_Test Internet Subscription") | (item.item_code == "_Test Office Rent") - ).run() - qb.from_(customer).delete().where(customer.customer_name == "_Test Customer DR").run() - qb.from_(supplier).delete().where(supplier.supplier_name == "_Test Furniture Supplier").run() diff --git a/erpnext/accounts/test/accounts_mixin.py b/erpnext/accounts/test/accounts_mixin.py new file mode 100644 index 000000000000..c82164ef6447 --- /dev/null +++ b/erpnext/accounts/test/accounts_mixin.py @@ -0,0 +1,80 @@ +import frappe + +from erpnext.stock.doctype.item.test_item import create_item + + +class AccountsTestMixin: + def create_customer(self, customer_name, currency=None): + if not frappe.db.exists("Customer", customer_name): + customer = frappe.new_doc("Customer") + customer.customer_name = customer_name + customer.type = "Individual" + + if currency: + customer.default_currency = currency + customer.save() + self.customer = customer.name + else: + self.customer = customer_name + + def create_supplier(self, supplier_name, currency=None): + if not frappe.db.exists("Supplier", supplier_name): + supplier = frappe.new_doc("Supplier") + supplier.supplier_name = supplier_name + supplier.supplier_type = "Individual" + supplier.supplier_group = "Local" + + if currency: + supplier.default_currency = currency + supplier.save() + self.supplier = supplier.name + else: + self.supplier = supplier_name + + def create_item(self, item_name, is_stock=0, warehouse=None, company=None): + item = create_item(item_name, is_stock_item=is_stock, warehouse=warehouse, company=company) + self.item = item.name + + def create_company(self, company_name="_Test Company", abbr="_TC"): + self.company_abbr = abbr + if frappe.db.exists("Company", company_name): + company = frappe.get_doc("Company", company_name) + else: + company = frappe.get_doc( + { + "doctype": "Company", + "company_name": company_name, + "country": "India", + "default_currency": "INR", + "create_chart_of_accounts_based_on": "Standard Template", + "chart_of_accounts": "Standard", + } + ) + company = company.save() + + self.company = company.name + self.cost_center = company.cost_center + self.warehouse = "Stores - " + abbr + self.finished_warehouse = "Finished Goods - " + abbr + self.income_account = "Sales - " + abbr + self.expense_account = "Cost of Goods Sold - " + abbr + self.debit_to = "Debtors - " + abbr + self.debit_usd = "Debtors USD - " + abbr + self.cash = "Cash - " + abbr + self.creditors = "Creditors - " + abbr + + # create bank account + bank_account = "HDFC - " + abbr + if frappe.db.exists("Account", bank_account): + self.bank = bank_account + else: + bank_acc = frappe.get_doc( + { + "doctype": "Account", + "account_name": "HDFC", + "parent_account": "Bank Accounts - " + abbr, + "company": self.company, + } + ) + bank_acc.save() + self.bank = bank_acc.name