blob: 2d1ae43f074ba72f53c09f94b93c0a51696d81e7 [file] [log] [blame]
Prateeksha Singhedeb4dc2017-05-15 11:32:06 +05301from __future__ import unicode_literals
Prateeksha Singhedeb4dc2017-05-15 11:32:06 +05302
Chillar Anand915b3432021-09-02 16:44:59 +05303import json
4import unittest
5
6import frappe
Prateeksha Singhedeb4dc2017-05-15 11:32:06 +05307import frappe.utils
Prateeksha Singhedeb4dc2017-05-15 11:32:06 +05308from frappe.model import mapper
9from frappe.test_runner import make_test_records
Chillar Anand915b3432021-09-02 16:44:59 +053010from frappe.utils import add_months, nowdate
11
Prateeksha Singhedeb4dc2017-05-15 11:32:06 +053012
13class TestMapper(unittest.TestCase):
14 def test_map_docs(self):
15 '''Test mapping of multiple source docs on a single target doc'''
16
17 make_test_records("Item")
Deepesh Garga9820cd2020-07-11 19:38:51 +053018 items = ['_Test Item', '_Test Item 2', '_Test FG Item']
19
20 # Make source docs (quotations) and a target doc (sales order)
21 qtn1, item_list_1 = self.make_quotation(items, '_Test Customer')
22 qtn2, item_list_2 = self.make_quotation(items, '_Test Customer')
23 so, item_list_3 = self.make_sales_order()
Prateeksha Singhedeb4dc2017-05-15 11:32:06 +053024
25 # Map source docs to target with corresponding mapper method
26 method = "erpnext.selling.doctype.quotation.quotation.make_sales_order"
27 updated_so = mapper.map_docs(method, json.dumps([qtn1.name, qtn2.name]), so)
28
29 # Assert that all inserted items are present in updated sales order
30 src_items = item_list_1 + item_list_2 + item_list_3
Ankush Menat98917802021-06-11 18:40:22 +053031 self.assertEqual(set(d for d in src_items),
32 set(d.item_code for d in updated_so.items))
Prateeksha Singhedeb4dc2017-05-15 11:32:06 +053033
Prateeksha Singhedeb4dc2017-05-15 11:32:06 +053034
Deepesh Garga9820cd2020-07-11 19:38:51 +053035 def make_quotation(self, item_list, customer):
36
Prateeksha Singhedeb4dc2017-05-15 11:32:06 +053037 qtn = frappe.get_doc({
38 "doctype": "Quotation",
39 "quotation_to": "Customer",
Nabin Hait34c551d2019-07-03 10:34:31 +053040 "party_name": customer,
KanchanChauhan58c99342017-07-26 18:17:11 +053041 "order_type": "Sales",
42 "transaction_date" : nowdate(),
43 "valid_till" : add_months(nowdate(), 1)
Prateeksha Singhedeb4dc2017-05-15 11:32:06 +053044 })
45 for item in item_list:
Deepesh Garga9820cd2020-07-11 19:38:51 +053046 qtn.append("items", {"qty": "2", "item_code": item})
Prateeksha Singhedeb4dc2017-05-15 11:32:06 +053047
48 qtn.submit()
49 return qtn, item_list
50
51 def make_sales_order(self):
52 item = frappe.get_doc({
53 "base_amount": 1000.0,
54 "base_rate": 100.0,
55 "description": "CPU",
56 "doctype": "Sales Order Item",
Deepesh Garga9820cd2020-07-11 19:38:51 +053057 "item_code": "_Test Item",
Prateeksha Singhedeb4dc2017-05-15 11:32:06 +053058 "item_name": "CPU",
59 "parentfield": "items",
60 "qty": 10.0,
61 "rate": 100.0,
62 "warehouse": "_Test Warehouse - _TC",
63 "stock_uom": "_Test UOM",
64 "conversion_factor": 1.0,
65 "uom": "_Test UOM"
66 })
67 so = frappe.get_doc(frappe.get_test_records('Sales Order')[0])
68 so.insert(ignore_permissions=True)
Deepesh Garga9820cd2020-07-11 19:38:51 +053069 return so, [item.item_code]