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
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 c84b843..28d0c20 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 @@
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
+ self.deferred_revenue_account = create_account(
+ account_name="Deferred Revenue",
+ parent_account="Current Liabilities - " + self.company_abbr,
+ company=self.company,
+ )
# 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",
+ self.deferred_expense_account = create_account(
+ account_name="Deferred Expense",
+ parent_account="Current Assets - " + 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()
+ 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 @@
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 @@
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 @@
]
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 @@
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 @@
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 @@
]
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 @@
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 @@
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 @@
{"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 0000000..c82164e
--- /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