From a6690388272f969b5c37bab942c89bece40c0d06 Mon Sep 17 00:00:00 2001 From: gnaponie Date: Jun 25 2019 08:48:57 +0000 Subject: Show event dependencies in the REST API The event dependencies are now visible in the REST API when asking for a event. New information are: depends_on_events and depending_events. Signed-off-by: gnaponie --- diff --git a/freshmaker/models.py b/freshmaker/models.py index 8bb3c47..051e8d6 100644 --- a/freshmaker/models.py +++ b/freshmaker/models.py @@ -284,6 +284,15 @@ class Event(FreshmakerBase): id=dep.event_dependency_id).first()) return events + @property + def depends_on_events(self): + depends_on_events = [] + parents = EventDependency.query.filter_by(event_dependency_id=self.id).all() + for p in parents: + depends_on_events.append(Event.query.filter_by( + id=p.event_id).first()) + return depends_on_events + def has_all_builds_in_state(self, state): """ Returns True when all builds are in the given `state`. @@ -360,6 +369,8 @@ class Event(FreshmakerBase): def json(self): data = self._common_json() data['builds'] = [b.json() for b in self.builds] + data['depends_on_events'] = [event.id for event in self.depends_on_events] + data['depending_events'] = [event.id for event in self.event_dependencies] return data def json_min(self): diff --git a/tests/test_models.py b/tests/test_models.py index de4a9d2..7b0a58c 100644 --- a/tests/test_models.py +++ b/tests/test_models.py @@ -372,6 +372,7 @@ class TestEventDependency(helpers.ModelsTestCase): event = Event.create(db.session, "test_msg_id", "test", events.TestingEvent) db.session.commit() self.assertEqual(event.event_dependencies, []) + self.assertEqual(event.depends_on_events, []) def test_add_a_dependent_event(self): event = Event.create(db.session, "test_msg_id", "test", events.TestingEvent) @@ -384,6 +385,8 @@ class TestEventDependency(helpers.ModelsTestCase): self.assertEqual(event.event_dependencies, [event1]) self.assertEqual(event.event_dependencies[0].search_key, "test2") self.assertEqual(event1.event_dependencies, []) + self.assertEqual(event1.depends_on_events, [event]) + self.assertEqual(event.depends_on_events, []) def test_add_existing_dependent_event(self): event = Event.create(db.session, "test_msg_id", "test", events.TestingEvent) @@ -396,6 +399,7 @@ class TestEventDependency(helpers.ModelsTestCase): self.assertIsNone(rel) self.assertEqual(event.event_dependencies, [event1]) + self.assertEqual(event1.depends_on_events, [event]) def test_return_added_dependency_relationship(self): event = Event.create(db.session, "test_msg_id", "test", events.TestingEvent) diff --git a/tests/test_views.py b/tests/test_views.py index c54fa6a..c32c8e7 100644 --- a/tests/test_views.py +++ b/tests/test_views.py @@ -475,6 +475,24 @@ class TestViews(helpers.ModelsTestCase): 'images': {'foo-1-1': ['content-set']}, 'msg': 'Found 1 images which are handled by Freshmaker for defined content_sets.'}) + def test_dependencies(self): + event = models.Event.create(db.session, "2017-00000000-0000-0000-0000-000000000003", "RHSA-2018-103", events.TestingEvent) + event1 = models.Event.create(db.session, "2017-00000000-0000-0000-0000-000000000004", "RHSA-2018-104", events.TestingEvent) + db.session.commit() + event.add_event_dependency(db.session, event1) + db.session.commit() + resp = self.client.get('/api/1/events/4') + data = json.loads(resp.get_data(as_text=True)) + self.assertEqual(data['id'], event1.id) + self.assertEqual(data['depends_on_events'], [event.id]) + self.assertEqual(data['depending_events'], []) + + resp = self.client.get('/api/1/events/3') + data = json.loads(resp.get_data(as_text=True)) + self.assertEqual(data['id'], event.id) + self.assertEqual(data['depends_on_events'], []) + self.assertEqual(data['depending_events'], [event1.id]) + class TestViewsMultipleFilterValues(helpers.ModelsTestCase): def setUp(self): @@ -540,6 +558,8 @@ class TestManualTriggerRebuild(helpers.ModelsTestCase): # Other fields are predictible. self.assertEqual(data, { u'builds': [], + u'depending_events': [], + u'depends_on_events': [], u'event_type_id': 13, u'id': 1, u'message_id': u'manual_rebuild_123',