Отсев баз через source.exclude_databases
list_databases() прячит базы по массиву строк: подстрока без регистра или маска со * ? [. Фильтр — единственное место рождения списка, поэтому одинаков для меню, пульта и list; явное имя в CLI не трогает.
This commit is contained in:
@@ -1034,3 +1034,32 @@ def test_arrows_walk_dialog_fields(cfg, monkeypatch):
|
||||
await pilot.press("escape")
|
||||
await pilot.pause()
|
||||
asyncio.run(scenario())
|
||||
|
||||
|
||||
def test_exclude_databases_hides_rows(monkeypatch):
|
||||
"""exclude_databases — массив строк: подстрока без регистра, со звёздочкой — маска."""
|
||||
assert core.excluded("zpas_test", ["test"])
|
||||
assert core.excluded("ZPAS_TEST", ["test"]) # регистр не важен
|
||||
assert core.excluded("zpas_old_2", ["*_old_?"]) # маска
|
||||
assert not core.excluded("zpas", ["test", "*_old"])
|
||||
assert not core.excluded("zpas", []) # пустой список ничего не прячет
|
||||
assert not core.excluded("zpas", ["", " "]) # и пустые строки тоже
|
||||
|
||||
node = {"host": "stand", "user": "postgres", "password": "x",
|
||||
"maintenance_database": "postgres",
|
||||
"exclude_databases": ["_old", "keycloak", "*_tmp"]}
|
||||
monkeypatch.setattr(core, "capture", lambda cmd, env, what:
|
||||
"zpas\t1284 MB\nzpas_old\t312 MB\nkeycloak\t12 MB\n"
|
||||
"media\t8 MB\nbuild_tmp\t1 MB\n")
|
||||
rows = core.list_databases({"psql": "psql"}, node, "стенд")
|
||||
assert [name for name, _ in rows] == ["zpas", "media"]
|
||||
|
||||
|
||||
def test_exclude_databases_does_not_touch_explicit_name(cfg, monkeypatch):
|
||||
"""Скрытая из списка база остаётся доступной, если имя названо прямо в CLI."""
|
||||
cfg["source"]["exclude_databases"] = ["zpas"]
|
||||
called = []
|
||||
monkeypatch.setattr(core, "dump", lambda cfg_, tools, dbname, out, dry:
|
||||
called.append(dbname) or out)
|
||||
core.do_dump(cfg, {"pg_dump": "pg_dump"}, ["zpas"], dry_run=True)
|
||||
assert called == ["zpas"]
|
||||
|
||||
Reference in New Issue
Block a user