fix: Define specific exceptions and fix tests
diff --git a/erpnext/accounts/doctype/accounting_dimension_filter/test_accounting_dimension_filter.py b/erpnext/accounts/doctype/accounting_dimension_filter/test_accounting_dimension_filter.py
index 801786b..f67e1de 100644
--- a/erpnext/accounts/doctype/accounting_dimension_filter/test_accounting_dimension_filter.py
+++ b/erpnext/accounts/doctype/accounting_dimension_filter/test_accounting_dimension_filter.py
@@ -6,7 +6,8 @@
import frappe
import unittest
from erpnext.accounts.doctype.sales_invoice.test_sales_invoice import create_sales_invoice
-from erpnext.accounts.doctype.accounting_dimension.test_accounting_dimension import create_dimension
+from erpnext.accounts.doctype.accounting_dimension.test_accounting_dimension import create_dimension, disable_dimension
+from erpnext.exceptions import InvalidAccountDimension, MandatoryDimension
class TestAccountingDimensionFilter(unittest.TestCase):
def setUp(self):
@@ -16,19 +17,25 @@
def test_allowed_dimension_validation(self):
si = create_sales_invoice(do_not_save=1)
si.items[0].cost_center = 'Main - _TC'
+ si.location = 'Block 1'
si.save()
- self.assertRaises(frappe.ValidationError, si.submit)
+ self.assertRaises(InvalidAccountDimension, si.submit)
def test_mandatory_dimension_validation(self):
si = create_sales_invoice(do_not_save=1)
- si.items[0].location = ''
+ si.location = 'Block 1'
+
+ # Test with no department for Sales Account
+ si.items[0].department = ''
+ si.items[0].cost_center = '_Test Cost Center 2 - _TC'
si.save()
- self.assertRaises(frappe.ValidationError, si.submit)
+ self.assertRaises(MandatoryDimension, si.submit)
def tearDown(self):
disable_dimension_filter()
+ disable_dimension()
def create_accounting_dimension_filter():
if not frappe.db.get_value('Accounting Dimension Filter',
@@ -52,10 +59,10 @@
doc.save()
if not frappe.db.get_value('Accounting Dimension Filter',
- {'accounting_dimension': 'Location'}):
+ {'accounting_dimension': 'Department'}):
frappe.get_doc({
'doctype': 'Accounting Dimension Filter',
- 'accounting_dimension': 'Location',
+ 'accounting_dimension': 'Department',
'allow_or_restrict': 'Allow',
'company': '_Test Company',
'accounts': [{
@@ -63,12 +70,12 @@
'is_mandatory': 1
}],
'dimensions': [{
- 'accounting_dimension': 'Location',
- 'dimension_value': 'Block 1'
+ 'accounting_dimension': 'Department',
+ 'dimension_value': '_Test Department - _TC'
}]
}).insert()
else:
- doc = frappe.get_doc('Accounting Dimension Filter', {'accounting_dimension': 'Location'})
+ doc = frappe.get_doc('Accounting Dimension Filter', {'accounting_dimension': 'Department'})
doc.disabled = 0
doc.save()
@@ -77,6 +84,6 @@
doc.disabled = 1
doc.save()
- doc = frappe.get_doc('Accounting Dimension Filter', {'accounting_dimension': 'Location'})
+ doc = frappe.get_doc('Accounting Dimension Filter', {'accounting_dimension': 'Department'})
doc.disabled = 1
doc.save()
diff --git a/erpnext/accounts/doctype/gl_entry/gl_entry.py b/erpnext/accounts/doctype/gl_entry/gl_entry.py
index b3caf6a..f586de8 100644
--- a/erpnext/accounts/doctype/gl_entry/gl_entry.py
+++ b/erpnext/accounts/doctype/gl_entry/gl_entry.py
@@ -11,7 +11,7 @@
from erpnext.accounts.party import validate_party_gle_currency, validate_party_frozen_disabled
from erpnext.accounts.utils import get_account_currency
from erpnext.accounts.utils import get_fiscal_year
-from erpnext.exceptions import InvalidAccountCurrency
+from erpnext.exceptions import InvalidAccountCurrency, InvalidAccountDimension, MandatoryDimension
from erpnext.accounts.doctype.accounting_dimension.accounting_dimension import get_checks_for_pl_and_bs_accounts
from erpnext.accounts.doctype.accounting_dimension_filter.accounting_dimension_filter import get_dimension_filter_map
from six import iteritems
@@ -101,16 +101,16 @@
if self.account == account:
if value['is_mandatory'] and not self.get(dimension):
frappe.throw(_("{0} is mandatory for account {1}").format(
- frappe.bold(frappe.unscrub(dimension)), frappe.bold(self.account)))
+ frappe.bold(frappe.unscrub(dimension)), frappe.bold(self.account)), MandatoryDimension)
if value['allow_or_restrict'] == 'Allow':
if self.get(dimension) and self.get(dimension) not in value['allowed_dimensions']:
frappe.throw(_("Invalid value {0} for account {1}").format(
- frappe.bold(self.get(dimension)), frappe.bold(self.account)))
+ frappe.bold(self.get(dimension)), frappe.bold(self.account)), InvalidAccountDimension)
else:
if self.get(dimension) and self.get(dimension) in value['allowed_dimensions']:
frappe.throw(_("Invalid value {0} for account {1}").format(
- frappe.bold(self.get(dimension)), frappe.bold(self.account)))
+ frappe.bold(self.get(dimension)), frappe.bold(self.account)), InvalidAccountDimension)
def check_pl_account(self):
if self.is_opening=='Yes' and \
diff --git a/erpnext/exceptions.py b/erpnext/exceptions.py
index d92af5d..dcf3d6b 100644
--- a/erpnext/exceptions.py
+++ b/erpnext/exceptions.py
@@ -6,3 +6,5 @@
class InvalidAccountCurrency(frappe.ValidationError): pass
class InvalidCurrency(frappe.ValidationError): pass
class PartyDisabled(frappe.ValidationError):pass
+class InvalidAccountDimension(frappe.ValidationError): pass
+class MandatoryDimension(frappe.ValidationError): pass