"""Tests for the ``pip hash`` command"""
from pathlib import Path

from tests.lib import PipTestEnvironment


def test_basic_hash(script: PipTestEnvironment, tmpdir: Path) -> None:
    """Run 'pip hash' through its default behavior."""
    expected = (
        "--hash=sha256:2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425"
        "e73043362938b9824"
    )
    result = script.pip("hash", _hello_file(tmpdir))
    assert expected in str(result)


def test_good_algo_option(script: PipTestEnvironment, tmpdir: Path) -> None:
    """Make sure the -a option works."""
    expected = (
        "--hash=sha512:9b71d224bd62f3785d96d46ad3ea3d73319bfbc2890caad"
        "ae2dff72519673ca72323c3d99ba5c11d7c7acc6e14b8c5da0c4663475c2e"
        "5c3adef46f73bcdec043"
    )
    result = script.pip("hash", "-a", "sha512", _hello_file(tmpdir))
    assert expected in str(result)


def test_bad_algo_option(script: PipTestEnvironment, tmpdir: Path) -> None:
    """Make sure the -a option raises an error when given a bad operand."""
    result = script.pip(
        "hash", "-a", "invalidname", _hello_file(tmpdir), expect_error=True
    )
    assert "invalid choice: 'invalidname'" in str(result)


def _hello_file(tmpdir: Path) -> Path:
    """Return a temp file to hash containing "hello"."""
    file = tmpdir / "hashable"
    file.write_text("hello")
    return file
