2026-02-26 20:44:39 -08:00
|
|
|
"""Tests for v2 defaults command: instance and database subcommands."""
|
Tests and docs for v2 introspection commands and alias features
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>
2026-02-24 15:21:58 -08:00
|
|
|
|
|
|
|
|
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
|
2026-02-26 20:44:39 -08:00
|
|
|
result = runner.invoke(cli, ["default", "instance"])
|
Tests and docs for v2 introspection commands and alias features
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>
2026-02-24 15:21:58 -08:00
|
|
|
assert result.exit_code == 0
|
|
|
|
|
assert "No default instance set" in result.output
|
|
|
|
|
|
|
|
|
|
# Set default
|
2026-02-26 20:44:39 -08:00
|
|
|
result = runner.invoke(cli, ["default", "instance", "prod"])
|
Tests and docs for v2 introspection commands and alias features
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>
2026-02-24 15:21:58 -08:00
|
|
|
assert result.exit_code == 0
|
|
|
|
|
|
|
|
|
|
# Show default
|
2026-02-26 20:44:39 -08:00
|
|
|
result = runner.invoke(cli, ["default", "instance"])
|
Tests and docs for v2 introspection commands and alias features
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>
2026-02-24 15:21:58 -08:00
|
|
|
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
|
2026-02-26 20:44:39 -08:00
|
|
|
result = runner.invoke(cli, ["default", "instance", "--clear"])
|
Tests and docs for v2 introspection commands and alias features
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>
2026-02-24 15:21:58 -08:00
|
|
|
assert result.exit_code == 0
|
|
|
|
|
|
2026-02-26 20:44:39 -08:00
|
|
|
result = runner.invoke(cli, ["default", "instance"])
|
Tests and docs for v2 introspection commands and alias features
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>
2026-02-24 15:21:58 -08:00
|
|
|
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()
|
2026-02-26 20:44:39 -08:00
|
|
|
result = runner.invoke(cli, ["default", "instance", "nonexistent"])
|
Tests and docs for v2 introspection commands and alias features
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>
2026-02-24 15:21:58 -08:00
|
|
|
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
|
2026-02-26 20:44:39 -08:00
|
|
|
result = runner.invoke(cli, ["default", "database", "prod"])
|
Tests and docs for v2 introspection commands and alias features
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>
2026-02-24 15:21:58 -08:00
|
|
|
assert result.exit_code == 0
|
|
|
|
|
assert "No default database set" in result.output
|
|
|
|
|
|
|
|
|
|
# Set default database
|
2026-02-26 20:44:39 -08:00
|
|
|
result = runner.invoke(cli, ["default", "database", "prod", "main"])
|
Tests and docs for v2 introspection commands and alias features
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>
2026-02-24 15:21:58 -08:00
|
|
|
assert result.exit_code == 0
|
|
|
|
|
|
|
|
|
|
# Show default database
|
2026-02-26 20:44:39 -08:00
|
|
|
result = runner.invoke(cli, ["default", "database", "prod"])
|
Tests and docs for v2 introspection commands and alias features
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>
2026-02-24 15:21:58 -08:00
|
|
|
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
|
2026-02-26 20:44:39 -08:00
|
|
|
result = runner.invoke(cli, ["default", "database", "prod", "--clear"])
|
Tests and docs for v2 introspection commands and alias features
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>
2026-02-24 15:21:58 -08:00
|
|
|
assert result.exit_code == 0
|
|
|
|
|
|
2026-02-26 20:44:39 -08:00
|
|
|
result = runner.invoke(cli, ["default", "database", "prod"])
|
Tests and docs for v2 introspection commands and alias features
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>
2026-02-24 15:21:58 -08:00
|
|
|
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()
|
2026-02-26 20:44:39 -08:00
|
|
|
result = runner.invoke(cli, ["default", "database", "nonexistent", "main"])
|
Tests and docs for v2 introspection commands and alias features
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>
2026-02-24 15:21:58 -08:00
|
|
|
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"])
|
2026-02-26 20:44:39 -08:00
|
|
|
runner.invoke(cli, ["default", "instance", "prod"])
|
Tests and docs for v2 introspection commands and alias features
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>
2026-02-24 15:21:58 -08:00
|
|
|
|
|
|
|
|
# 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"]
|
2026-02-26 20:44:39 -08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
def test_default_instance_accepts_url(mocker, tmpdir):
|
|
|
|
|
mocker.patch("dclient.cli.get_config_dir", return_value=pathlib.Path(tmpdir))
|
|
|
|
|
runner = CliRunner()
|
|
|
|
|
|
|
|
|
|
runner.invoke(cli, ["alias", "add", "prod", "https://prod.example.com"])
|
|
|
|
|
result = runner.invoke(cli, ["default", "instance", "https://prod.example.com"])
|
|
|
|
|
assert result.exit_code == 0
|
|
|
|
|
|
|
|
|
|
result = runner.invoke(cli, ["default", "instance"])
|
|
|
|
|
assert result.exit_code == 0
|
|
|
|
|
assert result.output.strip() == "prod"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def test_default_database_accepts_url(mocker, tmpdir):
|
|
|
|
|
mocker.patch("dclient.cli.get_config_dir", return_value=pathlib.Path(tmpdir))
|
|
|
|
|
runner = CliRunner()
|
|
|
|
|
|
|
|
|
|
runner.invoke(cli, ["alias", "add", "prod", "https://prod.example.com"])
|
|
|
|
|
result = runner.invoke(
|
|
|
|
|
cli, ["default", "database", "https://prod.example.com", "main"]
|
|
|
|
|
)
|
|
|
|
|
assert result.exit_code == 0
|
|
|
|
|
|
|
|
|
|
result = runner.invoke(cli, ["default", "database", "prod"])
|
|
|
|
|
assert result.exit_code == 0
|
|
|
|
|
assert result.output.strip() == "main"
|