Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 17 additions & 2 deletions fluidize/managers/simulations.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

from fluidize_sdk import FluidizeSDK

from fluidize.config import config
from fluidize.core.types.node import nodeMetadata_simulation


Expand All @@ -16,8 +17,22 @@ def __init__(self, adapter: Any) -> None:
adapter: adapter (FluidizeSDK or LocalAdapter)
"""
self._adapter = adapter
# TODO: Fix hardcoding of api_token and remove type ignore
self.fluidize_sdk = FluidizeSDK(api_token="placeholder") # noqa: S106

# Use the adapter if it's already a FluidizeSDK instance, otherwise create one
if (
hasattr(adapter, "api_token")
and hasattr(adapter, "simulation")
and adapter.api_token is not None
and adapter.simulation is not None
):
# Assume it's already a FluidizeSDK instance
self.fluidize_sdk = adapter
else:
# Create FluidizeSDK with proper API key from config
if not config.api_key:
msg = "API key is required. Set the FLUIDIZE_API_KEY environment variable."
raise ValueError(msg)
self.fluidize_sdk = FluidizeSDK(api_token=config.api_key)

def list_simulations(self) -> list[Any]:
"""
Expand Down
18 changes: 16 additions & 2 deletions tests/integration/test_simulations_manager.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
"""Integration tests for SimulationsManager - tests real API connectivity."""

import os
from unittest.mock import Mock, patch

import pytest

from fluidize.managers.simulations import SimulationsManager
Expand All @@ -11,11 +14,10 @@ class TestSimulationsManagerIntegration:
@pytest.fixture
def mock_adapter(self):
"""Create a mock adapter for testing."""
from unittest.mock import Mock

adapter = Mock()
return adapter

@pytest.mark.skipif(not os.getenv("FLUIDIZE_API_KEY"), reason="FLUIDIZE_API_KEY environment variable not set")
def test_list_simulations_integration(self, mock_adapter):
"""Integration test that actually calls the API and prints output."""

Expand All @@ -38,3 +40,15 @@ def test_list_simulations_integration(self, mock_adapter):
print(f" Description: {sim.description}")
print(f" Version: {sim.version}")
print("\n")

def test_list_simulations_without_api_key(self, mock_adapter):
"""Test behavior when no API key is available."""
# Ensure mock_adapter doesn't have SDK attributes so new SDK creation is attempted
mock_adapter.api_token = None
mock_adapter.simulation = None

with patch("fluidize.managers.simulations.config") as mock_config:
mock_config.api_key = None

with pytest.raises(ValueError, match="API key is required"):
SimulationsManager(mock_adapter)
38 changes: 35 additions & 3 deletions tests/unit/managers/test_simulation.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,17 +19,49 @@ def mock_adapter(self):
@pytest.fixture
def simulations_manager(self, mock_adapter):
"""Create a SimulationsManager instance for testing."""
with patch("fluidize.managers.simulations.FluidizeSDK"):
with (
patch("fluidize.managers.simulations.FluidizeSDK"),
patch("fluidize.managers.simulations.config") as mock_config,
):
mock_config.api_key = "test-api-key"
return SimulationsManager(mock_adapter)

@patch("fluidize.managers.simulations.FluidizeSDK")
def test_init(self, mock_sdk_class, mock_adapter):
@patch("fluidize.managers.simulations.config")
def test_init(self, mock_config, mock_sdk_class, mock_adapter):
"""Test SimulationsManager initialization."""
mock_config.api_key = "test-api-key"
# Ensure mock_adapter doesn't have SDK attributes so new SDK is created
mock_adapter.api_token = None
mock_adapter.simulation = None

manager = SimulationsManager(mock_adapter)

assert manager._adapter is mock_adapter
assert manager.fluidize_sdk is not None
mock_sdk_class.assert_called_once()
mock_sdk_class.assert_called_once_with(api_token="test-api-key") # noqa: S106

def test_init_with_fluidize_sdk_adapter(self):
"""Test SimulationsManager initialization when adapter is already FluidizeSDK."""
mock_sdk_adapter = Mock()
mock_sdk_adapter.api_token = "existing-token" # noqa: S105
mock_sdk_adapter.simulation = Mock()

manager = SimulationsManager(mock_sdk_adapter)

assert manager._adapter is mock_sdk_adapter
assert manager.fluidize_sdk is mock_sdk_adapter

@patch("fluidize.managers.simulations.config")
def test_init_without_api_key_raises_error(self, mock_config, mock_adapter):
"""Test that initialization raises error when no API key is available."""
mock_config.api_key = None
# Ensure mock_adapter doesn't have SDK attributes so new SDK creation is attempted
mock_adapter.api_token = None
mock_adapter.simulation = None

with pytest.raises(ValueError, match="API key is required"):
SimulationsManager(mock_adapter)

@patch("fluidize.managers.simulations.FluidizeSDK")
def test_list_simulations_returns_list(self, mock_sdk_class, simulations_manager):
Expand Down