import json import pytest from unittest.mock import MagicMock, patch from typer.testing import CliRunner from reyna_cli.cli import app from reyna_cli.immich import ImmichClient from reyna_cli.mongo_direct import MongoDirectClient from reyna_cli.zoom_direct import ZoomClient runner = CliRunner() @patch("reyna_cli.immich.httpx.Client") def test_immich_client_stats(mock_client_class): mock_client = mock_client_class.return_value mock_client.request.return_value.json.return_value = {"total": 100} mock_client.request.return_value.raise_for_status = MagicMock() mock_client.request.return_value.content = b'{"total": 100}' with patch.dict("os.environ", {"IMMICH_URL": "http://localhost:2283", "IMMICH_API_KEY": "test"}): client = ImmichClient() stats = client.statistics() assert stats == {"total": 100} @patch("pymongo.MongoClient") def test_mongo_client_list_dbs(mock_mongo_class): mock_client = mock_mongo_class.return_value mock_client.list_database_names.return_value = ["db1", "db2"] client = MongoDirectClient(uri="mongodb://localhost:27017") dbs = client.databases() assert dbs == ["db1", "db2"] @patch("reyna_cli.zoom_direct.httpx.Client") def test_zoom_client_token_and_user(mock_client_class): mock_client = mock_client_class.return_value # Mock token response mock_token_resp = MagicMock() mock_token_resp.json.return_value = {"access_token": "fake_token", "expires_in": 3600} mock_token_resp.raise_for_status = MagicMock() # Mock users response mock_users_resp = MagicMock() mock_users_resp.json.return_value = {"users": []} mock_users_resp.raise_for_status = MagicMock() mock_users_resp.content = b'{"users": []}' mock_client.post.return_value = mock_token_resp mock_client.request.return_value = mock_users_resp with patch.dict("os.environ", {"ZOOM_ACCOUNT_ID": "acc", "ZOOM_CLIENT_ID": "cid", "ZOOM_CLIENT_SECRET": "csec"}): client = ZoomClient() users = client.users() assert users == {"users": []} assert client._token == "fake_token" def test_cli_doctor_ram_plan(): result = runner.invoke(app, ["doctor", "--ram-plan", "--json"]) assert result.exit_code == 0 payload = json.loads(result.stdout) assert "ram_diagnostics" in payload @patch("reyna_cli.cli.ImmichClient") def test_cli_immich_stats(mock_immich_class): mock_instance = mock_immich_class.return_value mock_instance.statistics.return_value = {"count": 42} result = runner.invoke(app, ["immich", "stats", "--json"]) assert result.exit_code == 0 payload = json.loads(result.stdout) assert payload["result"] == {"count": 42} @patch("reyna_cli.cli.MongoClient") def test_cli_mongo_dbs(mock_mongo_class): mock_instance = mock_mongo_class.return_value mock_instance.databases.return_value = ["test_db"] result = runner.invoke(app, ["mongo", "dbs", "--json"]) assert result.exit_code == 0 payload = json.loads(result.stdout) assert payload["result"] == ["test_db"] @patch("reyna_cli.cli.ZoomClient") def test_cli_zoom_user(mock_zoom_class): mock_instance = mock_zoom_class.return_value mock_instance.users.return_value = {"users": []} result = runner.invoke(app, ["zoom", "user", "--json"]) assert result.exit_code == 0 payload = json.loads(result.stdout) assert payload["result"] == {"users": []}