diff --git a/app/repositories/fake.py b/app/repositories/fake.py new file mode 100644 index 0000000..d486049 --- /dev/null +++ b/app/repositories/fake.py @@ -0,0 +1,10 @@ +from __future__ import annotations + + +class FakeRepository: + def save(self, password: str) -> None: + ... + + @classmethod + def get_instance(cls) -> FakeRepository: + return FakeRepository() diff --git a/app/repositories/type.py b/app/repositories/type.py new file mode 100644 index 0000000..e0d74b6 --- /dev/null +++ b/app/repositories/type.py @@ -0,0 +1,6 @@ +from typing import Protocol + + +class Repository(Protocol): + def save(self, password: str) -> None: + ... diff --git a/app/usecases/pass_gen.py b/app/usecases/pass_gen.py index a1b2797..8b5b02d 100644 --- a/app/usecases/pass_gen.py +++ b/app/usecases/pass_gen.py @@ -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)) diff --git a/tests/pass_gen_test.py b/tests/pass_gen_test.py index b2358b8..140d29e 100644 --- a/tests/pass_gen_test.py +++ b/tests/pass_gen_test.py @@ -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