From b09beb914777972ccd04eb2bfbbd6b52250475ab Mon Sep 17 00:00:00 2001 From: Rushabh Mehta Date: Thu, 13 Aug 2020 13:02:30 +0530 Subject: [PATCH] fix(tests): cleanup --- .../milestone_tracker/milestone_tracker.py | 10 +++++--- .../test_milestone_tracker.py | 9 +++++++- frappe/database/database.py | 2 +- .../event_update_log/event_update_log.py | 23 +++++++++++-------- frappe/hooks.py | 6 ++++- frappe/model/delete_doc.py | 5 ---- .../energy_point_rule/energy_point_rule.py | 4 +++- .../doctype/workflow/test_workflow.py | 12 +++++----- 8 files changed, 44 insertions(+), 27 deletions(-) diff --git a/frappe/automation/doctype/milestone_tracker/milestone_tracker.py b/frappe/automation/doctype/milestone_tracker/milestone_tracker.py index 11109fd248..8d1eebfef8 100644 --- a/frappe/automation/doctype/milestone_tracker/milestone_tracker.py +++ b/frappe/automation/doctype/milestone_tracker/milestone_tracker.py @@ -38,6 +38,10 @@ def evaluate_milestone(doc, event): return # track milestones related to this doctype - for d in frappe.cache_manager.get_doctype_map('Milestone Tracker', doc.doctype, - dict(document_type = doc.doctype, disabled=0)): - frappe.get_doc('Milestone Tracker', d.name).apply(doc) + for d in get_milestone_trackers(doc.doctype): + frappe.get_doc('Milestone Tracker', d.get('name')).apply(doc) + +def get_milestone_trackers(doctype): + return frappe.cache_manager.get_doctype_map('Milestone Tracker', doctype, + dict(document_type = doctype, disabled=0)) + diff --git a/frappe/automation/doctype/milestone_tracker/test_milestone_tracker.py b/frappe/automation/doctype/milestone_tracker/test_milestone_tracker.py index c9bb6b7d5f..9476c566d6 100644 --- a/frappe/automation/doctype/milestone_tracker/test_milestone_tracker.py +++ b/frappe/automation/doctype/milestone_tracker/test_milestone_tracker.py @@ -4,11 +4,17 @@ from __future__ import unicode_literals import frappe +import frappe.cache_manager import unittest +from .milestone_tracker import get_milestone_trackers + class TestMilestoneTracker(unittest.TestCase): def test_milestone(self): frappe.db.sql('delete from `tabMilestone Tracker`') + + frappe.cache().delete_key('milestone_tracker_map') + frappe.get_doc(dict( doctype = 'Milestone Tracker', document_type = 'ToDo', @@ -17,7 +23,8 @@ class TestMilestoneTracker(unittest.TestCase): todo = frappe.get_doc(dict( doctype = 'ToDo', - description = 'test milestone' + description = 'test milestone', + status = 'Open' )).insert() milestones = frappe.get_all('Milestone', diff --git a/frappe/database/database.py b/frappe/database/database.py index 8068ad877e..8332a71168 100644 --- a/frappe/database/database.py +++ b/frappe/database/database.py @@ -194,7 +194,7 @@ class Database(object): def log_query(self, query, values, debug, explain): # for debugging in tests - if frappe.cache().get_value('flag_print_sql'): + if frappe.conf.get('allow_tests') and frappe.cache().get_value('flag_print_sql'): print(self.mogrify(query, values)) # debug diff --git a/frappe/event_streaming/doctype/event_update_log/event_update_log.py b/frappe/event_streaming/doctype/event_update_log/event_update_log.py index db76d21738..4fd64394cb 100644 --- a/frappe/event_streaming/doctype/event_update_log/event_update_log.py +++ b/frappe/event_streaming/doctype/event_update_log/event_update_log.py @@ -19,7 +19,7 @@ class EventUpdateLog(Document): enqueue_after_commit=True) def notify_consumers(doc, event): - '''called via triggers''' + '''called via hooks''' # make event update log for doctypes having event consumers if frappe.flags.in_install or frappe.flags.in_migrate: return @@ -28,14 +28,19 @@ def notify_consumers(doc, event): if consumers: doc_before_save = doc.get_doc_before_save() - if doc.flags.update_log_for_doc_creation: - make_event_update_log(doc, update_type='Create') - doc.flags.update_log_for_doc_creation = False + + if event=='after_insert': + doc.flags.event_update_log = make_event_update_log(doc, update_type='Create') + elif event=='on_trash': + make_event_update_log(doc, update_type='Delete') else: - diff = get_update(doc_before_save, doc) - if diff: - doc.diff = diff - make_event_update_log(doc, update_type='Update') + # on_update + # called after saving + if not doc.flags.event_update_log: # if not already inserted + diff = get_update(doc_before_save, doc) + if diff: + doc.diff = diff + make_event_update_log(doc, update_type='Update') def check_doctype_has_consumers(doctype): """Check if doctype has event consumers for event streaming""" @@ -88,7 +93,7 @@ def make_event_update_log(doc, update_type): data = frappe.as_json(doc) if not doc.get('diff') else frappe.as_json(doc.diff) else: data = None - log_doc = frappe.get_doc({ + return frappe.get_doc({ 'doctype': 'Event Update Log', 'update_type': update_type, 'ref_doctype': doc.doctype, diff --git a/frappe/hooks.py b/frappe/hooks.py index f50ad0b374..6277998b04 100644 --- a/frappe/hooks.py +++ b/frappe/hooks.py @@ -127,6 +127,9 @@ standard_queries = { doc_events = { "*": { + "after_insert": [ + "frappe.event_streaming.doctype.event_update_log.event_update_log.notify_consumers" + ], "on_update": [ "frappe.desk.notifications.clear_doctype_notifications", "frappe.core.doctype.activity_log.feed.update_feed", @@ -142,7 +145,8 @@ doc_events = { ], "on_trash": [ "frappe.desk.notifications.clear_doctype_notifications", - "frappe.workflow.doctype.workflow_action.workflow_action.process_workflow_actions" + "frappe.workflow.doctype.workflow_action.workflow_action.process_workflow_actions", + "frappe.event_streaming.doctype.event_update_log.event_update_log.notify_consumers" ], "on_change": [ "frappe.social.doctype.energy_point_rule.energy_point_rule.process_energy_points" diff --git a/frappe/model/delete_doc.py b/frappe/model/delete_doc.py index 98dbce1d8f..a38470e3f5 100644 --- a/frappe/model/delete_doc.py +++ b/frappe/model/delete_doc.py @@ -18,7 +18,6 @@ from frappe.model.naming import revert_series_if_last from frappe.utils.global_search import delete_for_document from frappe.desk.doctype.tag.tag import delete_tags_for_document from frappe.exceptions import FileNotFoundError -from frappe.model.document import make_event_update_log, check_doctype_has_consumers doctypes_to_skip = ("Communication", "ToDo", "DocShare", "Email Unsubscribe", "Activity Log", "File", "Version", "Document Follow", "Comment" , "View Log", "Tag Link", "Notification Log", "Email Queue") @@ -121,10 +120,6 @@ def delete_doc(doctype=None, name=None, force=0, ignore_doctypes=None, for_reloa # delete tag link entry delete_tags_for_document(doc) - # update log if doctype has event consumers - if not frappe.flags.in_install and not frappe.flags.in_migrate and check_doctype_has_consumers(doc.doctype): - make_event_update_log(doc, update_type='Delete') - if doc and not for_reload: add_to_deleted_document(doc) if not frappe.flags.in_patch: diff --git a/frappe/social/doctype/energy_point_rule/energy_point_rule.py b/frappe/social/doctype/energy_point_rule/energy_point_rule.py index d04448dc0f..c3ebdffde0 100644 --- a/frappe/social/doctype/energy_point_rule/energy_point_rule.py +++ b/frappe/social/doctype/energy_point_rule/energy_point_rule.py @@ -6,6 +6,7 @@ from __future__ import unicode_literals import frappe from frappe import _ import frappe.cache_manager +from frappe.model import log_types from frappe.model.document import Document from frappe.social.doctype.energy_point_settings.energy_point_settings import is_energy_point_enabled from frappe.social.doctype.energy_point_log.energy_point_log import \ @@ -85,7 +86,8 @@ def process_energy_points(doc, state): or frappe.flags.in_install or frappe.flags.in_migrate or frappe.flags.in_import - or frappe.flags.in_setup_wizard): + or frappe.flags.in_setup_wizard + or doc.doctype in log_types): return if not is_energy_point_enabled(): diff --git a/frappe/workflow/doctype/workflow/test_workflow.py b/frappe/workflow/doctype/workflow/test_workflow.py index f23bdc5652..22a9c97c1f 100644 --- a/frappe/workflow/doctype/workflow/test_workflow.py +++ b/frappe/workflow/doctype/workflow/test_workflow.py @@ -13,17 +13,15 @@ class TestWorkflow(unittest.TestCase): @classmethod def setUpClass(cls): make_test_records("User") - frappe.print_sql(True) - - @classmethod - def tearDownClass(cls): - frappe.print_sql(False) def setUp(self): if not getattr(self, 'workflow', None): self.workflow = create_todo_workflow() frappe.set_user('Administrator') + def tearDown(self): + self.workflow.db_set('is_active', 0) + def test_default_condition(self): '''test default condition is set''' todo = create_new_todo() @@ -128,7 +126,9 @@ class TestWorkflow(unittest.TestCase): def create_todo_workflow(): if frappe.db.exists('Workflow', 'Test ToDo'): - return frappe.get_doc('Workflow', 'Test ToDo').save(ignore_permissions=True) + workflow = frappe.get_doc('Workflow', 'Test ToDo').save(ignore_permissions=True) + workflow.db_set('is_active', 1) + return workflow else: frappe.get_doc(dict(doctype='Role', role_name='Test Approver')).insert(ignore_if_duplicate=True)