import pytest
from unittest.mock import Mock
from swarms.workers.worker_agent_ultra import WorkerUltraNode  # import your module here

def test_create_agent():
    mock_llm = Mock()
    mock_toolset = { 'test_toolset': Mock() }
    mock_vectorstore = Mock()
    worker = WorkerUltraNode(mock_llm, mock_toolset, mock_vectorstore)
    worker.create_agent()
    assert worker.agent is not None

@pytest.mark.parametrize("invalid_toolset", [123, 'string', 0.45])
def test_add_toolset_invalid(invalid_toolset):
    mock_llm = Mock()
    mock_toolset = { 'test_toolset': Mock() }
    mock_vectorstore = Mock()
    worker = WorkerUltraNode(mock_llm, mock_toolset, mock_vectorstore)
    with pytest.raises(TypeError):
        worker.add_toolset(invalid_toolset)

@pytest.mark.parametrize("invalid_prompt", [123, None, "", []])
def test_run_invalid_prompt(invalid_prompt):
    mock_llm = Mock()
    mock_toolset = { 'test_toolset': Mock() }
    mock_vectorstore = Mock()
    worker = WorkerUltraNode(mock_llm, mock_toolset, mock_vectorstore)
    with pytest.raises((TypeError, ValueError)):
        worker.run(invalid_prompt)

def test_run_valid_prompt(mocker):
    mock_llm = Mock()
    mock_toolset = { 'test_toolset': Mock() }
    mock_vectorstore = Mock()
    worker = WorkerUltraNode(mock_llm, mock_toolset, mock_vectorstore)
    mocker.patch.object(worker, 'create_agent')
    assert worker.run('Test prompt') == 'Task completed by WorkerNode'
    
def test_worker_node():
    worker = worker_ultra_node('test-key')
    assert isinstance(worker, WorkerUltraNode)

def test_worker_node_no_key():
    with pytest.raises(ValueError):
        worker_ultra_node(None)
