71 lines
2.2 KiB
Python
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")
|