69 lines
2.0 KiB
Python
69 lines
2.0 KiB
Python
import random
|
|
|
|
import pytest
|
|
from conftest import FakePasswordRepository
|
|
|
|
from password_manager.application.use_cases import (
|
|
FindPasswordEntry,
|
|
GeneratePassword,
|
|
SavePasswordEntry,
|
|
)
|
|
from password_manager.domain.errors import (
|
|
DataFileNotFoundError,
|
|
EmptyFieldError,
|
|
EntryNotFoundError,
|
|
)
|
|
from password_manager.domain.password_entry import PasswordEntry
|
|
|
|
|
|
def test_save_stores_entry(repository: FakePasswordRepository) -> None:
|
|
SavePasswordEntry(repository).execute("example.com", "me@x.org", "pw")
|
|
|
|
assert repository.entries["example.com"] == PasswordEntry(
|
|
"example.com", "me@x.org", "pw"
|
|
)
|
|
|
|
|
|
@pytest.mark.parametrize(
|
|
("website", "email", "password"),
|
|
[("", "e", "p"), ("w", "", "p"), ("w", "e", ""), (" ", "e", "p")],
|
|
)
|
|
def test_save_rejects_empty_field(
|
|
repository: FakePasswordRepository, website: str, email: str, password: str
|
|
) -> None:
|
|
with pytest.raises(EmptyFieldError):
|
|
SavePasswordEntry(repository).execute(website, email, password)
|
|
assert repository.entries == {}
|
|
|
|
|
|
def test_find_returns_entry(repository: FakePasswordRepository) -> None:
|
|
SavePasswordEntry(repository).execute("example.com", "me@x.org", "pw")
|
|
|
|
entry = FindPasswordEntry(repository).execute("example.com")
|
|
|
|
assert entry.email == "me@x.org"
|
|
|
|
|
|
def test_find_raises_when_website_unknown(
|
|
repository: FakePasswordRepository,
|
|
) -> None:
|
|
with pytest.raises(EntryNotFoundError):
|
|
FindPasswordEntry(repository).execute("nope.com")
|
|
|
|
|
|
def test_find_raises_when_no_data_file() -> None:
|
|
with pytest.raises(DataFileNotFoundError):
|
|
FindPasswordEntry(FakePasswordRepository(has_file=False)).execute("a.com")
|
|
|
|
|
|
def test_find_rejects_empty_website(repository: FakePasswordRepository) -> None:
|
|
with pytest.raises(EmptyFieldError):
|
|
FindPasswordEntry(repository).execute("")
|
|
|
|
|
|
def test_generate_uses_given_random_source() -> None:
|
|
first = GeneratePassword(random.Random(1)).execute()
|
|
second = GeneratePassword(random.Random(1)).execute()
|
|
|
|
assert first == second
|