import pytest from unittest.mock import patch, MagicMock import consul_client import requests @patch("requests.get") def test_get_cluster_services(mock_get): """Test fetching healthy services from Consul.""" # Mock responses for navidrome mock_navidrome = [ { "Node": {"Node": "node1", "Address": "192.168.1.101"}, "Service": {"Service": "navidrome", "Port": 4533, "ID": "navidrome-1"}, "Checks": [{"Status": "passing"}] } ] m = MagicMock() m.json.return_value = mock_navidrome m.raise_for_status.return_value = None mock_get.return_value = m consul_url = "http://consul:8500" services = consul_client.get_cluster_services(consul_url) # Should find 1 node (primary) assert len(services) == 1 assert services[0]["node"] == "node1" assert services[0]["status"] == "passing" @patch("requests.get") def test_get_cluster_services_with_errors(mock_get): """Test fetching services with detailed health check output.""" mock_navidrome = [ { "Node": {"Node": "node1", "Address": "192.168.1.101"}, "Service": {"Service": "navidrome", "Port": 4533, "ID": "navidrome-1"}, "Checks": [ {"Status": "critical", "Output": "HTTP GET http://192.168.1.101:4533/app: 500 Internal Server Error"} ] } ] m = MagicMock() m.json.return_value = mock_navidrome m.raise_for_status.return_value = None mock_get.return_value = m services = consul_client.get_cluster_services("http://consul:8500") node1 = next(s for s in services if s["node"] == "node1") assert node1["status"] == "critical" assert "500 Internal Server Error" in node1["check_output"]