docs: update CLI command syntax across workflow documentation
Some checks failed
CLI Tests / test-cli (push) Has been cancelled
Security Scanning / security-scan (push) Has been cancelled
Integration Tests / test-service-integration (push) Has been cancelled
Python Tests / test-python (push) Has been cancelled
Documentation Validation / validate-docs (push) Has been cancelled
API Endpoint Tests / test-api-endpoints (push) Has been cancelled
Some checks failed
CLI Tests / test-cli (push) Has been cancelled
Security Scanning / security-scan (push) Has been cancelled
Integration Tests / test-service-integration (push) Has been cancelled
Python Tests / test-python (push) Has been cancelled
Documentation Validation / validate-docs (push) Has been cancelled
API Endpoint Tests / test-api-endpoints (push) Has been cancelled
- Updated marketplace commands: `marketplace --action` → `market` subcommands - Updated wallet commands: direct flags → `wallet` subcommands - Updated AI commands: `ai-submit`, `ai-status` → `ai submit`, `ai status` - Updated blockchain commands: `chain` → `blockchain info` - Standardized command structure across all workflow files - Affected files: MULTI_NODE_MASTER_INDEX.md, TEST_MASTER_INDEX.md, multi-node-blockchain-marketplace
This commit is contained in:
@@ -1,146 +1,98 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Basic CLI tests for AITBC CLI functionality."""
|
||||
"""Basic CLI tests for the unified AITBC command hierarchy."""
|
||||
|
||||
import pytest
|
||||
import importlib.util
|
||||
import json
|
||||
import subprocess
|
||||
import sys
|
||||
import os
|
||||
from pathlib import Path
|
||||
|
||||
# Add CLI to path for imports
|
||||
sys.path.insert(0, str(Path(__file__).parent.parent))
|
||||
|
||||
CLI_DIR = Path(__file__).resolve().parent.parent
|
||||
PROJECT_ROOT = CLI_DIR.parent
|
||||
CLI_FILE = CLI_DIR / "aitbc_cli.py"
|
||||
UNIFIED_FILE = CLI_DIR / "unified_cli.py"
|
||||
CLI_BIN = PROJECT_ROOT / "aitbc-cli"
|
||||
|
||||
|
||||
def run_cli(*args):
|
||||
return subprocess.run(
|
||||
[str(CLI_BIN), *args],
|
||||
capture_output=True,
|
||||
text=True,
|
||||
timeout=15,
|
||||
cwd=str(PROJECT_ROOT),
|
||||
)
|
||||
|
||||
|
||||
class TestCLIImports:
|
||||
"""Test CLI module imports."""
|
||||
|
||||
"""Test direct file-based CLI module imports."""
|
||||
|
||||
def test_cli_main_import(self):
|
||||
"""Test that main CLI module can be imported."""
|
||||
try:
|
||||
from aitbc_cli import main
|
||||
assert main is not None
|
||||
print("✅ CLI main import successful")
|
||||
except ImportError as e:
|
||||
pytest.fail(f"❌ CLI main import failed: {e}")
|
||||
|
||||
def test_cli_commands_import(self):
|
||||
"""Test that CLI command modules can be imported."""
|
||||
try:
|
||||
from commands.wallet import create_wallet, list_wallets
|
||||
from commands.blockchain import get_blockchain_info
|
||||
assert create_wallet is not None
|
||||
assert list_wallets is not None
|
||||
assert get_blockchain_info is not None
|
||||
print("✅ CLI commands import successful")
|
||||
except ImportError as e:
|
||||
pytest.fail(f"❌ CLI commands import failed: {e}")
|
||||
spec = importlib.util.spec_from_file_location("aitbc_cli_file", CLI_FILE)
|
||||
module = importlib.util.module_from_spec(spec)
|
||||
spec.loader.exec_module(module)
|
||||
assert callable(module.main)
|
||||
|
||||
def test_unified_cli_import(self):
|
||||
spec = importlib.util.spec_from_file_location("unified_cli_file", UNIFIED_FILE)
|
||||
module = importlib.util.module_from_spec(spec)
|
||||
spec.loader.exec_module(module)
|
||||
assert callable(module.run_cli)
|
||||
|
||||
|
||||
class TestCLIBasicFunctionality:
|
||||
"""Test basic CLI functionality."""
|
||||
|
||||
"""Test the visible command tree and core commands."""
|
||||
|
||||
def test_cli_help_output(self):
|
||||
"""Test that CLI help command works."""
|
||||
try:
|
||||
result = subprocess.run(
|
||||
[sys.executable, "aitbc_cli.py", "--help"],
|
||||
capture_output=True,
|
||||
text=True,
|
||||
timeout=10,
|
||||
cwd=str(Path(__file__).parent.parent)
|
||||
)
|
||||
|
||||
assert result.returncode == 0
|
||||
assert "AITBC CLI" in result.stdout
|
||||
assert "usage:" in result.stdout
|
||||
print("✅ CLI help output working")
|
||||
except subprocess.TimeoutExpired:
|
||||
pytest.fail("❌ CLI help command timed out")
|
||||
except Exception as e:
|
||||
pytest.fail(f"❌ CLI help command failed: {e}")
|
||||
|
||||
def test_cli_list_command(self):
|
||||
"""Test that CLI list command works."""
|
||||
try:
|
||||
result = subprocess.run(
|
||||
[sys.executable, "aitbc_cli.py", "list"],
|
||||
capture_output=True,
|
||||
text=True,
|
||||
timeout=10,
|
||||
cwd=str(Path(__file__).parent.parent)
|
||||
)
|
||||
|
||||
# Command should succeed even if no wallets exist
|
||||
assert result.returncode == 0
|
||||
print("✅ CLI list command working")
|
||||
except subprocess.TimeoutExpired:
|
||||
pytest.fail("❌ CLI list command timed out")
|
||||
except Exception as e:
|
||||
pytest.fail(f"❌ CLI list command failed: {e}")
|
||||
result = run_cli("--help")
|
||||
assert result.returncode == 0
|
||||
assert "AITBC CLI" in result.stdout
|
||||
assert "wallet" in result.stdout
|
||||
assert "blockchain" in result.stdout
|
||||
assert "ai" in result.stdout
|
||||
assert "market" in result.stdout
|
||||
|
||||
def test_cli_version_output(self):
|
||||
result = run_cli("--version")
|
||||
assert result.returncode == 0
|
||||
assert "2.1.0" in result.stdout
|
||||
|
||||
def test_nested_wallet_list_command(self):
|
||||
result = run_cli("wallet", "list")
|
||||
assert result.returncode == 0
|
||||
|
||||
def test_legacy_wallet_list_alias(self):
|
||||
result = run_cli("list")
|
||||
assert result.returncode == 0
|
||||
|
||||
def test_json_output_flag(self):
|
||||
result = run_cli("--output", "json", "wallet", "list")
|
||||
assert result.returncode == 0
|
||||
json.loads(result.stdout or "[]")
|
||||
|
||||
|
||||
class TestCLIErrorHandling:
|
||||
"""Test CLI error handling."""
|
||||
|
||||
|
||||
def test_cli_invalid_command(self):
|
||||
"""Test that CLI handles invalid commands gracefully."""
|
||||
try:
|
||||
result = subprocess.run(
|
||||
[sys.executable, "aitbc_cli.py", "invalid-command"],
|
||||
capture_output=True,
|
||||
text=True,
|
||||
timeout=10,
|
||||
cwd=str(Path(__file__).parent.parent)
|
||||
)
|
||||
|
||||
# Should fail gracefully
|
||||
assert result.returncode != 0
|
||||
print("✅ CLI invalid command handling working")
|
||||
except subprocess.TimeoutExpired:
|
||||
pytest.fail("❌ CLI invalid command test timed out")
|
||||
except Exception as e:
|
||||
pytest.fail(f"❌ CLI invalid command test failed: {e}")
|
||||
result = run_cli("invalid-command")
|
||||
assert result.returncode != 0
|
||||
|
||||
def test_wallet_balance_requires_target(self):
|
||||
result = run_cli("wallet", "balance")
|
||||
assert result.returncode != 0
|
||||
assert "Error: Wallet name is required" in result.stdout
|
||||
|
||||
|
||||
class TestCLIConfiguration:
|
||||
"""Test CLI configuration and setup."""
|
||||
|
||||
def test_cli_file_exists(self):
|
||||
"""Test that main CLI file exists."""
|
||||
cli_file = Path(__file__).parent.parent / "aitbc_cli.py"
|
||||
assert cli_file.exists(), f"❌ CLI file not found: {cli_file}"
|
||||
print(f"✅ CLI file exists: {cli_file}")
|
||||
|
||||
def test_cli_file_executable(self):
|
||||
"""Test that CLI file is executable."""
|
||||
cli_file = Path(__file__).parent.parent / "aitbc_cli.py"
|
||||
assert cli_file.is_file(), f"❌ CLI file is not a file: {cli_file}"
|
||||
|
||||
# Check if file has content
|
||||
with open(cli_file, 'r') as f:
|
||||
content = f.read()
|
||||
assert len(content) > 1000, f"❌ CLI file appears empty or too small"
|
||||
assert "def main" in content, f"❌ CLI file missing main function"
|
||||
|
||||
print(f"✅ CLI file is valid: {len(content)} characters")
|
||||
"""Test CLI file presence and launcher availability."""
|
||||
|
||||
def test_cli_files_exist(self):
|
||||
assert CLI_FILE.exists()
|
||||
assert UNIFIED_FILE.exists()
|
||||
assert CLI_BIN.exists()
|
||||
|
||||
if __name__ == "__main__":
|
||||
# Run basic tests when executed directly
|
||||
print("🧪 Running basic CLI tests...")
|
||||
|
||||
test_class = TestCLIImports()
|
||||
test_class.test_cli_main_import()
|
||||
test_class.test_cli_commands_import()
|
||||
|
||||
test_class = TestCLIBasicFunctionality()
|
||||
test_class.test_cli_help_output()
|
||||
test_class.test_cli_list_command()
|
||||
|
||||
test_class = TestCLIErrorHandling()
|
||||
test_class.test_cli_invalid_command()
|
||||
|
||||
test_class = TestCLIConfiguration()
|
||||
test_class.test_cli_file_exists()
|
||||
test_class.test_cli_file_executable()
|
||||
|
||||
print("✅ All basic CLI tests passed!")
|
||||
def test_cli_file_contains_main(self):
|
||||
content = CLI_FILE.read_text()
|
||||
assert len(content) > 1000
|
||||
assert "def main" in content
|
||||
|
||||
Reference in New Issue
Block a user