import sys
from unittest import result
import gradio_client
import pytest
import os
from unittest.mock import patch, MagicMock
from swarms.app import set_environ, load_tools, download_model

current_dir = os.path.dirname(os.path.abspath(__file__))

# Add the parent directory (the root of your project) to the Python path
sys.path.insert(0, os.path.join(current_dir, ".."))


def test_set_environ():
    @patch("app.LLM")
    def test_download_model(mock_llm):
        # Arrange
        model_url = "facebook/opt-125m"
        memory_utilization = 8
        mock_model = MagicMock()
        mock_llm.return_value = mock_model

        # Act
        result = download_model(model_url, memory_utilization)

        # Assert
        mock_llm.assert_called_once_with(
            model=model_url,
            trust_remote_code=True,
            gpu_memory_utilization=memory_utilization,
        )
        self.assertEqual(
            result,
            gradio_client.update(choices=[(model_url.split("/")[-1], mock_model)]),
        )

    def test_load_tools(self):
        # Call the function
        result = load_tools()


# Check if the function returns the expected result
assert result is not None
assert isinstance(result, list)