Files
biblioteka-standartnyh-izdeliy/tests/test_cli.py
T

71 lines
2.2 KiB
Python

from __future__ import annotations
import json
from pathlib import Path
from standard_products.cli import main
def test_cli_full_cycle(tmp_path: Path, capsys) -> None:
db = str(tmp_path / "cli.db")
assert main(["--db", db, "init"]) == 0
assert "База готова" in capsys.readouterr().out
assert (
main(
[
"--db",
db,
"add",
"Болт M10x50 ГОСТ 7798-70",
"--name",
"Болт с шестигранной головкой",
"--standard",
"ГОСТ 7798-70",
"--category",
"Крепёж",
"--mass",
"0.045",
"--attr",
"резьба=M10",
]
)
== 0
)
assert "Добавлено изделие" in capsys.readouterr().out
assert main(["--db", db, "show", "Болт M10x50 ГОСТ 7798-70"]) == 0
payload = json.loads(capsys.readouterr().out)
assert payload["attributes"] == {"резьба": "M10"}
assert main(["--db", db, "search", "болт"]) == 0
assert "Болт" in capsys.readouterr().out
assert main(["--db", db, "stats"]) == 0
assert "Всего изделий: 1" in capsys.readouterr().out
assert main(["--db", db, "delete", "Болт M10x50 ГОСТ 7798-70"]) == 0
assert "Удалено" in capsys.readouterr().out
assert main(["--db", db, "show", "Болт M10x50 ГОСТ 7798-70"]) == 1
def test_cli_rejects_duplicate(tmp_path: Path, capsys) -> None:
db = str(tmp_path / "cli.db")
args = ["--db", db, "add", "Гайка M10", "--name", "Гайка"]
assert main(args) == 0
assert main(args) == 1
assert "уже существует" in capsys.readouterr().err
def test_cli_rejects_malformed_attribute(tmp_path: Path) -> None:
db = str(tmp_path / "cli.db")
try:
main(["--db", db, "add", "Гайка M10", "--name", "Гайка", "--attr", "без равно"])
except SystemExit as error:
assert "КЛЮЧ=ЗНАЧЕНИЕ" in str(error)
else: # pragma: no cover
raise AssertionError("ожидался SystemExit")