From 865a17674489d1d53926f119c18e1b1e1c651a37 Mon Sep 17 00:00:00 2001 From: Akash Mahanty Date: Tue, 8 Feb 2022 16:57:44 +0530 Subject: [PATCH] added test for the CLI module --- tests/test_cli.py | 170 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 170 insertions(+) create mode 100644 tests/test_cli.py diff --git a/tests/test_cli.py b/tests/test_cli.py new file mode 100644 index 0000000..c8e5087 --- /dev/null +++ b/tests/test_cli.py @@ -0,0 +1,170 @@ +import requests +from click.testing import CliRunner + +from waybackpy.cli import __version__, main + + +def test_oldest(): + runner = CliRunner() + result = runner.invoke(main, ["--url", " https://github.com ", "--oldest"]) + assert result.exit_code == 0 + assert ( + result.output + == "Archive URL:\nhttps://web.archive.org/web/2008051421\ +0148/http://github.com/\n" + ) + + +def test_near(): + runner = CliRunner() + url = "https://github.com" + result = runner.invoke( + main, + [ + "--url", + " https://facebook.com ", + "--near", + "--year", + 2010, + "--month", + 5, + "--day", + 10, + "--hour", + 6, + ], + ) + assert result.exit_code == 0 + assert ( + result.output + == "Archive URL:\nhttps://web.archive.org/web/2010051008\ +2647/http://www.facebook.com/\n" + ) + + +def test_json(): + runner = CliRunner() + url = "https://github.com" + result = runner.invoke( + main, + [ + "--url", + " https://apple.com ", + "--near", + "--year", + 2010, + "--month", + 2, + "--day", + 8, + "--hour", + 12, + "--json", + ], + ) + assert result.exit_code == 0 + assert ( + result.output.find( + """Archive URL:\nhttps://web.archive.org/web/2010020812\ +5854/http://www.apple.com/\nJSON respons\ +e:\n{"url": "https://apple.com", "archived_snapshots": {"close\ +st": {"status": "200", "available": true, "url": "http://web.ar\ +chive.org/web/20100208125854/http://www.apple.com/", "timest\ +amp": "20100208125854"}}, "timestamp":""" + ) + != -1 + ) + + +def test_newest(): + runner = CliRunner() + result = runner.invoke(main, ["--url", " https://microsoft.com ", "--newest"]) + assert result.exit_code == 0 + assert ( + result.output.find("microsoft.com") != -1 + and result.output.find("Archive URL:\n") != -1 + ) + + +def test_cdx(): + runner = CliRunner() + result = runner.invoke( + main, + "--url https://twitter.com/jack --cdx --user-agent some-user-agent \ +--start-timestamp 2010 --end-timestamp 2012 --collapse urlkey \ +--match-type prefix --cdx-print archiveurl --cdx-print length \ +--cdx-print digest --cdx-print statuscode --cdx-print mimetype \ +--cdx-print original --cdx-print timestamp --cdx-print urlkey".split( + " " + ), + ) + assert result.exit_code == 0 + assert result.output.count("\n") > 3000 + + +def test_save(): + runner = CliRunner() + result = runner.invoke( + main, + "--url https://news.ycombinator.com --user_agent my-unique-user-agent \ +--save --headers".split( + " " + ), + ) + assert result.exit_code == 0 + assert result.output.find("Archive URL:") != -1 + assert (result.output.find("Cached save:\nTrue") != -1) or ( + result.output.find("Cached save:\nFalse") != -1 + ) + assert result.output.find("Save API headers:\n") != -1 + assert result.output.find("://news.ycombinator.com") != -1 + + +def test_version(): + runner = CliRunner() + result = runner.invoke(main, ["--version"]) + assert result.exit_code == 0 + assert result.output == f"waybackpy version {__version__}\n" + + +def test_license(): + runner = CliRunner() + result = runner.invoke(main, ["--license"]) + assert result.exit_code == 0 + assert ( + result.output + == requests.get( + url="https://raw.githubusercontent.com/akamhy/waybackpy/master/LICENSE" + ).text + + "\n" + ) + + +def test_only_url(): + runner = CliRunner() + result = runner.invoke(main, ["--url", "https://google.com"]) + assert result.exit_code == 0 + assert ( + result.output + == "Only URL passed, but did not specify what to do with the URL. Use \ +--help flag for help using waybackpy.\n" + ) + + +def test_known_url(): + # with file generator enabled + runner = CliRunner() + result = runner.invoke( + main, ["--url", "https://akamhy.github.io", "--known-urls", "--file"] + ) + assert result.exit_code == 0 + assert result.output.count("\n") > 40 + assert result.output.count("akamhy.github.io") > 40 + assert result.output.find("in the current working directory.\n") != -1 + + # without file + runner = CliRunner() + result = runner.invoke(main, ["--url", "https://akamhy.github.io", "--known-urls"]) + assert result.exit_code == 0 + assert result.output.count("\n") > 40 + assert result.output.count("akamhy.github.io") > 40