test: fix

This commit is contained in:
Ruidy 2021-08-03 10:28:55 +02:00
parent 97a21ae09e
commit bcf359950d
4 changed files with 26 additions and 6 deletions

10
app/repositories/fake.py Normal file
View file

@ -0,0 +1,10 @@
from __future__ import annotations
class FakeRepository:
def save(self, password: str) -> None:
...
@classmethod
def get_instance(cls) -> FakeRepository:
return FakeRepository()

6
app/repositories/type.py Normal file
View file

@ -0,0 +1,6 @@
from typing import Protocol
class Repository(Protocol):
def save(self, password: str) -> None:
...

View file

@ -4,7 +4,7 @@ from typing import Protocol
from pydantic import BaseModel
from app.repositories.sqlite import PasswordRepository
from app.repositories.type import Repository
class PassGenOptions(BaseModel):
@ -14,7 +14,7 @@ class PassGenOptions(BaseModel):
numbers: bool = True
def generate_password(repo: PasswordRepository, options: PassGenOptions) -> str:
def generate_password(repo: Repository, options: PassGenOptions) -> str:
characters = _build_characters(symbols=options.symbols, numbers=options.numbers)
random_generator = _new_random_generator(options.seed)
password = "".join(random_generator.sample(characters, options.length))

View file

@ -1,6 +1,10 @@
import pytest
from app.repositories.fake import FakeRepository
from app.usecases.pass_gen import PassGenOptions, generate_password
fake_repo = FakeRepository.get_instance()
@pytest.mark.parametrize(
("seed", "expected"),
@ -11,7 +15,7 @@ from app.usecases.pass_gen import PassGenOptions, generate_password
)
def test_can_generate_random_password(seed: int, expected: str) -> None:
options = PassGenOptions(seed=seed)
assert generate_password(options) == expected
assert generate_password(fake_repo, options) == expected
@pytest.mark.parametrize(
@ -23,7 +27,7 @@ def test_can_generate_random_password(seed: int, expected: str) -> None:
)
def test_control_password_length(seed: int, length: int, expected: str) -> None:
options = PassGenOptions(seed=seed, length=length)
assert generate_password(options) == expected
assert generate_password(fake_repo, options) == expected
@pytest.mark.parametrize(
@ -35,7 +39,7 @@ def test_control_password_length(seed: int, length: int, expected: str) -> None:
)
def test_password_can_contain_symbols(seed: int, symbols: bool, expected: str) -> None:
options = PassGenOptions(seed=seed, symbols=symbols)
assert generate_password(options) == expected
assert generate_password(fake_repo, options) == expected
@pytest.mark.parametrize(
@ -47,4 +51,4 @@ def test_password_can_contain_symbols(seed: int, symbols: bool, expected: str) -
)
def test_password_can_contain_numbers(seed: int, numbers: bool, expected: str) -> None:
options = PassGenOptions(seed=seed, numbers=numbers)
assert generate_password(options) == expected
assert generate_password(fake_repo, options) == expected