|
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