/ tests / WorkflowRun.py
WorkflowRun.py
  1  ############################ Copyrights and license ############################
  2  #                                                                              #
  3  # Copyright 2020 Steve Kowalik <steven@wedontsleep.org>                        #
  4  #                                                                              #
  5  # This file is part of PyGithub.                                               #
  6  # http://pygithub.readthedocs.io/                                              #
  7  #                                                                              #
  8  # PyGithub is free software: you can redistribute it and/or modify it under    #
  9  # the terms of the GNU Lesser General Public License as published by the Free  #
 10  # Software Foundation, either version 3 of the License, or (at your option)    #
 11  # any later version.                                                           #
 12  #                                                                              #
 13  # PyGithub is distributed in the hope that it will be useful, but WITHOUT ANY  #
 14  # WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS    #
 15  # FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more #
 16  # details.                                                                     #
 17  #                                                                              #
 18  # You should have received a copy of the GNU Lesser General Public License     #
 19  # along with PyGithub. If not, see <http://www.gnu.org/licenses/>.             #
 20  #                                                                              #
 21  ################################################################################
 22  
 23  from datetime import datetime, timezone
 24  
 25  from . import Framework
 26  
 27  
 28  class WorkflowRun(Framework.TestCase):
 29      def setUp(self):
 30          super().setUp()
 31          self.repo = self.g.get_repo("PyGithub/PyGithub")
 32          self.workflow_run = self.repo.get_workflow_run(3881497935)
 33  
 34      def testAttributes(self):
 35          self.assertEqual(
 36              repr(self.workflow_run),
 37              'WorkflowRun(url="https://api.github.com/repos/PyGithub/PyGithub/actions/runs/3881497935", id=3881497935)',
 38          )
 39          self.assertEqual(self.workflow_run.id, 3881497935)
 40          self.assertEqual(self.workflow_run.name, "CI")
 41          self.assertEqual(self.workflow_run.head_branch, "feat/workflow-run")
 42          self.assertEqual(self.workflow_run.head_sha, "c6e5cac67a58a4eb11f1f28567a77a6e2cc8ee98")
 43          self.assertEqual(self.workflow_run.path, ".github/workflows/ci.yml")
 44          self.assertEqual(self.workflow_run.display_title, "TEST PR")
 45          self.assertEqual(self.workflow_run.run_number, 930)
 46          self.assertEqual(self.workflow_run.run_attempt, 1)
 47          self.assertEqual(
 48              self.workflow_run.run_started_at,
 49              datetime(2023, 1, 10, 8, 24, 19, tzinfo=timezone.utc),
 50          )
 51          self.assertEqual(self.workflow_run.event, "pull_request")
 52          self.assertEqual(self.workflow_run.status, "completed")
 53          self.assertEqual(self.workflow_run.conclusion, "success")
 54          self.assertEqual(self.workflow_run.workflow_id, 1903133)
 55          self.assertEqual(
 56              self.workflow_run.url,
 57              "https://api.github.com/repos/PyGithub/PyGithub/actions/runs/3881497935",
 58          )
 59          self.assertEqual(
 60              self.workflow_run.html_url,
 61              "https://github.com/PyGithub/PyGithub/actions/runs/3881497935",
 62          )
 63          self.assertEqual(self.workflow_run.pull_requests, [])
 64          created_at = datetime(2023, 1, 10, 8, 24, 19, tzinfo=timezone.utc)
 65          self.assertEqual(self.workflow_run.created_at, created_at)
 66          updated_at = datetime(2023, 1, 10, 8, 28, 20, tzinfo=timezone.utc)
 67          self.assertEqual(self.workflow_run.updated_at, updated_at)
 68          self.assertEqual(
 69              self.workflow_run.jobs_url,
 70              "https://api.github.com/repos/PyGithub/PyGithub/actions/runs/3881497935/jobs",
 71          )
 72          self.assertEqual(
 73              self.workflow_run.logs_url,
 74              "https://api.github.com/repos/PyGithub/PyGithub/actions/runs/3881497935/logs",
 75          )
 76          self.assertEqual(
 77              self.workflow_run.check_suite_url,
 78              "https://api.github.com/repos/PyGithub/PyGithub/check-suites/10279069747",
 79          )
 80          self.assertEqual(
 81              self.workflow_run.artifacts_url,
 82              "https://api.github.com/repos/PyGithub/PyGithub/actions/runs/3881497935/artifacts",
 83          )
 84          self.assertEqual(
 85              self.workflow_run.cancel_url,
 86              "https://api.github.com/repos/PyGithub/PyGithub/actions/runs/3881497935/cancel",
 87          )
 88          self.assertEqual(
 89              self.workflow_run.rerun_url,
 90              "https://api.github.com/repos/PyGithub/PyGithub/actions/runs/3881497935/rerun",
 91          )
 92          self.assertEqual(
 93              self.workflow_run.workflow_url,
 94              "https://api.github.com/repos/PyGithub/PyGithub/actions/workflows/1903133",
 95          )
 96          self.assertEqual(self.workflow_run.head_commit.message, "add attribute 'name' on WorkflowRun")
 97          self.assertEqual(self.workflow_run.repository.name, "PyGithub")
 98          self.assertEqual(self.workflow_run.head_repository.name, "PyGithub")
 99  
100      def test_timing(self):
101          timing = self.workflow_run.timing()
102          self.assertEqual(
103              timing.billable,
104              {
105                  "UBUNTU": {
106                      "job_runs": [
107                          {"duration_ms": 0, "job_id": 10545727758},
108                          {"duration_ms": 0, "job_id": 10545727888},
109                          {"duration_ms": 0, "job_id": 10545728039},
110                          {"duration_ms": 0, "job_id": 10545728190},
111                          {"duration_ms": 0, "job_id": 10545728356},
112                      ],
113                      "jobs": 5,
114                      "total_ms": 0,
115                  }
116              },
117          )
118          self.assertEqual(timing.run_duration_ms, 241000)
119  
120      def test_rerun(self):
121          wr = self.repo.get_workflow_run(3910280793)
122          self.assertFalse(wr.rerun())
123  
124      def test_rerun_with_successful_run(self):
125          wr = self.repo.get_workflow_run(3881497935)
126          self.assertFalse(wr.rerun())
127  
128      def test_cancel(self):
129          wr = self.repo.get_workflow_run(3911660493)
130          self.assertFalse(wr.cancel())
131  
132      def test_delete(self):
133          wr = self.repo.get_workflow_run(3881497935)
134          self.assertFalse(wr.delete())
135  
136      def test_jobs(self):
137          self.assertListKeyEqual(
138              self.workflow_run.jobs(),
139              lambda j: j.id,
140              [10545727758, 10545727888, 10545728039, 10545728190, 10545728356],
141          )