|
10 | 10 | import unittest |
11 | 11 | from pathlib import Path |
12 | 12 |
|
| 13 | +import pytest |
| 14 | + |
13 | 15 | from taskgraph import decision |
14 | 16 | from taskgraph.util.vcs import GitRepository, HgRepository |
15 | 17 | from taskgraph.util.yaml import load_yaml |
@@ -137,3 +139,60 @@ def test_dontbuild_commit_message_yields_default_target_tasks_method( |
137 | 139 | self.options["tasks_for"] = "hg-push" |
138 | 140 | params = decision.get_decision_parameters(FAKE_GRAPH_CONFIG, self.options) |
139 | 141 | self.assertEqual(params["target_tasks_method"], "nothing") |
| 142 | + |
| 143 | + |
| 144 | +_BASE_OPTIONS = { |
| 145 | + "base_repository": "https://hg.mozilla.org/mozilla-unified", |
| 146 | + "base_rev": "aaaa", |
| 147 | + "head_repository": "https://hg.mozilla.org/mozilla-central", |
| 148 | + "head_rev": "bbbb", |
| 149 | + "head_ref": "default", |
| 150 | + "head_tag": "", |
| 151 | + "project": "mozilla-central", |
| 152 | + "pushlog_id": "1", |
| 153 | + "pushdate": 0, |
| 154 | + "repository_type": "git", |
| 155 | + "owner": "nobody@mozilla.com", |
| 156 | + "tasks_for": "github-push", |
| 157 | + "level": "1", |
| 158 | +} |
| 159 | + |
| 160 | + |
| 161 | +@unittest.mock.patch.object( |
| 162 | + GitRepository, |
| 163 | + "get_note", |
| 164 | + return_value=json.dumps({"build_number": 99}), |
| 165 | +) |
| 166 | +@unittest.mock.patch.object(GitRepository, "get_changed_files", return_value=[]) |
| 167 | +def test_decision_parameters_note(mock_files_changed, mock_get_note): |
| 168 | + options = {**_BASE_OPTIONS, "allow_parameter_override": True} |
| 169 | + params = decision.get_decision_parameters(FAKE_GRAPH_CONFIG, options) |
| 170 | + mock_get_note.assert_called_once_with("decision-parameters") |
| 171 | + assert params["build_number"] == 99 |
| 172 | + |
| 173 | + |
| 174 | +@unittest.mock.patch.object( |
| 175 | + GitRepository, |
| 176 | + "get_note", |
| 177 | + return_value=json.dumps({"build_number": 99}), |
| 178 | +) |
| 179 | +@unittest.mock.patch.object(GitRepository, "get_changed_files", return_value=[]) |
| 180 | +def test_decision_parameters_note_disallow_override(mock_files_changed, mock_get_note): |
| 181 | + options = {**_BASE_OPTIONS, "allow_parameter_override": False} |
| 182 | + params = decision.get_decision_parameters(FAKE_GRAPH_CONFIG, options) |
| 183 | + mock_get_note.assert_not_called() |
| 184 | + assert params["build_number"] == 1 |
| 185 | + |
| 186 | + |
| 187 | +@unittest.mock.patch.object( |
| 188 | + GitRepository, |
| 189 | + "get_note", |
| 190 | + return_value="not valid json {", |
| 191 | +) |
| 192 | +@unittest.mock.patch.object(GitRepository, "get_changed_files", return_value=[]) |
| 193 | +def test_decision_parameters_note_invalid_json(mock_files_changed, mock_get_note): |
| 194 | + options = {**_BASE_OPTIONS, "allow_parameter_override": True} |
| 195 | + with pytest.raises( |
| 196 | + Exception, match="Failed to parse refs/notes/decision-parameters as JSON" |
| 197 | + ): |
| 198 | + decision.get_decision_parameters(FAKE_GRAPH_CONFIG, options) |
0 commit comments