/ tests / CheckSuite.py
CheckSuite.py
  1  ############################ Copyrights and license ############################
  2  #                                                                              #
  3  # Copyright 2020 Raju Subramanian <coder@mahesh.net>                           #
  4  # Copyright 2020 Dhruv Manilawala <dhruvmanila@gmail.com>                      #
  5  #                                                                              #
  6  # This file is part of PyGithub.                                               #
  7  # http://pygithub.readthedocs.io/                                              #
  8  #                                                                              #
  9  # PyGithub is free software: you can redistribute it and/or modify it under    #
 10  # the terms of the GNU Lesser General Public License as published by the Free  #
 11  # Software Foundation, either version 3 of the License, or (at your option)    #
 12  # any later version.                                                           #
 13  #                                                                              #
 14  # PyGithub is distributed in the hope that it will be useful, but WITHOUT ANY  #
 15  # WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS    #
 16  # FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more #
 17  # details.                                                                     #
 18  #                                                                              #
 19  # You should have received a copy of the GNU Lesser General Public License     #
 20  # along with PyGithub. If not, see <http://www.gnu.org/licenses/>.             #
 21  #                                                                              #
 22  ################################################################################
 23  
 24  from datetime import datetime, timezone
 25  
 26  from . import Framework
 27  
 28  
 29  class CheckSuite(Framework.TestCase):
 30      def setUp(self):
 31          super().setUp()
 32          self.check_suite_id = 1004503837
 33          self.test_check_suite_id = 1366665055
 34          self.test_repo = self.g.get_repo("dhruvmanila/pygithub-testing")
 35          self.test_check_suite = self.test_repo.get_check_suite(self.test_check_suite_id)
 36          self.repo = self.g.get_repo("wrecker/PySample")
 37          self.check_suite = self.repo.get_check_suite(self.check_suite_id)
 38          self.check_suite_ref = "fd09d934bcce792176d6b79d6d0387e938b62b7a"
 39          self.commit = self.repo.get_commit("fd09d934bcce792176d6b79d6d0387e938b62b7a")
 40  
 41      def testAttributes(self):
 42          cs = self.check_suite
 43          self.assertEqual(cs.after, "fd09d934bcce792176d6b79d6d0387e938b62b7a")
 44          self.assertEqual(cs.app.slug, "github-actions")
 45          self.assertEqual(cs.before, "9ee0caba8648aa0b8b5fc68ebc37c3c1162aa283")
 46          self.assertEqual(
 47              cs.check_runs_url,
 48              "https://api.github.com/repos/wrecker/PySample/check-suites/1004503837/check-runs",
 49          )
 50          self.assertEqual(cs.conclusion, "success")
 51          self.assertEqual(cs.created_at, datetime(2020, 8, 4, 5, 6, 54, tzinfo=timezone.utc))
 52          self.assertEqual(cs.head_branch, "wrecker-patch-1")
 53          self.assertEqual(cs.head_commit.sha, "fd09d934bcce792176d6b79d6d0387e938b62b7a")
 54          self.assertEqual(cs.head_sha, "fd09d934bcce792176d6b79d6d0387e938b62b7a")
 55          self.assertEqual(cs.id, self.check_suite_id)
 56          self.assertEqual(cs.latest_check_runs_count, 2)
 57          self.assertEqual(cs.id, self.check_suite_id)
 58          self.assertEqual(len(cs.pull_requests), 1)
 59          self.assertEqual(cs.pull_requests[0].id, 462527907)
 60          self.assertEqual(cs.repository.url, "https://api.github.com/repos/wrecker/PySample")
 61          self.assertEqual(cs.status, "completed")
 62          self.assertEqual(cs.updated_at, datetime(2020, 8, 4, 5, 7, 40, tzinfo=timezone.utc))
 63          self.assertEqual(
 64              cs.url,
 65              "https://api.github.com/repos/wrecker/PySample/check-suites/1004503837",
 66          )
 67  
 68      def testGetCheckSuitesForRef(self):
 69          check_suites = self.commit.get_check_suites()
 70          self.assertEqual(check_suites.totalCount, 6)
 71          self.assertListEqual(
 72              [cs.id for cs in check_suites],
 73              [1004503392, 1004503393, 1004503395, 1004503397, 1004503837, 1004503857],
 74          )
 75  
 76      def testGetCheckSuitesForRefFilterByAppId(self):
 77          check_suites = self.commit.get_check_suites(app_id=29110)
 78          self.assertEqual(check_suites.totalCount, 1)
 79          self.assertListEqual([cs.id for cs in check_suites], [1004503392])
 80  
 81      def testGetCheckSuitesForRefFilterByCheckName(self):
 82          check_suites = self.commit.get_check_suites(check_name="Alex")
 83          self.assertEqual(check_suites.totalCount, 1)
 84          self.assertListEqual([cs.id for cs in check_suites], [1004503395])
 85  
 86      def testCheckSuiteRerequest(self):
 87          cs = self.repo.get_check_suite(1004503395)
 88          status = cs.rerequest()
 89          self.assertTrue(status)
 90  
 91      def testGetCheckRuns(self):
 92          check_runs = self.test_check_suite.get_check_runs()
 93          self.assertEqual(check_runs.totalCount, 8)
 94          self.assertListEqual(
 95              [cr.id for cr in check_runs],
 96              [
 97                  1278952206,
 98                  1279259090,
 99                  1280450752,
100                  1280914700,
101                  1296027873,
102                  1296028076,
103                  1296029378,
104                  1296029552,
105              ],
106          )
107  
108      def testGetCheckRunsFilterByCheckName(self):
109          check_runs = self.test_check_suite.get_check_runs(check_name="Testing")
110          self.assertEqual(check_runs.totalCount, 1)
111          self.assertEqual([cr.id for cr in check_runs], [1278952206])
112  
113      def testGetCheckRunsFilterByStatus(self):
114          check_runs = self.test_check_suite.get_check_runs(status="completed")
115          self.assertEqual(check_runs.totalCount, 8)
116          self.assertListEqual(
117              [cr.id for cr in check_runs],
118              [
119                  1278952206,
120                  1279259090,
121                  1280450752,
122                  1280914700,
123                  1296027873,
124                  1296028076,
125                  1296029378,
126                  1296029552,
127              ],
128          )
129  
130      def testGetCheckRunsFilterByFilter(self):
131          check_runs = self.test_check_suite.get_check_runs(filter="all")
132          self.assertEqual(check_runs.totalCount, 8)
133          self.assertListEqual(
134              [cr.id for cr in check_runs],
135              [
136                  1278952206,
137                  1279259090,
138                  1280450752,
139                  1280914700,
140                  1296027873,
141                  1296028076,
142                  1296029378,
143                  1296029552,
144              ],
145          )
146  
147      def testCreateCheckSuite(self):
148          sha = "e5868bd5a9ccdd65c9c979250e11105f4c88faf4"
149          check_suite = self.test_repo.create_check_suite(head_sha=sha)
150          self.assertEqual(check_suite.head_sha, sha)
151          self.assertEqual(check_suite.status, "queued")
152          self.assertIsNone(check_suite.conclusion)
153  
154      def testUpdateCheckSuitesPreferences(self):
155          data = [{"app_id": 85429, "setting": False}]
156          repo_preferences = self.test_repo.update_check_suites_preferences(data)
157          setting = None
158          for app in repo_preferences.preferences["auto_trigger_checks"]:
159              if app["app_id"] == data[0]["app_id"]:
160                  setting = app["setting"]
161          self.assertFalse(setting)
162          self.assertEqual(repo_preferences.repository.full_name, "dhruvmanila/pygithub-testing")
163          data = [{"app_id": 85429, "setting": True}]
164          repo_preferences = self.test_repo.update_check_suites_preferences(data)
165          for app in repo_preferences.preferences["auto_trigger_checks"]:
166              if app["app_id"] == data[0]["app_id"]:
167                  setting = app["setting"]
168          self.assertTrue(setting)