136 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			136 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| import unittest
 | |
| from uuid import uuid4 as _uuid4
 | |
| 
 | |
| import frappe
 | |
| 
 | |
| 
 | |
| def uuid4():
 | |
| 	return str(_uuid4())
 | |
| 
 | |
| 
 | |
| class TestTaxes(unittest.TestCase):
 | |
| 	def setUp(self):
 | |
| 		self.company = frappe.get_doc(
 | |
| 			{
 | |
| 				"doctype": "Company",
 | |
| 				"company_name": uuid4(),
 | |
| 				"abbr": "".join(s[0] for s in uuid4().split("-")),
 | |
| 				"default_currency": "USD",
 | |
| 				"country": "United States",
 | |
| 			}
 | |
| 		).insert()
 | |
| 		self.account = frappe.get_doc(
 | |
| 			{
 | |
| 				"doctype": "Account",
 | |
| 				"account_name": uuid4(),
 | |
| 				"account_type": "Tax",
 | |
| 				"company": self.company.name,
 | |
| 				"parent_account": "Duties and Taxes - {self.company.abbr}".format(self=self),
 | |
| 			}
 | |
| 		).insert()
 | |
| 		self.item_group = frappe.get_doc(
 | |
| 			{
 | |
| 				"doctype": "Item Group",
 | |
| 				"item_group_name": uuid4(),
 | |
| 				"parent_item_group": "All Item Groups",
 | |
| 			}
 | |
| 		).insert()
 | |
| 		self.item_tax_template = frappe.get_doc(
 | |
| 			{
 | |
| 				"doctype": "Item Tax Template",
 | |
| 				"title": uuid4(),
 | |
| 				"company": self.company.name,
 | |
| 				"taxes": [
 | |
| 					{
 | |
| 						"tax_type": self.account.name,
 | |
| 						"tax_rate": 2,
 | |
| 					}
 | |
| 				],
 | |
| 			}
 | |
| 		).insert()
 | |
| 		self.item = frappe.get_doc(
 | |
| 			{
 | |
| 				"doctype": "Item",
 | |
| 				"item_code": uuid4(),
 | |
| 				"item_group": self.item_group.name,
 | |
| 				"is_stock_item": 0,
 | |
| 				"taxes": [
 | |
| 					{
 | |
| 						"item_tax_template": self.item_tax_template.name,
 | |
| 						"tax_category": "",
 | |
| 					}
 | |
| 				],
 | |
| 			}
 | |
| 		).insert()
 | |
| 		self.customer = frappe.get_doc(
 | |
| 			{
 | |
| 				"doctype": "Customer",
 | |
| 				"customer_name": uuid4(),
 | |
| 				"customer_group": "All Customer Groups",
 | |
| 			}
 | |
| 		).insert()
 | |
| 		self.supplier = frappe.get_doc(
 | |
| 			{
 | |
| 				"doctype": "Supplier",
 | |
| 				"supplier_name": uuid4(),
 | |
| 				"supplier_group": "All Supplier Groups",
 | |
| 			}
 | |
| 		).insert()
 | |
| 
 | |
| 	def test_taxes(self):
 | |
| 		self.created_docs = []
 | |
| 		for dt in [
 | |
| 			"Purchase Order",
 | |
| 			"Purchase Receipt",
 | |
| 			"Purchase Invoice",
 | |
| 			"Quotation",
 | |
| 			"Sales Order",
 | |
| 			"Delivery Note",
 | |
| 			"Sales Invoice",
 | |
| 		]:
 | |
| 			doc = frappe.get_doc(
 | |
| 				{
 | |
| 					"doctype": dt,
 | |
| 					"company": self.company.name,
 | |
| 					"supplier": self.supplier.name,
 | |
| 					"currency": "USD",
 | |
| 					"schedule_date": frappe.utils.nowdate(),
 | |
| 					"delivery_date": frappe.utils.nowdate(),
 | |
| 					"customer": self.customer.name,
 | |
| 					"buying_price_list"
 | |
| 					if dt.startswith("Purchase")
 | |
| 					else "selling_price_list": "Standard Buying"
 | |
| 					if dt.startswith("Purchase")
 | |
| 					else "Standard Selling",
 | |
| 					"items": [
 | |
| 						{
 | |
| 							"item_code": self.item.name,
 | |
| 							"qty": 300,
 | |
| 							"rate": 100,
 | |
| 						}
 | |
| 					],
 | |
| 					"taxes": [
 | |
| 						{
 | |
| 							"charge_type": "On Item Quantity",
 | |
| 							"account_head": self.account.name,
 | |
| 							"description": "N/A",
 | |
| 							"rate": 0,
 | |
| 						},
 | |
| 					],
 | |
| 				}
 | |
| 			)
 | |
| 			doc.run_method("set_missing_values")
 | |
| 			doc.run_method("calculate_taxes_and_totals")
 | |
| 			doc.insert()
 | |
| 			self.assertEqual(doc.taxes[0].tax_amount, 600)
 | |
| 			self.created_docs.append(doc)
 | |
| 
 | |
| 	def tearDown(self):
 | |
| 		for doc in self.created_docs:
 | |
| 			doc.delete()
 | |
| 		self.item.delete()
 | |
| 		self.item_group.delete()
 | |
| 		self.item_tax_template.delete()
 | |
| 		self.account.delete()
 | |
| 		self.company.delete()
 |