"""Pytest configuration and fixtures.""" from unittest.mock import Mock, patch import pytest @pytest.fixture def mock_esc_env(tmp_path): """Mock Pulumi ESC environment variables.""" ssh_key_path = tmp_path / "test_key" ssh_key_path.write_text("-----BEGIN OPENSSH PRIVATE KEY-----\ntest\n-----END OPENSSH PRIVATE KEY-----") return { "HETZNER_API_TOKEN": "test-hetzner-token", "SSH_PUBLIC_KEY": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAITest", "SSH_PRIVATE_KEY": "-----BEGIN OPENSSH PRIVATE KEY-----\ntest\n-----END OPENSSH PRIVATE KEY-----", "SSH_PRIVATE_KEY_PATH": str(ssh_key_path), } @pytest.fixture def mock_secrets(mock_esc_env): """Mock the secrets module to return test secrets.""" with patch("materia.secrets._load_environment", return_value=mock_esc_env): yield @pytest.fixture def mock_hcloud_client(): """Mock Hetzner Cloud client.""" with patch("materia.providers.hetzner.Client") as mock_client: client_instance = Mock() mock_client.return_value = client_instance client_instance.ssh_keys.get_all.return_value = [] client_instance.ssh_keys.create.return_value = Mock(id=1, name="materia-key") mock_server = Mock() mock_server.id = 12345 mock_server.name = "test-worker" mock_server.status = "running" mock_server.public_net.ipv4.ip = "192.0.2.1" mock_server.server_type.name = "ccx12" mock_server.wait_until_status_is = Mock() mock_server.delete = Mock() mock_response = Mock() mock_response.server = mock_server client_instance.servers.create.return_value = mock_response client_instance.servers.get_all.return_value = [] client_instance.servers.get_by_id.return_value = mock_server yield client_instance @pytest.fixture def mock_ssh_wait(): """Mock SSH wait function to return immediately.""" with patch("materia.providers.hetzner.wait_for_ssh", return_value=True): yield