|
2 | 2 | # SPDX-License-Identifier: MIT |
3 | 3 | """Tests GiteaTrigger class.""" |
4 | 4 |
|
| 5 | +import logging |
5 | 6 | from argparse import Namespace |
6 | 7 | from typing import cast |
7 | 8 | from unittest.mock import MagicMock |
@@ -114,18 +115,21 @@ def test_get_prs_by_label_filtering(trigger: GiteaTrigger, mocker: MockerFixture |
114 | 115 | "labels": [{"name": "needs-testing"}, {"name": "qalabel1"}], |
115 | 116 | "base": {"repo": {"name": "r"}, "label": "l"}, |
116 | 117 | "html_url": "u", |
| 118 | + "head": {"sha": "xyz"}, |
117 | 119 | }, |
118 | 120 | { |
119 | 121 | "number": 2, |
120 | 122 | "labels": [{"name": "wrong-label"}, {"name": "qalabel1"}], |
121 | 123 | "base": {"repo": {"name": "r"}, "label": "l"}, |
122 | 124 | "html_url": "u", |
| 125 | + "head": {"sha": "xyz"}, |
123 | 126 | }, |
124 | 127 | { |
125 | 128 | "number": 3, |
126 | 129 | "labels": [{"name": "needs-testing"}], |
127 | 130 | "base": {"repo": {"name": "r"}, "label": "l"}, |
128 | 131 | "html_url": "u", |
| 132 | + "head": {"sha": "xyz"}, |
129 | 133 | }, |
130 | 134 | ], |
131 | 135 | ) |
@@ -203,6 +207,7 @@ def test_get_prs_by_label_specific_number(mock_args: Namespace, mocker: MockerFi |
203 | 207 | "labels": [{"name": "needs-testing"}, {"name": "qalabel1"}], |
204 | 208 | "base": {"repo": {"name": "r"}, "label": "l"}, |
205 | 209 | "html_url": "u", |
| 210 | + "head": {"sha": "xyz"}, |
206 | 211 | } |
207 | 212 | ], |
208 | 213 | ) |
@@ -237,17 +242,37 @@ def test_check_pullrequest_comments_when_no_trigger_needed(trigger: GiteaTrigger |
237 | 242 | mock_comment_on_pr.assert_called_once() |
238 | 243 |
|
239 | 244 |
|
240 | | -def test_comment_on_pr_build_injection(trigger: GiteaTrigger) -> None: |
| 245 | +def test_comment_on_pr_build_injection(trigger: GiteaTrigger, mocker: MockerFixture) -> None: |
241 | 246 | """Tests that the build string is injected into raw openQA jobs.""" |
| 247 | + mock_approve_pr = mocker.patch("openqabot.giteatrigger.approve_pr") |
242 | 248 | mock_jobs = [{"id": 1, "state": "done", "result": "passed"}] |
243 | 249 | cast("MagicMock", trigger.openqa.get_jobs).return_value = mock_jobs |
244 | 250 | cast("MagicMock", trigger.commenter.generate_comment).return_value = ("Summary", "passed") |
245 | 251 |
|
246 | | - mock_pr = MagicMock(number=123, url="http://fake.url/123") |
| 252 | + mock_pr = MagicMock(number=123, url="http://fake.url/123", commit_sha="sha123", repo_name="fake_repo") |
247 | 253 | trigger.comment_on_pr(mock_pr, "product", "version", "arch", "PR-BUILD") |
248 | 254 |
|
249 | 255 | assert mock_jobs[0]["build"] == "PR-BUILD" |
250 | 256 | cast("MagicMock", trigger.commenter.generate_comment).assert_called_once_with(mock_pr, mock_jobs) |
| 257 | + mock_approve_pr.assert_called_once_with(trigger.gitea_token, "fake_repo", 123, "sha123", mocker.ANY) |
| 258 | + |
| 259 | + |
| 260 | +def test_comment_on_pr_dry_run_approves( |
| 261 | + trigger: GiteaTrigger, mocker: MockerFixture, caplog: pytest.LogCaptureFixture |
| 262 | +) -> None: |
| 263 | + """Tests that approve_pr is not called during a dry run.""" |
| 264 | + caplog.set_level(logging.INFO) |
| 265 | + trigger.dry = True |
| 266 | + mock_approve_pr = mocker.patch("openqabot.giteatrigger.approve_pr") |
| 267 | + mock_jobs = [{"id": 1, "state": "done", "result": "passed"}] |
| 268 | + cast("MagicMock", trigger.openqa.get_jobs).return_value = mock_jobs |
| 269 | + cast("MagicMock", trigger.commenter.generate_comment).return_value = ("Summary", "passed") |
| 270 | + |
| 271 | + mock_pr = MagicMock(number=123, url="http://fake.url/123", commit_sha="sha123", repo_name="fake_repo") |
| 272 | + trigger.comment_on_pr(mock_pr, "product", "version", "arch", "PR-BUILD") |
| 273 | + |
| 274 | + mock_approve_pr.assert_not_called() |
| 275 | + assert "Dry run: Would approve PR 123" in caplog.text |
251 | 276 |
|
252 | 277 |
|
253 | 278 | def test_comment_on_pr_no_jobs(trigger: GiteaTrigger) -> None: |
|
0 commit comments