From bdc566773e27f0fc4b9268526643a2aaadad06ff Mon Sep 17 00:00:00 2001 From: Cody Logan Date: Wed, 1 Nov 2023 13:23:06 -0700 Subject: Add tests for main program entry point --- tests/test_wikiget.py | 68 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 tests/test_wikiget.py (limited to 'tests/test_wikiget.py') diff --git a/tests/test_wikiget.py b/tests/test_wikiget.py new file mode 100644 index 0000000..e254b8b --- /dev/null +++ b/tests/test_wikiget.py @@ -0,0 +1,68 @@ +# wikiget - CLI tool for downloading files from Wikimedia sites +# Copyright (C) 2023 Cody Logan +# SPDX-License-Identifier: GPL-3.0-or-later +# +# Wikiget is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# Wikiget is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with Wikiget. If not, see . + +from unittest.mock import MagicMock, patch + +import pytest + +from wikiget import USER_AGENT +from wikiget.wikiget import main + + +def test_main_no_params(monkeypatch: pytest.MonkeyPatch): + monkeypatch.setattr("sys.argv", ["wikiget"]) + with pytest.raises(SystemExit) as e: + main() + assert e.value.code == 2 + + +@patch("wikiget.wikiget.process_download") +def test_main_success( + mock_process_download: MagicMock, monkeypatch: pytest.MonkeyPatch +) -> None: + monkeypatch.setattr("sys.argv", ["wikiget", "File:Example.jpg"]) + mock_process_download.return_value = 0 + with pytest.raises(SystemExit) as e: + main() + assert mock_process_download.called + assert e.value.code == 0 + + +@patch("wikiget.wikiget.process_download") +def test_main_failure( + mock_process_download: MagicMock, monkeypatch: pytest.MonkeyPatch +) -> None: + monkeypatch.setattr("sys.argv", ["wikiget", "File:Example.jpg"]) + mock_process_download.return_value = 1 + with pytest.raises(SystemExit) as e: + main() + assert mock_process_download.called + assert e.value.code == 1 + + +@patch("wikiget.wikiget.process_download") +def test_main_logs( + mock_process_download: MagicMock, + monkeypatch: pytest.MonkeyPatch, + caplog: pytest.LogCaptureFixture, +) -> None: + monkeypatch.setattr("sys.argv", ["wikiget", "File:Example.jpg"]) + mock_process_download.return_value = 0 + with pytest.raises(SystemExit): + main() + assert mock_process_download.called + assert USER_AGENT in caplog.text -- cgit v1.2.3