diff --git a/api/segments/models.py b/api/segments/models.py index ab24811b5e2d..f904f1a4d2a4 100644 --- a/api/segments/models.py +++ b/api/segments/models.py @@ -242,12 +242,15 @@ def __str__(self): ) def get_skip_create_audit_log(self) -> bool: - segment = self.get_segment() - if segment.deleted_at: + try: + segment = self.get_segment() + if segment.deleted_at: + return True + return segment.version_of_id != segment.id + except (Segment.DoesNotExist, SegmentRule.DoesNotExist): + # handle hard delete return True - return segment.version_of_id != segment.id - def _get_project(self) -> typing.Optional[Project]: return self.get_segment().project @@ -363,11 +366,19 @@ def __str__(self): ) def get_skip_create_audit_log(self) -> bool: - if self.rule.deleted_at: - return True + try: - segment = self.rule.get_segment() - return segment.version_of_id != segment.id + if self.rule.deleted_at: + return True + + segment = self.rule.get_segment() + if segment.deleted_at: + return True + + return segment.version_of_id != segment.id + except (Segment.DoesNotExist, SegmentRule.DoesNotExist): + # handle hard delete + return True def get_update_log_message(self, history_instance) -> typing.Optional[str]: return f"Condition updated on segment '{self._get_segment().name}'." diff --git a/api/tests/unit/segments/test_unit_segments_models.py b/api/tests/unit/segments/test_unit_segments_models.py index 3fd2204762b9..f2d8e61a1016 100644 --- a/api/tests/unit/segments/test_unit_segments_models.py +++ b/api/tests/unit/segments/test_unit_segments_models.py @@ -126,6 +126,24 @@ def test__condition_get_skip_create_audit_log_on_segment_delete( assert condition.get_skip_create_audit_log() is True +def test__condition_get_skip_create_audit_log_on_segment_hard_delete( + segment_rule: SegmentRule, segment: Segment +) -> None: + # Given + condition = Condition.objects.create( + rule=segment_rule, + property="foo", + operator=EQUAL, + value="bar", + created_with_segment=False, + ) + # When + segment.delete() + + # Then + assert condition.get_skip_create_audit_log() is True + + def test_condition_get_delete_log_message_for_deleted_segment( segment, segment_rule, mocker ): @@ -440,6 +458,21 @@ def test_deep_clone_of_segment_with_grandchild_rule( ) +def test_segment_rule_get_skip_create_on_segment_hard_delete( + segment: Segment, +) -> None: + # Given + segment_rule = SegmentRule.objects.create( + segment=segment, type=SegmentRule.ALL_RULE + ) + + # When + segment.hard_delete() + + # Then + assert segment_rule.get_skip_create_audit_log() is True + + def test_segment_rule_get_skip_create_on_segment_delete( segment: Segment, ) -> None: @@ -452,7 +485,7 @@ def test_segment_rule_get_skip_create_on_segment_delete( segment.delete() # Then - assert segment_rule.get_skip_create_audit_log() is False + assert segment_rule.get_skip_create_audit_log() is True def test_segment_rule_get_skip_create_audit_log_when_doesnt_skip( diff --git a/api/tests/unit/users/test_unit_users_views.py b/api/tests/unit/users/test_unit_users_views.py index 00ce5fff89fa..f93a184f6475 100644 --- a/api/tests/unit/users/test_unit_users_views.py +++ b/api/tests/unit/users/test_unit_users_views.py @@ -760,7 +760,7 @@ def test_delete_user_social_auth_with_no_password(password): @pytest.mark.django_db def test_change_email_address_api(mocker): # Given - mocked_task = mocker.patch("users.signals.send_email_changed_notification_email") + mocked_task = mocker.patch("users.tasks.send_email_changed_notification_email") # create an user old_email = "test_user@test.com" first_name = "firstname"