|
1 | 1 | import distutils.dir_util |
2 | 2 | import filecmp |
3 | 3 | import json |
| 4 | +import os |
4 | 5 | import pathlib |
5 | 6 | import tempfile |
6 | 7 | import unittest.mock |
|
18 | 19 |
|
19 | 20 |
|
20 | 21 | def get_reportsizedeltas_object(repository_name="FooOwner/BarRepository", |
21 | | - artifact_name="foo-artifact-name", |
| 22 | + sketches_reports_source_name="foo-artifact-name", |
22 | 23 | token="foo token"): |
23 | 24 | """Return a reportsizedeltas.ReportSizeDeltas object to use in tests. |
24 | 25 |
|
25 | 26 | Keyword arguments: |
26 | 27 | repository_name -- repository owner and name e.g., octocat/Hello-World |
27 | | - artifact_name -- name of the workflow artifact that contains the memory usage data |
| 28 | + sketches_reports_source_name -- name of the workflow artifact that contains the memory usage data |
28 | 29 | token -- GitHub access token |
29 | 30 | """ |
30 | | - return reportsizedeltas.ReportSizeDeltas(repository_name=repository_name, artifact_name=artifact_name, token=token) |
| 31 | + return reportsizedeltas.ReportSizeDeltas(repository_name=repository_name, |
| 32 | + sketches_reports_source_name=sketches_reports_source_name, token=token) |
31 | 33 |
|
32 | 34 |
|
33 | 35 | def directories_are_same(left_directory, right_directory): |
@@ -89,33 +91,85 @@ def test_directories_are_same(tmp_path): |
89 | 91 | assert directories_are_same(left_directory=left_directory, right_directory=right_directory) is True |
90 | 92 |
|
91 | 93 |
|
92 | | -def test_main(monkeypatch, mocker): |
93 | | - repository_name = "FooOwner/BarRepository" |
94 | | - artifact_name = "foo-artifact-name" |
95 | | - token = "foo GitHub token" |
96 | | - monkeypatch.setenv("GITHUB_REPOSITORY", repository_name) |
97 | | - monkeypatch.setenv("INPUT_SIZE-DELTAS-REPORTS-ARTIFACT-NAME", artifact_name) |
98 | | - monkeypatch.setenv("INPUT_GITHUB-TOKEN", token) |
| 94 | +@pytest.fixture |
| 95 | +def setup_environment_variables(monkeypatch): |
| 96 | + """Test fixture that sets up the environment variables required by reportsizedeltas.main() and returns an object |
| 97 | + containing the values""" |
99 | 98 |
|
| 99 | + class ActionInputs: |
| 100 | + """A container for the values of the environment variables""" |
| 101 | + repository_name = "GoldenOwner/GoldenRepository" |
| 102 | + sketches_reports_source_name = "golden-artifact-name" |
| 103 | + token = "golden-github-token" |
| 104 | + |
| 105 | + monkeypatch.setenv("GITHUB_REPOSITORY", ActionInputs.repository_name) |
| 106 | + monkeypatch.setenv("INPUT_SKETCHES-REPORTS-SOURCE-NAME", ActionInputs.sketches_reports_source_name) |
| 107 | + monkeypatch.setenv("INPUT_GITHUB-TOKEN", ActionInputs.token) |
| 108 | + |
| 109 | + return ActionInputs() |
| 110 | + |
| 111 | + |
| 112 | +def test_main(monkeypatch, mocker, setup_environment_variables): |
100 | 113 | class ReportSizeDeltas: |
101 | 114 | """Stub""" |
102 | 115 |
|
103 | 116 | def report_size_deltas(self): |
104 | 117 | """Stub""" |
105 | | - pass # pragma: no cover |
| 118 | + pass # pragma: no cover |
106 | 119 |
|
107 | 120 | mocker.patch("reportsizedeltas.set_verbosity", autospec=True) |
108 | 121 | mocker.patch("reportsizedeltas.ReportSizeDeltas", autospec=True, return_value=ReportSizeDeltas()) |
109 | 122 | mocker.patch.object(ReportSizeDeltas, "report_size_deltas") |
110 | 123 | reportsizedeltas.main() |
111 | 124 |
|
112 | 125 | reportsizedeltas.set_verbosity.assert_called_once_with(enable_verbosity=False) |
113 | | - reportsizedeltas.ReportSizeDeltas.assert_called_once_with(repository_name=repository_name, |
114 | | - artifact_name=artifact_name, |
115 | | - token=token) |
| 126 | + reportsizedeltas.ReportSizeDeltas.assert_called_once_with( |
| 127 | + repository_name=setup_environment_variables.repository_name, |
| 128 | + sketches_reports_source_name=setup_environment_variables.sketches_reports_source_name, |
| 129 | + token=setup_environment_variables.token |
| 130 | + ) |
116 | 131 | ReportSizeDeltas.report_size_deltas.assert_called_once() |
117 | 132 |
|
118 | 133 |
|
| 134 | +@pytest.mark.parametrize("use_size_deltas_report_artifact_name", [True, False]) |
| 135 | +def test_main_size_deltas_report_artifact_name_deprecation_warning(capsys, |
| 136 | + mocker, |
| 137 | + monkeypatch, setup_environment_variables, |
| 138 | + use_size_deltas_report_artifact_name): |
| 139 | + size_deltas_report_artifact_name = "golden-size-deltas-report-artifact-name-value" |
| 140 | + |
| 141 | + if use_size_deltas_report_artifact_name: |
| 142 | + monkeypatch.setenv("INPUT_SIZE-DELTAS-REPORTS-ARTIFACT-NAME", size_deltas_report_artifact_name) |
| 143 | + expected_sketches_reports_source_name = size_deltas_report_artifact_name |
| 144 | + else: |
| 145 | + expected_sketches_reports_source_name = setup_environment_variables.sketches_reports_source_name |
| 146 | + |
| 147 | + class ReportSizeDeltas: |
| 148 | + """Stub""" |
| 149 | + |
| 150 | + def report_size_deltas(self): |
| 151 | + """Stub""" |
| 152 | + pass # pragma: no cover |
| 153 | + |
| 154 | + mocker.patch("reportsizedeltas.set_verbosity", autospec=True) |
| 155 | + mocker.patch("reportsizedeltas.ReportSizeDeltas", autospec=True, return_value=ReportSizeDeltas()) |
| 156 | + mocker.patch.object(ReportSizeDeltas, "report_size_deltas") |
| 157 | + |
| 158 | + reportsizedeltas.main() |
| 159 | + |
| 160 | + expected_output = "" |
| 161 | + if use_size_deltas_report_artifact_name: |
| 162 | + expected_output = ( |
| 163 | + expected_output |
| 164 | + + "::warning::The size-deltas-report-artifact-name input is deprecated. Use the equivalent input: " |
| 165 | + "sketches-reports-source-name instead." |
| 166 | + ) |
| 167 | + |
| 168 | + assert capsys.readouterr().out.strip() == expected_output |
| 169 | + |
| 170 | + assert os.environ["INPUT_SKETCHES-REPORTS-SOURCE-NAME"] == expected_sketches_reports_source_name |
| 171 | + |
| 172 | + |
119 | 173 | def test_set_verbosity(): |
120 | 174 | with pytest.raises(TypeError): |
121 | 175 | reportsizedeltas.set_verbosity(enable_verbosity=2) |
@@ -303,14 +357,14 @@ def test_get_artifact_download_url_for_sha(): |
303 | 357 |
|
304 | 358 | def test_get_artifact_download_url_for_run(): |
305 | 359 | repository_name = "test_name/test_repo" |
306 | | - artifact_name = "test_artifact_name" |
| 360 | + sketches_reports_source_name = "test_sketches_reports_source_name" |
307 | 361 | archive_download_url = "archive_download_url" |
308 | 362 | run_id = "1234" |
309 | 363 |
|
310 | 364 | report_size_deltas = get_reportsizedeltas_object(repository_name=repository_name, |
311 | | - artifact_name=artifact_name) |
| 365 | + sketches_reports_source_name=sketches_reports_source_name) |
312 | 366 |
|
313 | | - json_data = {"artifacts": [{"name": artifact_name, "archive_download_url": archive_download_url}, |
| 367 | + json_data = {"artifacts": [{"name": sketches_reports_source_name, "archive_download_url": archive_download_url}, |
314 | 368 | {"name": "bar123", "archive_download_url": "wrong_artifact_url"}]} |
315 | 369 | report_size_deltas.api_request = unittest.mock.MagicMock(return_value={"json_data": json_data, |
316 | 370 | "additional_pages": False, |
@@ -621,7 +675,7 @@ def test_get_sketches_reports(sketches_reports_path, expected_sketches_reports): |
621 | 675 | try: |
622 | 676 | distutils.dir_util.copy_tree(src=str(sketches_reports_path), |
623 | 677 | dst=artifact_folder_object.name) |
624 | | - except Exception: # pragma: no cover |
| 678 | + except Exception: # pragma: no cover |
625 | 679 | artifact_folder_object.cleanup() |
626 | 680 | raise |
627 | 681 | sketches_reports = report_size_deltas.get_sketches_reports(artifact_folder_object=artifact_folder_object) |
@@ -662,7 +716,7 @@ def test_generate_report(): |
662 | 716 | try: |
663 | 717 | distutils.dir_util.copy_tree(src=str(sketches_report_path), |
664 | 718 | dst=artifact_folder_object.name) |
665 | | - except Exception: # pragma: no cover |
| 719 | + except Exception: # pragma: no cover |
666 | 720 | artifact_folder_object.cleanup() |
667 | 721 | raise |
668 | 722 | sketches_reports = report_size_deltas.get_sketches_reports(artifact_folder_object=artifact_folder_object) |
|
0 commit comments