mirror of
https://github.com/rjNemo/pass-gen
synced 2026-06-06 02:26:42 +00:00
test: fix
This commit is contained in:
parent
97a21ae09e
commit
bcf359950d
4 changed files with 26 additions and 6 deletions
10
app/repositories/fake.py
Normal file
10
app/repositories/fake.py
Normal 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
6
app/repositories/type.py
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
from typing import Protocol
|
||||
|
||||
|
||||
class Repository(Protocol):
|
||||
def save(self, password: str) -> None:
|
||||
...
|
||||
|
|
@ -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))
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Reference in a new issue