#1266 frontend: more tests for pagure_events
Merged 4 years ago by praiskup. Opened 4 years ago by schlupov.
copr/ schlupov/copr test_pagure_events  into  master

frontend: more tests for pagure_events
Silvie Chlupova • 4 years ago  
@@ -68,4 +68,5 @@ 

    'io.pagure.prod.pagure.git.receive' : 'https://pagure.io/',

    'io.pagure.prod.pagure.pull-request.new' : 'https://pagure.io/',

    'io.pagure.prod.pagure.pull-request.comment.added' : 'https://pagure.io/',

+   'io.pagure.prod.pagure.pull-request.updated' : 'https://pagure.io/'

  }

@@ -57,7 +57,7 @@ 

          self.committish = self.source_json_dict.get('committish') or ''

          self.subdirectory = self.source_json_dict.get('subdirectory') or ''

  

-         self.package = ComplexLogic.get_package_by_id_safe(db_row.package_id)

+         self.package = ComplexLogic.get_package_by_id_safe(db_row.id)

          self.copr = self.package.copr

  

      def build(self, source_dict_update, copr_dir, update_callback,
@@ -68,30 +68,21 @@ 

          else:

              package = self.package

  

-         db.session.execute('LOCK TABLE build IN EXCLUSIVE MODE')

+         if db.engine.url.drivername != 'sqlite':

+             db.session.execute('LOCK TABLE build IN EXCLUSIVE MODE')

+ 

          return BuildsLogic.rebuild_package(

              package, source_dict_update, copr_dir, update_callback,

              scm_object_type, scm_object_id, scm_object_url, submitted_by=agent_url)

  

      @classmethod

      def get_candidates_for_rebuild(cls, clone_url):

-         if db.engine.url.drivername == 'sqlite':

-             placeholder = '?'

-             true = '1'

-         else:

-             placeholder = '%s'

-             true = 'true'

- 

-         rows = db.engine.execute(

-             """

-             SELECT package.id AS package_id, package.source_json AS source_json, package.copr_id AS copr_id

-             FROM package JOIN copr_dir ON package.copr_dir_id = copr_dir.id

-             WHERE package.source_type = {0} AND

-                   package.webhook_rebuild = {1} AND

-                   copr_dir.main = {2} AND

-                   package.source_json ILIKE {placeholder}

-             """.format(SCM_SOURCE_TYPE, true, true, placeholder=placeholder), '%'+clone_url+'%'

-         )

+         rows = models.Package.query \

+             .filter(models.Package.source_type == SCM_SOURCE_TYPE) \

+             .filter(models.Package.webhook_rebuild) \

+             .filter(models.CoprDir.main) \

+             .filter(models.Package.source_json.ilike('%' + clone_url + '%'))

+ 

          return [ScmPackage(row) for row in rows]

  

  

@@ -1,5 +1,13 @@ 

- from pagure_events import event_info_from_pr_comment, event_info_from_push, event_info_from_pr

+ from pagure_events import (event_info_from_pr_comment, event_info_from_push, event_info_from_pr, ScmPackage,

+                            build_on_fedmsg_loop, ScmPackage)

  from tests.coprs_test_case import CoprsTestCase

+ from unittest import mock

+ 

+ 

+ class Message:

+     def __init__(self, topic, body):

+         self.topic = topic

+         self.body = body

  

  

  class TestPagureEvents(CoprsTestCase):
@@ -31,11 +39,95 @@ 

          event_info = event_info_from_pr_comment(self.data, self.base_url)

          assert not event_info

  

+     def test_negative_is_dir_in_commit(self, f_users, f_coprs):

+         self.p2 = self.models.Package(

+             copr=self.c1, copr_dir=self.c1_dir, name="hello-world", source_type=8, webhook_rebuild=True,

+             source_json='{"clone_url": "https://pagure.io/test"}'

+         )

+         candidates = ScmPackage.get_candidates_for_rebuild("https://pagure.io/test")

+         dir_in_commit = [pkg for pkg in candidates if pkg.is_dir_in_commit({''})]

+ 

+         assert len(dir_in_commit) == 0

+ 

+     def test_positive_is_dir_in_commit(self, f_users, f_coprs):

+         dir_in_commit = False

+         changed_files = {

+             'tests/integration/conftest.py @@ -28,6 +28,16 @@ def test_env(): return env',

+             'tests/integration/conftest.py b/tests/integration/conftest.py index '

+             '1747874..a2b81f6 100644 --- a/tests/integration/conftest.py +++'}

+         self.p2 = self.models.Package(

+             copr=self.c1, copr_dir=self.c1_dir, name="hello-world", source_type=8, webhook_rebuild=True,

+             source_json='{"clone_url": "https://pagure.io/test"}'

+         )

+         candidates = ScmPackage.get_candidates_for_rebuild("https://pagure.io/test")

+         for pkg in candidates:

+             dir_in_commit = pkg.is_dir_in_commit(changed_files)

+ 

+         assert dir_in_commit is True

+ 

+     @mock.patch('pagure_events.helpers.raw_commit_changes')

+     @mock.patch('pagure_events.get_repeatedly')

+     def test_positive_build_from_pr_update(self, f_get_repeatedly, f_raw_commit_changes, f_users, f_coprs):

+         f_raw_commit_changes.return_value = {

+             'tests/integration/conftest.py @@ -28,6 +28,16 @@ def test_env(): return env',

+             'tests/integration/conftest.py b/tests/integration/conftest.py index '

+             '1747874..a2b81f6 100644 --- a/tests/integration/conftest.py +++'}

+         self.p1 = self.models.Package(

+             copr=self.c1, copr_dir=self.c1_dir, name="hello-world", source_type=8, webhook_rebuild=True,

+             source_json='{"clone_url": "https://pagure.io/test/copr/copr"}'

+         )

+         build = build_on_fedmsg_loop()

+         message = Message(

+             'io.pagure.prod.pagure.pull-request.updated',

+             self.data['msg']

+         )

+         build(message)

+         builds = self.models.Build.query.all()

+         assert len(builds) == 1

+         assert builds[0].scm_object_type == 'pull-request'

+ 

+     def test_negative_event_info_from_pr_comment_random_comment(self):

+         self.data['msg']['pullrequest']["comments"].append({"comment": "my testing comment"})

+         event_info = event_info_from_pr_comment(self.data, self.base_url)

+         assert event_info is False

+ 

      def test_positive_event_info_from_pr_comment(self):

          self.data['msg']['pullrequest']["comments"].append({"comment": "[copr-build]"})

          event_info = event_info_from_pr_comment(self.data, self.base_url)

          assert event_info.base_clone_url == "https://pagure.io/test/copr/copr"

  

+     @mock.patch('pagure_events.helpers.raw_commit_changes')

+     @mock.patch('pagure_events.get_repeatedly')

+     def test_negative_build_from_pr_comment(self, f_get_repeatedly, f_raw_commit_changes, f_users, f_coprs):

+         f_raw_commit_changes.return_value = {

+             'tests/integration/conftest.py @@ -28,6 +28,16 @@ def test_env(): return env',

+             'tests/integration/conftest.py b/tests/integration/conftest.py index '

+             '1747874..a2b81f6 100644 --- a/tests/integration/conftest.py +++'}

+         build = build_on_fedmsg_loop()

+         message = Message(

+             'io.pagure.prod.pagure.pull-request.comment.added',

+             self.data['msg']

+         )

+         build(message)

+         builds = self.models.Build.query.all()

+         assert len(builds) == 0

+ 

+     def test_negative_event_info(self, f_users, f_coprs):

+         self.data['msg']['pullrequest']["status"] = "Closed"

+         build = build_on_fedmsg_loop()

+         message = Message(

+             'io.pagure.prod.pagure.pull-request.comment.added',

+             self.data['msg']

+         )

+         build(message)

+         builds = self.models.Build.query.all()

+         assert len(builds) == 0

+ 

+     def test_negative_event_info_from_pr_comment_closed_pr(self):

+         self.data['msg']['pullrequest']["status"] = "Closed"

+         event_info = event_info_from_pr_comment(self.data, self.base_url)

+         assert event_info is False

+ 

      def test_positive_event_info_from_pr(self):

          event_info = event_info_from_pr(self.data, self.base_url)

          assert event_info.base_clone_url == "https://pagure.io/test/copr/copr"
@@ -50,3 +142,51 @@ 

          self.data['msg']['repo'] = {"fullname": "test", "url_path": "test"}

          event_info = event_info_from_push(self.data, self.base_url)

          assert event_info.base_clone_url == "https://pagure.io/test"

+ 

+     @mock.patch('pagure_events.helpers.raw_commit_changes')

+     @mock.patch('pagure_events.get_repeatedly')

+     def test_positive_build_from_push(self, f_get_repeatedly, f_raw_commit_changes, f_users, f_coprs):

+         f_raw_commit_changes.return_value = {

+             'tests/integration/conftest.py @@ -28,6 +28,16 @@ def test_env(): return env',

+             'tests/integration/conftest.py b/tests/integration/conftest.py index '

+             '1747874..a2b81f6 100644 --- a/tests/integration/conftest.py +++'}

+         self.p1 = self.models.Package(

+             copr=self.c1, copr_dir=self.c1_dir, name="hello-world", source_type=8, webhook_rebuild=True,

+             source_json='{"clone_url": "https://pagure.io/test"}'

+         )

+         build = build_on_fedmsg_loop()

+         message = Message(

+             'io.pagure.prod.pagure.git.receive',

+             self.data['msg']

+         )

+         build(message)

+         builds = self.models.Build.query.all()

+         assert len(builds) == 1

+         assert builds[0].scm_object_type == 'commit'

+ 

+     @mock.patch('pagure_events.helpers.raw_commit_changes')

+     @mock.patch('pagure_events.get_repeatedly')

+     def test_negative_build_from_push(self, f_get_repeatedly, f_raw_commit_changes, f_users, f_coprs):

+         f_raw_commit_changes.return_value = {''}

+         self.p1 = self.models.Package(

+             copr=self.c1, copr_dir=self.c1_dir, name="hello-world", source_type=8, webhook_rebuild=True,

+             source_json='{"clone_url": "https://pagure.io/test"}',

+         )

+         build = build_on_fedmsg_loop()

+         message = Message(

+             'io.pagure.prod.pagure.git.receive',

+             self.data['msg']

+         )

+         build(message)

+         builds = self.models.Build.query.all()

+         assert len(builds) == 0

+ 

+     def test_negative_unknown_topic(self):

+         build = build_on_fedmsg_loop()

+         message = Message(

+             'io.pagure.prod.pagure.git.test',

+             self.data['msg']

+         )

+         build(message)

+         builds = self.models.Build.query.all()

+         assert len(builds) == 0

rebased onto 7575dd3b77773e923853970b7b60be8edf233d63

4 years ago

This is silently removed, can you create separate commit for this and document why you think it is just fine to drop it?

Is filter(models.CoprDir.main) equivalent to filter(models.CoprDir.main == True)?

Is filter(models.CoprDir.main) equivalent to filter(models.CoprDir.main == True)?

yes, it is equivalent.

rebased onto 8b33125

4 years ago

Worth testing is still the line 91 imo, but good job.

Commit 55c3adb fixes this pull-request

Pull-Request has been merged by praiskup

4 years ago