mirror of
https://github.com/rjNemo/pass-gen
synced 2026-06-12 13: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 pydantic import BaseModel
|
||||||
|
|
||||||
from app.repositories.sqlite import PasswordRepository
|
from app.repositories.type import Repository
|
||||||
|
|
||||||
|
|
||||||
class PassGenOptions(BaseModel):
|
class PassGenOptions(BaseModel):
|
||||||
|
|
@ -14,7 +14,7 @@ class PassGenOptions(BaseModel):
|
||||||
numbers: bool = True
|
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)
|
characters = _build_characters(symbols=options.symbols, numbers=options.numbers)
|
||||||
random_generator = _new_random_generator(options.seed)
|
random_generator = _new_random_generator(options.seed)
|
||||||
password = "".join(random_generator.sample(characters, options.length))
|
password = "".join(random_generator.sample(characters, options.length))
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,10 @@
|
||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
|
from app.repositories.fake import FakeRepository
|
||||||
from app.usecases.pass_gen import PassGenOptions, generate_password
|
from app.usecases.pass_gen import PassGenOptions, generate_password
|
||||||
|
|
||||||
|
fake_repo = FakeRepository.get_instance()
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.parametrize(
|
@pytest.mark.parametrize(
|
||||||
("seed", "expected"),
|
("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:
|
def test_can_generate_random_password(seed: int, expected: str) -> None:
|
||||||
options = PassGenOptions(seed=seed)
|
options = PassGenOptions(seed=seed)
|
||||||
assert generate_password(options) == expected
|
assert generate_password(fake_repo, options) == expected
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.parametrize(
|
@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:
|
def test_control_password_length(seed: int, length: int, expected: str) -> None:
|
||||||
options = PassGenOptions(seed=seed, length=length)
|
options = PassGenOptions(seed=seed, length=length)
|
||||||
assert generate_password(options) == expected
|
assert generate_password(fake_repo, options) == expected
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.parametrize(
|
@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:
|
def test_password_can_contain_symbols(seed: int, symbols: bool, expected: str) -> None:
|
||||||
options = PassGenOptions(seed=seed, symbols=symbols)
|
options = PassGenOptions(seed=seed, symbols=symbols)
|
||||||
assert generate_password(options) == expected
|
assert generate_password(fake_repo, options) == expected
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.parametrize(
|
@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:
|
def test_password_can_contain_numbers(seed: int, numbers: bool, expected: str) -> None:
|
||||||
options = PassGenOptions(seed=seed, numbers=numbers)
|
options = PassGenOptions(seed=seed, numbers=numbers)
|
||||||
assert generate_password(options) == expected
|
assert generate_password(fake_repo, options) == expected
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue