"""Integration coverage for tool search-notes with metadata filters."""
import json
from typer.testing import CliRunner
from basic_memory.cli.main import app as cli_app
runner = CliRunner()
def test_search_notes_query_plus_meta_filter(app, app_config, test_project, config_manager):
"""`bm tool search-notes` should support query + metadata filter together."""
active_content = "---\nstatus: active\n---\n# Active Meta Note\n\nMetaFilterToken"
inactive_content = "---\nstatus: inactive\n---\n# Inactive Meta Note\n\nMetaFilterToken"
active_write = runner.invoke(
cli_app,
[
"tool",
"write-note",
"--title",
"Active Meta Note",
"--folder",
"meta-tests",
"--content",
active_content,
],
)
assert active_write.exit_code == 0, active_write.output
active_data = json.loads(active_write.stdout)
inactive_write = runner.invoke(
cli_app,
[
"tool",
"write-note",
"--title",
"Inactive Meta Note",
"--folder",
"meta-tests",
"--content",
inactive_content,
],
)
assert inactive_write.exit_code == 0, inactive_write.output
inactive_data = json.loads(inactive_write.stdout)
search = runner.invoke(
cli_app,
[
"tool",
"search-notes",
"MetaFilterToken",
"--meta",
"status=active",
"--local",
"--page-size",
"20",
],
)
assert search.exit_code == 0, search.output
payload = json.loads(search.stdout)
permalinks = {item["permalink"] for item in payload["results"]}
assert active_data["permalink"] in permalinks
assert inactive_data["permalink"] not in permalinks