4b218d35cb
* implement oldest newest and near methods in the cdx interface class, now cli uses the cdx methods instead of availablity api methods. * handle the closest parameter derivative methods more efficiently and also handle exceptions gracefully. * update test code
137 lines
3.8 KiB
Python
137 lines
3.8 KiB
Python
import requests
|
|
from click.testing import CliRunner
|
|
|
|
from waybackpy import __version__
|
|
from waybackpy.cli import main
|
|
|
|
|
|
def test_oldest() -> None:
|
|
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() -> None:
|
|
runner = CliRunner()
|
|
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_newest() -> None:
|
|
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() -> None:
|
|
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() -> None:
|
|
runner = CliRunner()
|
|
result = runner.invoke(
|
|
main,
|
|
"--url https://yahoo.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("yahoo.com") != -1
|
|
|
|
|
|
def test_version() -> None:
|
|
runner = CliRunner()
|
|
result = runner.invoke(main, ["--version"])
|
|
assert result.exit_code == 0
|
|
assert result.output == f"waybackpy version {__version__}\n"
|
|
|
|
|
|
def test_license() -> None:
|
|
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() -> None:
|
|
runner = CliRunner()
|
|
result = runner.invoke(main, ["--url", "https://google.com"])
|
|
assert result.exit_code == 0
|
|
assert (
|
|
result.output
|
|
== "NoCommandFound: 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() -> None:
|
|
# 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
|