mirror of
https://github.com/simonw/dclient.git
synced 2026-07-24 18:04:33 +02:00
Add test_commands_v2.py with 28 tests covering databases, tables, plugins, schema, default_query, upsert, auth status, actor, and get commands. Add test_alias_v2.py with 5 tests for alias default, alias default-db, and removing the default alias. Update aliases.md and authentication.md docs for v2 API. refs #29 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
111 lines
3.7 KiB
Python
111 lines
3.7 KiB
Python
"""Tests for v2 alias command: default, default-db subcommands."""
|
|
|
|
from click.testing import CliRunner
|
|
from dclient.cli import cli
|
|
import json
|
|
import pathlib
|
|
|
|
|
|
def test_alias_default_workflow(mocker, tmpdir):
|
|
mocker.patch("dclient.cli.get_config_dir", return_value=pathlib.Path(tmpdir))
|
|
runner = CliRunner()
|
|
|
|
# Add an alias
|
|
result = runner.invoke(cli, ["alias", "add", "prod", "https://prod.example.com"])
|
|
assert result.exit_code == 0
|
|
|
|
# No default yet
|
|
result = runner.invoke(cli, ["alias", "default"])
|
|
assert result.exit_code == 0
|
|
assert "No default instance set" in result.output
|
|
|
|
# Set default
|
|
result = runner.invoke(cli, ["alias", "default", "prod"])
|
|
assert result.exit_code == 0
|
|
|
|
# Show default
|
|
result = runner.invoke(cli, ["alias", "default"])
|
|
assert result.exit_code == 0
|
|
assert result.output.strip() == "prod"
|
|
|
|
# List should show * marker
|
|
result = runner.invoke(cli, ["alias", "list"])
|
|
assert result.exit_code == 0
|
|
assert "* prod" in result.output
|
|
|
|
# Clear default
|
|
result = runner.invoke(cli, ["alias", "default", "--clear"])
|
|
assert result.exit_code == 0
|
|
|
|
result = runner.invoke(cli, ["alias", "default"])
|
|
assert "No default instance set" in result.output
|
|
|
|
|
|
def test_alias_default_unknown_alias(mocker, tmpdir):
|
|
mocker.patch("dclient.cli.get_config_dir", return_value=pathlib.Path(tmpdir))
|
|
runner = CliRunner()
|
|
result = runner.invoke(cli, ["alias", "default", "nonexistent"])
|
|
assert result.exit_code == 1
|
|
assert "No such alias" in result.output
|
|
|
|
|
|
def test_alias_default_db_workflow(mocker, tmpdir):
|
|
mocker.patch("dclient.cli.get_config_dir", return_value=pathlib.Path(tmpdir))
|
|
runner = CliRunner()
|
|
|
|
# Add an alias
|
|
result = runner.invoke(cli, ["alias", "add", "prod", "https://prod.example.com"])
|
|
assert result.exit_code == 0
|
|
|
|
# No default database yet
|
|
result = runner.invoke(cli, ["alias", "default-db", "prod"])
|
|
assert result.exit_code == 0
|
|
assert "No default database set" in result.output
|
|
|
|
# Set default database
|
|
result = runner.invoke(cli, ["alias", "default-db", "prod", "main"])
|
|
assert result.exit_code == 0
|
|
|
|
# Show default database
|
|
result = runner.invoke(cli, ["alias", "default-db", "prod"])
|
|
assert result.exit_code == 0
|
|
assert result.output.strip() == "main"
|
|
|
|
# List should show db info
|
|
result = runner.invoke(cli, ["alias", "list"])
|
|
assert "(db: main)" in result.output
|
|
|
|
# Clear default database
|
|
result = runner.invoke(cli, ["alias", "default-db", "prod", "--clear"])
|
|
assert result.exit_code == 0
|
|
|
|
result = runner.invoke(cli, ["alias", "default-db", "prod"])
|
|
assert "No default database set" in result.output
|
|
|
|
|
|
def test_alias_default_db_unknown_alias(mocker, tmpdir):
|
|
mocker.patch("dclient.cli.get_config_dir", return_value=pathlib.Path(tmpdir))
|
|
runner = CliRunner()
|
|
result = runner.invoke(cli, ["alias", "default-db", "nonexistent", "main"])
|
|
assert result.exit_code == 1
|
|
assert "No such alias" in result.output
|
|
|
|
|
|
def test_alias_remove_clears_default(mocker, tmpdir):
|
|
"""Removing the default alias also clears default_instance."""
|
|
mocker.patch("dclient.cli.get_config_dir", return_value=pathlib.Path(tmpdir))
|
|
runner = CliRunner()
|
|
|
|
runner.invoke(cli, ["alias", "add", "prod", "https://prod.example.com"])
|
|
runner.invoke(cli, ["alias", "default", "prod"])
|
|
|
|
# Verify it's set
|
|
config = json.loads((pathlib.Path(tmpdir) / "config.json").read_text())
|
|
assert config["default_instance"] == "prod"
|
|
|
|
# Remove alias
|
|
runner.invoke(cli, ["alias", "remove", "prod"])
|
|
|
|
config = json.loads((pathlib.Path(tmpdir) / "config.json").read_text())
|
|
assert config["default_instance"] is None
|
|
assert "prod" not in config["instances"]
|