From 016bda51aad5dddb705f9ba1931eacd4b156188f Mon Sep 17 00:00:00 2001 From: saxenabhishek Date: Thu, 23 Dec 2021 21:29:12 +0530 Subject: [PATCH 1/3] test: import doctype fixtures --- frappe/custom/fixtures/temp_doctype.json | 168 +++++++++++++++++++++++ frappe/tests/test_fixture_import.py | 55 ++++++++ 2 files changed, 223 insertions(+) create mode 100644 frappe/custom/fixtures/temp_doctype.json create mode 100644 frappe/tests/test_fixture_import.py diff --git a/frappe/custom/fixtures/temp_doctype.json b/frappe/custom/fixtures/temp_doctype.json new file mode 100644 index 0000000000..343aa2cb37 --- /dev/null +++ b/frappe/custom/fixtures/temp_doctype.json @@ -0,0 +1,168 @@ +{ + "docstatus": 0, + "doctype": "DocType", + "name": "new-doctype-2", + "__islocal": 1, + "__unsaved": 1, + "owner": "Administrator", + "is_submittable": 0, + "istable": 0, + "issingle": 0, + "is_tree": 0, + "editable_grid": 1, + "quick_entry": 1, + "track_changes": 1, + "track_seen": 0, + "track_views": 0, + "custom": 1, + "beta": 0, + "is_virtual": 0, + "naming_rule": "", + "name_case": "", + "allow_rename": 1, + "hide_toolbar": 0, + "allow_copy": 0, + "allow_import": 0, + "allow_events_in_timeline": 0, + "allow_auto_repeat": 0, + "sort_field": "modified", + "sort_order": "DESC", + "document_type": "", + "show_preview_popup": 0, + "show_name_in_global_search": 0, + "email_append_to": 0, + "read_only": 0, + "in_create": 0, + "has_web_view": 0, + "allow_guest_to_view": 0, + "index_web_pages_for_search": 1, + "engine": "InnoDB", + "permissions": [ + { + "docstatus": 0, + "doctype": "DocPerm", + "name": "new-docperm-2", + "__islocal": 1, + "__unsaved": 1, + "owner": "Administrator", + "if_owner": 0, + "permlevel": 0, + "select": 0, + "read": 1, + "write": 1, + "create": 1, + "delete": 1, + "submit": 0, + "cancel": 0, + "amend": 0, + "report": 1, + "export": 1, + "import": 0, + "set_user_permissions": 0, + "share": 1, + "print": 1, + "email": 1, + "parent": "new-doctype-2", + "parentfield": "permissions", + "parenttype": "DocType", + "idx": 1, + "role": "System Manager" + } + ], + "__newname": "temp_doctype", + "module": "Custom", + "fields": [ + { + "docstatus": 0, + "doctype": "DocField", + "name": "new-docfield-1", + "__islocal": 1, + "__unsaved": 1, + "owner": "Administrator", + "fieldtype": "Data", + "precision": "", + "non_negative": 0, + "hide_days": 0, + "hide_seconds": 0, + "reqd": 1, + "search_index": 0, + "fetch_if_empty": 0, + "hidden": 0, + "bold": 0, + "allow_in_quick_entry": 0, + "translatable": 0, + "print_hide": 0, + "print_hide_if_no_value": 0, + "report_hide": 0, + "collapsible": 0, + "hide_border": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "in_preview": 0, + "in_filter": 0, + "in_global_search": 0, + "read_only": 0, + "allow_on_submit": 0, + "ignore_user_permissions": 0, + "allow_bulk_edit": 0, + "permlevel": 0, + "ignore_xss_filter": 0, + "unique": 0, + "no_copy": 0, + "set_only_once": 0, + "remember_last_selected_value": 0, + "parent": "new-doctype-2", + "parentfield": "fields", + "parenttype": "DocType", + "idx": 1, + "__unedited": false, + "label": "member_name" + }, + { + "docstatus": 0, + "doctype": "DocField", + "name": "new-docfield-2", + "__islocal": 1, + "__unsaved": 1, + "owner": "Administrator", + "fieldtype": "Data", + "precision": "", + "non_negative": 0, + "hide_days": 0, + "hide_seconds": 0, + "reqd": 0, + "search_index": 0, + "fetch_if_empty": 0, + "hidden": 0, + "bold": 0, + "allow_in_quick_entry": 0, + "translatable": 0, + "print_hide": 0, + "print_hide_if_no_value": 0, + "report_hide": 0, + "collapsible": 0, + "hide_border": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "in_preview": 0, + "in_filter": 0, + "in_global_search": 0, + "read_only": 0, + "allow_on_submit": 0, + "ignore_user_permissions": 0, + "allow_bulk_edit": 0, + "permlevel": 0, + "ignore_xss_filter": 0, + "unique": 0, + "no_copy": 0, + "set_only_once": 0, + "remember_last_selected_value": 0, + "parent": "new-doctype-2", + "parentfield": "fields", + "parenttype": "DocType", + "idx": 2, + "__unedited": false, + "label": "email" + } + ] +} diff --git a/frappe/tests/test_fixture_import.py b/frappe/tests/test_fixture_import.py new file mode 100644 index 0000000000..49a357e18c --- /dev/null +++ b/frappe/tests/test_fixture_import.py @@ -0,0 +1,55 @@ +import os +import unittest +from typing import List + +import frappe +from frappe.core.doctype.data_import.data_import import export_json, import_doc +from frappe.desk.form.save import savedocs +from frappe.model.delete_doc import delete_doc + + +class TestFixtureImport(unittest.TestCase): + def create_new_doctype(self, DocType: str) -> None: + file = frappe.get_app_path("frappe", "custom", "fixtures", f"{DocType}.json") + + file = open(file, "r") + doc = file.read() + file.close() + + savedocs(doc, "Save") + + def insert_dummy_data_and_export(self, DocType: str, dummy_name_list: List[str]) -> str: + for name in dummy_name_list: + doc = frappe.get_doc({"doctype": DocType, "member_name": name}) + doc.insert() + + path_to_exported_fixtures = os.path.join(os.getcwd(), f"{DocType}_data.json") + + export_json(DocType, path_to_exported_fixtures) + + return path_to_exported_fixtures + + def test_fixtures_import(self): + self.assertFalse(frappe.db.exists("DocType", "temp_doctype")) + + self.create_new_doctype("temp_doctype") + + dummy_name_list = ["jhon", "jane"] + path_to_exported_fixtures = self.insert_dummy_data_and_export("temp_doctype", dummy_name_list) + frappe.db.truncate("temp_doctype") + + import_doc(path_to_exported_fixtures) + + delete_doc("DocType", "temp_doctype", delete_permanently=True) + os.remove(path_to_exported_fixtures) + + self.assertEqual(frappe.db.count("temp_doctype"), len(dummy_name_list)) + + data = frappe.get_all("temp_doctype", "member_name") + frappe.db.truncate("temp_doctype") + + imported_data = set() + for item in data: + imported_data.add(item["member_name"]) + + self.assertEqual(set(dummy_name_list), imported_data) From ed9dad8f302e622e0a039bba186670d17fd1f502 Mon Sep 17 00:00:00 2001 From: saxenabhishek Date: Thu, 23 Dec 2021 22:13:51 +0530 Subject: [PATCH 2/3] test: import single doctype --- frappe/custom/fixtures/temp_singles.json | 168 +++++++++++++++++++++++ frappe/tests/test_fixture_import.py | 27 ++++ 2 files changed, 195 insertions(+) create mode 100644 frappe/custom/fixtures/temp_singles.json diff --git a/frappe/custom/fixtures/temp_singles.json b/frappe/custom/fixtures/temp_singles.json new file mode 100644 index 0000000000..b7e2536f25 --- /dev/null +++ b/frappe/custom/fixtures/temp_singles.json @@ -0,0 +1,168 @@ +{ + "docstatus": 0, + "doctype": "DocType", + "name": "new-doctype-1", + "__islocal": 1, + "__unsaved": 1, + "owner": "Administrator", + "is_submittable": 0, + "istable": 0, + "issingle": 1, + "is_tree": 0, + "editable_grid": 1, + "quick_entry": 0, + "track_changes": 1, + "track_seen": 0, + "track_views": 0, + "custom": 1, + "beta": 0, + "is_virtual": 0, + "naming_rule": "", + "name_case": "", + "allow_rename": 1, + "hide_toolbar": 0, + "allow_copy": 0, + "allow_import": 0, + "allow_events_in_timeline": 0, + "allow_auto_repeat": 0, + "sort_field": "modified", + "sort_order": "DESC", + "document_type": "", + "show_preview_popup": 0, + "show_name_in_global_search": 0, + "email_append_to": 0, + "read_only": 0, + "in_create": 0, + "has_web_view": 0, + "allow_guest_to_view": 0, + "index_web_pages_for_search": 1, + "engine": "InnoDB", + "permissions": [ + { + "docstatus": 0, + "doctype": "DocPerm", + "name": "new-docperm-1", + "__islocal": 1, + "__unsaved": 1, + "owner": "Administrator", + "if_owner": 0, + "permlevel": 0, + "select": 0, + "read": 1, + "write": 1, + "create": 1, + "delete": 1, + "submit": 0, + "cancel": 0, + "amend": 0, + "report": 1, + "export": 1, + "import": 0, + "set_user_permissions": 0, + "share": 1, + "print": 1, + "email": 1, + "parent": "new-doctype-1", + "parentfield": "permissions", + "parenttype": "DocType", + "idx": 1, + "role": "System Manager" + } + ], + "__newname": "temp_singles", + "module": "Custom", + "fields": [ + { + "docstatus": 0, + "doctype": "DocField", + "name": "new-docfield-1", + "__islocal": 1, + "__unsaved": 1, + "owner": "Administrator", + "fieldtype": "Data", + "precision": "", + "non_negative": 0, + "hide_days": 0, + "hide_seconds": 0, + "reqd": 0, + "search_index": 0, + "fetch_if_empty": 0, + "hidden": 0, + "bold": 0, + "allow_in_quick_entry": 0, + "translatable": 0, + "print_hide": 0, + "print_hide_if_no_value": 0, + "report_hide": 0, + "collapsible": 0, + "hide_border": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "in_preview": 0, + "in_filter": 0, + "in_global_search": 0, + "read_only": 0, + "allow_on_submit": 0, + "ignore_user_permissions": 0, + "allow_bulk_edit": 0, + "permlevel": 0, + "ignore_xss_filter": 0, + "unique": 0, + "no_copy": 0, + "set_only_once": 0, + "remember_last_selected_value": 0, + "parent": "new-doctype-1", + "parentfield": "fields", + "parenttype": "DocType", + "idx": 1, + "__unedited": false, + "label": "member_name" + }, + { + "docstatus": 0, + "doctype": "DocField", + "name": "new-docfield-2", + "__islocal": 1, + "__unsaved": 1, + "owner": "Administrator", + "fieldtype": "Data", + "precision": "", + "non_negative": 0, + "hide_days": 0, + "hide_seconds": 0, + "reqd": 0, + "search_index": 0, + "fetch_if_empty": 0, + "hidden": 0, + "bold": 0, + "allow_in_quick_entry": 0, + "translatable": 0, + "print_hide": 0, + "print_hide_if_no_value": 0, + "report_hide": 0, + "collapsible": 0, + "hide_border": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "in_preview": 0, + "in_filter": 0, + "in_global_search": 0, + "read_only": 0, + "allow_on_submit": 0, + "ignore_user_permissions": 0, + "allow_bulk_edit": 0, + "permlevel": 0, + "ignore_xss_filter": 0, + "unique": 0, + "no_copy": 0, + "set_only_once": 0, + "remember_last_selected_value": 0, + "parent": "new-doctype-1", + "parentfield": "fields", + "parenttype": "DocType", + "idx": 2, + "__unedited": false, + "label": "email" + } + ] +} diff --git a/frappe/tests/test_fixture_import.py b/frappe/tests/test_fixture_import.py index 49a357e18c..c9467b5de2 100644 --- a/frappe/tests/test_fixture_import.py +++ b/frappe/tests/test_fixture_import.py @@ -53,3 +53,30 @@ class TestFixtureImport(unittest.TestCase): imported_data.add(item["member_name"]) self.assertEqual(set(dummy_name_list), imported_data) + + def test_singles_fixtures_import(self): + self.assertFalse(frappe.db.exists("DocType", "temp_singles")) + + self.create_new_doctype("temp_singles") + + dummy_name_list = ["Phoebe"] + path_to_exported_fixtures = self.insert_dummy_data_and_export("temp_singles", dummy_name_list) + + singles_doctype = frappe.qb.DocType("Singles") + truncate_query = ( + frappe.qb.from_(singles_doctype) + .delete() + .where( + singles_doctype.doctype == "temp_singles") + ) + truncate_query.run() + + import_doc(path_to_exported_fixtures) + + delete_doc("DocType", "temp_singles", delete_permanently=True) + os.remove(path_to_exported_fixtures) + + data = frappe.db.get_single_value("temp_singles", "member_name") + truncate_query.run() + + self.assertEqual(data, dummy_name_list[0]) From f19c67314dbd412ff3c476db2078e6a37c093ba5 Mon Sep 17 00:00:00 2001 From: Suraj Shetty <13928957+surajshetty3416@users.noreply.github.com> Date: Fri, 24 Dec 2021 19:19:22 +0530 Subject: [PATCH 3/3] style: Fixed indentation --- frappe/tests/test_fixture_import.py | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/frappe/tests/test_fixture_import.py b/frappe/tests/test_fixture_import.py index c9467b5de2..2fe7e40d0d 100644 --- a/frappe/tests/test_fixture_import.py +++ b/frappe/tests/test_fixture_import.py @@ -64,11 +64,10 @@ class TestFixtureImport(unittest.TestCase): singles_doctype = frappe.qb.DocType("Singles") truncate_query = ( - frappe.qb.from_(singles_doctype) - .delete() - .where( - singles_doctype.doctype == "temp_singles") - ) + frappe.qb.from_(singles_doctype) + .delete() + .where(singles_doctype.doctype == "temp_singles") + ) truncate_query.run() import_doc(path_to_exported_fixtures)