mirror of
https://github.com/rjNemo/pass-gen
synced 2026-06-06 02:26:42 +00:00
feat: add symbols
This commit is contained in:
parent
b3a2b4909b
commit
021a856416
5 changed files with 27 additions and 3 deletions
|
|
@ -4,7 +4,7 @@
|
|||
|
||||
- [x] As a user I want to generate a random secure password to protect my personal accounts
|
||||
- [x] Minimal length
|
||||
- [ ] Include symbols
|
||||
- [x] Include symbols
|
||||
- [ ] Include numbers
|
||||
- [ ] Include lowercase characters
|
||||
- [ ] Include uppercase characters
|
||||
|
|
|
|||
|
|
@ -11,9 +11,12 @@ app = typer.Typer()
|
|||
def main(
|
||||
random: bool = True,
|
||||
length: int = typer.Option(8, help="Length of the generated password."),
|
||||
symbols: bool = typer.Option(
|
||||
False, help="If the generated password should includes special characters."
|
||||
),
|
||||
) -> None:
|
||||
seed = r.randint(0, 100) if random else 0
|
||||
typer.echo(generate_password(seed, length))
|
||||
typer.echo(generate_password(seed, length, symbols))
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
|
|
|
|||
|
|
@ -16,6 +16,13 @@ def test_cli_can_set_password_length() -> None:
|
|||
assert "2yW4AcqGFz" in result.stdout
|
||||
|
||||
|
||||
def test_cli_can_set_symbols() -> None:
|
||||
args = ["--symbols"]
|
||||
result = _run_cli(*args)
|
||||
print(result.stdout)
|
||||
assert "X1fH$!ZM" in result.stdout
|
||||
|
||||
|
||||
def _run_cli(*args) -> Result:
|
||||
result = runner.invoke(app, ["--no-random", *args])
|
||||
assert result.exit_code == 0
|
||||
|
|
|
|||
|
|
@ -2,12 +2,15 @@ import string
|
|||
import random
|
||||
|
||||
|
||||
def generate_password(seed: int, length: int = 8) -> str:
|
||||
def generate_password(seed: int, length: int = 8, symbols: bool = False) -> str:
|
||||
lowercase = string.ascii_lowercase
|
||||
uppercase = string.ascii_uppercase
|
||||
digits = string.digits
|
||||
punctuation = string.punctuation
|
||||
|
||||
letters = lowercase + uppercase + digits
|
||||
if symbols:
|
||||
letters += punctuation
|
||||
|
||||
random_generator = random.Random(seed)
|
||||
|
||||
|
|
|
|||
|
|
@ -22,3 +22,14 @@ def test_can_generate_random_password(seed: int, expected: str) -> None:
|
|||
)
|
||||
def test_control_password_length(seed: int, length: int, expected: str) -> None:
|
||||
assert generate_password(seed, length) == expected
|
||||
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
("seed", "symbols", "expected"),
|
||||
[
|
||||
(0, True, "X1fH$!ZM"),
|
||||
(1, True, """r+iGp"58"""),
|
||||
],
|
||||
)
|
||||
def test_password_can_contain_symbols(seed: int, symbols: bool, expected: str) -> None:
|
||||
assert generate_password(seed, symbols=symbols) == expected
|
||||
|
|
|
|||
Loading…
Reference in a new issue