test: test_party_details_tax_category
diff --git a/erpnext/accounts/doctype/tax_category/test_records.json b/erpnext/accounts/doctype/tax_category/test_records.json
index 056b2f3..1bb7f5e 100644
--- a/erpnext/accounts/doctype/tax_category/test_records.json
+++ b/erpnext/accounts/doctype/tax_category/test_records.json
@@ -6,5 +6,9 @@
  {
   "doctype": "Tax Category",
   "title": "_Test Tax Category 2"
+ },
+ {
+  "doctype": "Tax Category",
+  "title": "_Test Tax Category 3"
  }
 ]
diff --git a/erpnext/buying/doctype/supplier/test_records.json b/erpnext/buying/doctype/supplier/test_records.json
index 9c01989..1aa63fb 100644
--- a/erpnext/buying/doctype/supplier/test_records.json
+++ b/erpnext/buying/doctype/supplier/test_records.json
@@ -39,5 +39,11 @@
     "company": "_Test Company",
     "account": "_Test Payable USD - _TC"
   }]
+ },
+ {
+  "doctype": "Supplier",
+  "supplier_name": "_Test Supplier With Tax Category",
+  "supplier_group": "_Test Supplier Group",
+  "tax_category": "_Test Tax Category 1"
  }
 ]
diff --git a/erpnext/buying/doctype/supplier/test_supplier.py b/erpnext/buying/doctype/supplier/test_supplier.py
index 2211db7..a377ec9 100644
--- a/erpnext/buying/doctype/supplier/test_supplier.py
+++ b/erpnext/buying/doctype/supplier/test_supplier.py
@@ -90,3 +90,33 @@
         supplier.country = 'Greece'
         supplier.save()
         self.assertEqual(supplier.country, "Greece")
+
+    def test_party_details_tax_category(self):
+        from erpnext.accounts.party import get_party_details
+
+        frappe.delete_doc_if_exists("Address", "_Test Address With Tax Category-Billing")
+
+        # Tax Category without Address
+        details = get_party_details("_Test Supplier With Tax Category", party_type="Supplier")
+        self.assertEqual(details.tax_category, "_Test Tax Category 1")
+
+        address = frappe.get_doc(dict(
+            doctype='Address',
+            address_title='_Test Address With Tax Category',
+            tax_category='_Test Tax Category 2',
+            address_type='Billing',
+            address_line1='Station Road',
+            city='_Test City',
+            country='India',
+            links=[dict(
+                link_doctype='Supplier',
+                link_name='_Test Supplier With Tax Category'
+            )]
+        )).insert()
+
+        # Tax Category with Address
+        details = get_party_details("_Test Supplier With Tax Category", party_type="Supplier")
+        self.assertEqual(details.tax_category, "_Test Tax Category 2")
+
+        # Rollback
+        address.delete()
diff --git a/erpnext/selling/doctype/customer/test_customer.py b/erpnext/selling/doctype/customer/test_customer.py
index cc2fc59..bf2bdf1 100644
--- a/erpnext/selling/doctype/customer/test_customer.py
+++ b/erpnext/selling/doctype/customer/test_customer.py
@@ -56,6 +56,64 @@
 		for key, value in iteritems(to_check):
 			self.assertEqual(value, details.get(key))
 
+	def test_party_details_tax_category(self):
+		from erpnext.accounts.party import get_party_details
+
+		frappe.delete_doc_if_exists("Address", "_Test Address With Tax Category-Billing")
+		frappe.delete_doc_if_exists("Address", "_Test Address With Tax Category-Shipping")
+
+		# Tax Category without Address
+		details = get_party_details("_Test Customer With Tax Category")
+		self.assertEqual(details.tax_category, "_Test Tax Category 1")
+
+		billing_address = frappe.get_doc(dict(
+			doctype='Address',
+			address_title='_Test Address With Tax Category',
+			tax_category='_Test Tax Category 2',
+			address_type='Billing',
+			address_line1='Station Road',
+			city='_Test City',
+			country='India',
+			links=[dict(
+				link_doctype='Customer',
+				link_name='_Test Customer With Tax Category'
+			)]
+		)).insert()
+		shipping_address = frappe.get_doc(dict(
+			doctype='Address',
+			address_title='_Test Address With Tax Category',
+			tax_category='_Test Tax Category 3',
+			address_type='Shipping',
+			address_line1='Station Road',
+			city='_Test City',
+			country='India',
+			links=[dict(
+				link_doctype='Customer',
+				link_name='_Test Customer With Tax Category'
+			)]
+		)).insert()
+
+		settings = frappe.get_single("Accounts Settings")
+		rollback_setting = settings.determine_address_tax_category_from
+
+		# Tax Category from Billing Address
+		settings.determine_address_tax_category_from = "Billing Address"
+		settings.save()
+		details = get_party_details("_Test Customer With Tax Category")
+		self.assertEqual(details.tax_category, "_Test Tax Category 2")
+
+		# Tax Category from Shipping Address
+		settings.determine_address_tax_category_from = "Shipping Address"
+		settings.save()
+		details = get_party_details("_Test Customer With Tax Category")
+		self.assertEqual(details.tax_category, "_Test Tax Category 3")
+
+		# Rollback
+		settings.determine_address_tax_category_from = rollback_setting
+		settings.save()
+		billing_address.delete()
+		shipping_address.delete()
+
 	def test_rename(self):
 		# delete communication linked to these 2 customers
 		for name in ("_Test Customer 1", "_Test Customer 1 Renamed"):
diff --git a/erpnext/selling/doctype/customer/test_records.json b/erpnext/selling/doctype/customer/test_records.json
index a012c1b..61cb36b 100644
--- a/erpnext/selling/doctype/customer/test_records.json
+++ b/erpnext/selling/doctype/customer/test_records.json
@@ -51,5 +51,13 @@
 	  "company": "_Test Company",
 	  "account": "_Test Receivable USD - _TC"
   }]
+ },
+ {
+  "customer_group": "_Test Customer Group",
+  "customer_name": "_Test Customer With Tax Category",
+  "customer_type": "Individual",
+  "doctype": "Customer",
+  "territory": "_Test Territory",
+  "tax_category": "_Test Tax Category 1"
  }
 ]