"""CLI pyfglair: discover против мок-облака и monitor против mock_ac.""" from __future__ import annotations import asyncio import json from pyfglair.__main__ import main from conftest import free_port async def test_cli_discover_json(cloud, capfd): rc = await asyncio.to_thread( main, [ "discover", "--api-base", cloud["url"], "--email", "user@example.com", "--password", "secret", ], ) assert rc == 0 out, _ = capfd.readouterr() config = json.loads(out.splitlines()[0]) assert config["dsn"] == "AC000W00MOCK0001" assert config["lanip_key_id"] == 64201 assert config["ip_address"] == "192.168.1.50" async def test_cli_discover_esphome_secrets(cloud, capfd): rc = await asyncio.to_thread( main, [ "discover", "--api-base", cloud["url"], "--email", "user@example.com", "--password", "secret", "--format", "esphome-secrets", ], ) assert rc == 0 out, _ = capfd.readouterr() assert 'bedroom_dsn: "AC000W00MOCK0001"' in out assert "bedroom_lanip_key_id: 64201" in out async def test_cli_monitor(mock_ac, ac_env, capfd): proc = mock_ac() rc = await asyncio.to_thread( main, [ "monitor", "--host", "127.0.0.1", "--device-port", str(proc.port), "--dsn", ac_env["dsn"], "--lanip-key", ac_env["key"], "--lanip-key-id", str(ac_env["key_id"]), "--listen-port", str(free_port()), "--duration", "2", "--get", "OperationMode", "--log-level", "3", ], ) assert rc == 0 out, _ = capfd.readouterr() assert "STATE online" in out assert "PROP OPERATION_MODE = 6" in out