#56 Support querying builds with event_type_id and/or event_search_key
Merged 7 years ago by qwan. Opened 7 years ago by qwan.

file modified
+12
@@ -21,6 +21,7 @@ 

  

  from flask import request, url_for

  

+ from freshmaker import db

  from freshmaker.types import ArtifactType, ArtifactBuildState

  from freshmaker.models import ArtifactBuild, Event

  
@@ -94,6 +95,17 @@ 

      if search_query:

          query = query.filter_by(**search_query)

  

+     event_type_id = flask_request.args.get('event_type_id', None)

+     if event_type_id:

+         query = query.join(Event).filter(Event.event_type_id == event_type_id)

+ 

+     event_search_key = flask_request.args.get('event_search_key', None)

+     if event_search_key:

+         # use alias to avoid 'ambiguous column name' error when we have both

+         # event_type_id and event_search_key specified.

+         ea = db.aliased(Event)

+         query = query.join(ea).filter(ea.search_key == event_search_key)

+ 

      page = flask_request.args.get('page', 1, type=int)

      per_page = flask_request.args.get('per_page', 10, type=int)

      return query.paginate(page, per_page, False)

file modified
+53
@@ -112,6 +112,59 @@ 

              self.client.get('/freshmaker/1/builds/?state=100')

          self.assertEqual(str(ctx.exception), 'An invalid state was supplied')

  

+     def test_query_build_by_event_type_id(self):

+         event1 = models.Event.create(db.session,

+                                      "2018-00000000-0000-0000-0000-000000000001",

+                                      "testmodule/master/?#0000000000000000000000000000000000000001",

+                                      events.GitModuleMetadataChangeEvent)

+         build1 = models.ArtifactBuild.create(db.session, event1, "testmodule", "module", 2345)

+         event2 = models.Event.create(db.session,

+                                      "2018-00000000-0000-0000-0000-000000000002",

+                                      "2345",

+                                      events.MBSModuleStateChangeEvent)

+         models.ArtifactBuild.create(db.session, event2, "testmodule2", "module", 2346, build1)

+ 

+         event3 = models.Event.create(db.session,

+                                      "2018-00000000-0000-0000-0000-000000000003",

+                                      "testmodule3/master/?#0000000000000000000000000000000000000001",

+                                      events.GitModuleMetadataChangeEvent)

+         models.ArtifactBuild.create(db.session, event3, "testmodule3", "module", 2347, build1)

+         db.session.commit()

+ 

+         resp = self.client.get('/freshmaker/1/builds/?event_type_id=%s' % models.EVENT_TYPES[events.TestingEvent])

+         builds = json.loads(resp.data.decode('utf8'))['items']

+         self.assertEqual(len(builds), 3)

+ 

+         resp = self.client.get('/freshmaker/1/builds/?event_type_id=%s' % models.EVENT_TYPES[events.GitModuleMetadataChangeEvent])

+         builds = json.loads(resp.data.decode('utf8'))['items']

+         self.assertEqual(len(builds), 2)

+ 

+         resp = self.client.get('/freshmaker/1/builds/?event_type_id=%s' % models.EVENT_TYPES[events.MBSModuleStateChangeEvent])

+         builds = json.loads(resp.data.decode('utf8'))['items']

+         self.assertEqual(len(builds), 1)

+ 

+         resp = self.client.get('/freshmaker/1/builds/?event_type_id=%s' % models.EVENT_TYPES[events.KojiTaskStateChangeEvent])

+         builds = json.loads(resp.data.decode('utf8'))['items']

+         self.assertEqual(len(builds), 0)

+ 

+     def test_query_build_by_event_search_key(self):

+         resp = self.client.get('/freshmaker/1/builds/?event_search_key=RHSA-2018-101')

+         builds = json.loads(resp.data.decode('utf8'))['items']

+         self.assertEqual(len(builds), 3)

+ 

+         resp = self.client.get('/freshmaker/1/builds/?event_search_key=RHSA-2018-102')

+         builds = json.loads(resp.data.decode('utf8'))['items']

+         self.assertEqual(len(builds), 0)

+ 

+     def test_query_build_by_event_type_id_and_search_key(self):

+         resp = self.client.get('/freshmaker/1/builds/?event_type_id=%s&event_search_key=RHSA-2018-101' % models.EVENT_TYPES[events.TestingEvent])

+         builds = json.loads(resp.data.decode('utf8'))['items']

+         self.assertEqual(len(builds), 3)

+ 

+         resp = self.client.get('/freshmaker/1/builds/?event_type_id=%s&event_search_key=RHSA-2018-102' % models.EVENT_TYPES[events.TestingEvent])

+         builds = json.loads(resp.data.decode('utf8'))['items']

+         self.assertEqual(len(builds), 0)

+ 

      def test_query_event(self):

          resp = self.client.get('/freshmaker/1/events/1')

          data = json.loads(resp.data.decode('utf8'))

no initial comment

Pull-Request has been merged by qwan

7 years ago