39 lines
1.0 KiB
Python
39 lines
1.0 KiB
Python
import pytest
|
|
|
|
from src.application.auth.keys import generate_api_key, hash_secret, parse_api_key, verify_secret
|
|
|
|
pytestmark = pytest.mark.unit
|
|
|
|
|
|
def test_generate_api_key_round_trips_through_parse() -> None:
|
|
key_prefix, secret, full_key = generate_api_key()
|
|
|
|
parsed = parse_api_key(full_key)
|
|
|
|
assert parsed == (key_prefix, secret)
|
|
|
|
|
|
def test_generate_api_key_produces_unique_secrets() -> None:
|
|
_, secret_a, _ = generate_api_key()
|
|
_, secret_b, _ = generate_api_key()
|
|
|
|
assert secret_a != secret_b
|
|
|
|
|
|
@pytest.mark.parametrize(
|
|
"malformed",
|
|
["", "sk_onlyprefix", "wrongscheme_prefix_secret", "sk__secret", "sk_prefix_"],
|
|
)
|
|
def test_parse_api_key_rejects_malformed_input(malformed: str) -> None:
|
|
assert parse_api_key(malformed) is None
|
|
|
|
|
|
def test_verify_secret_accepts_matching_secret() -> None:
|
|
_, secret, _ = generate_api_key()
|
|
|
|
assert verify_secret(secret, hash_secret(secret))
|
|
|
|
|
|
def test_verify_secret_rejects_wrong_secret() -> None:
|
|
assert not verify_secret("wrong-secret", hash_secret("correct-secret"))
|