diff --git a/atmosphere/models.py b/atmosphere/models.py index 9cfe581..c92beb6 100644 --- a/atmosphere/models.py +++ b/atmosphere/models.py @@ -197,7 +197,7 @@ class Resource(db.Model, GetOrCreateMixin): raise exceptions.EventTooOld() # If we're deleted, then we close the current period. - if 'deleted_at' in event['traits']: + if resource.__class__.is_event_delete(event): period.ended_at = event['traits']['deleted_at'] elif period.spec != spec: period.ended_at = event['generated'] @@ -259,6 +259,11 @@ class Instance(Resource): return False + @classmethod + def is_event_delete(cls, event): + """is_event_delete""" + return 'deleted_at' in event['traits'] + class BigIntegerDateTime(TypeDecorator): """BigIntegerDateTime""" diff --git a/atmosphere/tests/unit/test_models.py b/atmosphere/tests/unit/test_models.py index 8d585dc..1caae82 100644 --- a/atmosphere/tests/unit/test_models.py +++ b/atmosphere/tests/unit/test_models.py @@ -428,6 +428,15 @@ class TestResource(GetOrCreateTestMixin): @pytest.mark.usefixtures("db_session") class TestInstance: + def test_is_event_delete(self): + event = fake.get_normalized_event() + assert models.Instance.is_event_delete(event) == False + + def test_is_event_delete_for_actual_delete(self): + event = fake.get_normalized_event() + event['traits']['deleted_at'] = event['generated'] + assert models.Instance.is_event_delete(event) == True + def test_is_event_ignored(self): event = fake.get_normalized_event() assert models.Instance.is_event_ignored(event) == False