Vinayak Jethe | df83148 | 2018-04-03 11:17:03 +0530 | [diff] [blame] | 1 | import unittest, frappe, requests, os, time, erpnext |
| 2 | |
| 3 | class TestWoocommerce(unittest.TestCase): |
| 4 | |
| 5 | def setUp(self): |
| 6 | # Set Secret in Woocommerce Settings |
| 7 | company = frappe.new_doc("Company") |
| 8 | company.company_name = "Woocommerce" |
| 9 | company.abbr = "W" |
| 10 | company.default_currency = "INR" |
| 11 | company.save() |
| 12 | frappe.db.commit() |
| 13 | |
| 14 | default = frappe.get_doc("Global Defaults") |
| 15 | self.old_default_company = default.default_company |
| 16 | default.default_company = "Woocommerce" |
| 17 | default.save() |
| 18 | |
| 19 | frappe.db.commit() |
| 20 | |
| 21 | time.sleep(5) |
| 22 | |
| 23 | woo_settings = frappe.get_doc("Woocommerce Settings") |
| 24 | woo_settings.secret = "ec434676aa1de0e502389f515c38f89f653119ab35e9117c7a79e576" |
| 25 | woo_settings.woocommerce_server_url = "https://woocommerce.mntechnique.com/" |
| 26 | woo_settings.api_consumer_key = "ck_fd43ff5756a6abafd95fadb6677100ce95a758a1" |
| 27 | woo_settings.api_consumer_secret = "cs_94360a1ad7bef7fa420a40cf284f7b3e0788454e" |
| 28 | woo_settings.enable_sync = 1 |
| 29 | woo_settings.tax_account = "Sales Expenses - W" |
| 30 | woo_settings.f_n_f_account = "Expenses - W" |
| 31 | woo_settings.save(ignore_permissions=True) |
| 32 | |
| 33 | frappe.db.commit() |
| 34 | |
| 35 | def test_woocommerce_request(self): |
| 36 | r = emulate_request() |
| 37 | self.assertTrue(r.status_code == 200) |
| 38 | self.assertTrue(frappe.get_value("Customer",{"woocommerce_email":"tony@gmail.com"})) |
| 39 | self.assertTrue(frappe.get_value("Item",{"woocommerce_id": 56})) |
| 40 | self.assertTrue(frappe.get_value("Sales Order",{"woocommerce_id":74})) |
| 41 | |
| 42 | # cancel & delete order |
| 43 | cancel_and_delete_order() |
| 44 | |
| 45 | # Emulate Request when Customer, Address, Item data exists |
| 46 | r = emulate_request() |
| 47 | self.assertTrue(r.status_code == 200) |
| 48 | self.assertTrue(frappe.get_value("Sales Order",{"woocommerce_id":74})) |
| 49 | |
| 50 | def tearDown(self): |
| 51 | default = frappe.get_doc("Global Defaults") |
| 52 | default.default_company = self.old_default_company |
| 53 | default.save() |
| 54 | frappe.db.commit() |
| 55 | |
| 56 | |
| 57 | |
| 58 | def emulate_request(): |
| 59 | # Emulate Woocommerce Request |
| 60 | headers = { |
| 61 | "X-Wc-Webhook-Event":"created", |
| 62 | "X-Wc-Webhook-Signature":"ckV+JSfmloltGpl/+YllrPXhe8KypukMhdZEMp0ChJM=" |
| 63 | } |
| 64 | # Emulate Request Data |
| 65 | data = """{"id":74,"parent_id":0,"number":"74","order_key":"wc_order_5aa1281c2dacb","created_via":"checkout","version":"3.3.3","status":"processing","currency":"INR","date_created":"2018-03-08T12:10:04","date_created_gmt":"2018-03-08T12:10:04","date_modified":"2018-03-08T12:10:04","date_modified_gmt":"2018-03-08T12:10:04","discount_total":"0.00","discount_tax":"0.00","shipping_total":"150.00","shipping_tax":"0.00","cart_tax":"0.00","total":"649.00","total_tax":"0.00","prices_include_tax":false,"customer_id":12,"customer_ip_address":"103.54.99.5","customer_user_agent":"mozilla\\/5.0 (x11; linux x86_64) applewebkit\\/537.36 (khtml, like gecko) chrome\\/64.0.3282.186 safari\\/537.36","customer_note":"","billing":{"first_name":"Tony","last_name":"Stark","company":"","address_1":"Mumbai","address_2":"","city":"Dadar","state":"MH","postcode":"123","country":"IN","email":"tony@gmail.com","phone":"123457890"},"shipping":{"first_name":"Tony","last_name":"Stark","company":"","address_1":"Mumbai","address_2":"","city":"Dadar","state":"MH","postcode":"123","country":"IN"},"payment_method":"cod","payment_method_title":"Cash on delivery","transaction_id":"","date_paid":null,"date_paid_gmt":null,"date_completed":null,"date_completed_gmt":null,"cart_hash":"8e76b020d5790066496f244860c4703f","meta_data":[],"line_items":[{"id":80,"name":"Marvel","product_id":56,"variation_id":0,"quantity":1,"tax_class":"","subtotal":"499.00","subtotal_tax":"0.00","total":"499.00","total_tax":"0.00","taxes":[],"meta_data":[],"sku":"","price":499}],"tax_lines":[],"shipping_lines":[{"id":81,"method_title":"Flat rate","method_id":"flat_rate:1","total":"150.00","total_tax":"0.00","taxes":[],"meta_data":[{"id":623,"key":"Items","value":"Marvel × 1"}]}],"fee_lines":[],"coupon_lines":[],"refunds":[]}""" |
| 66 | |
| 67 | # Build URL |
| 68 | port = frappe.get_site_config().webserver_port or '8000' |
| 69 | |
| 70 | if os.environ.get('CI'): |
| 71 | host = 'localhost' |
| 72 | else: |
| 73 | host = frappe.local.site |
| 74 | |
| 75 | url = "http://{site}:{port}/api/method/erpnext.erpnext_integrations.connectors.woocommerce_connection.order".format(site=host, port=port) |
| 76 | |
| 77 | r = requests.post(url=url, headers=headers, data=data) |
| 78 | |
| 79 | time.sleep(2) |
| 80 | return r |
| 81 | |
| 82 | def cancel_and_delete_order(): |
| 83 | # cancel & delete order |
| 84 | try: |
| 85 | so = frappe.get_doc("Sales Order",{"woocommerce_id":74}) |
| 86 | if isinstance(so, erpnext.selling.doctype.sales_order.sales_order.SalesOrder): |
| 87 | so.cancel() |
| 88 | so.delete() |
| 89 | frappe.db.commit() |
| 90 | except frappe.DoesNotExistError: |
| 91 | pass |