Skip to content

Commit

Permalink
Merge pull request #908 from ScrapeGraphAI/codebeaver/pre/beta
Browse files Browse the repository at this point in the history
codebeaver/pre/beta - Unit Tests
  • Loading branch information
VinciGit00 authored Jan 28, 2025
2 parents d5c7c9c + 1996b9d commit 02629e2
Show file tree
Hide file tree
Showing 3 changed files with 90 additions and 0 deletions.
2 changes: 2 additions & 0 deletions codebeaver.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
from: pytest
setup_commands: ['@merge', 'pip install -q selenium', 'pip install -q playwright', 'playwright install']
52 changes: 52 additions & 0 deletions tests/test_json_scraper_graph.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
import pytest

from pydantic import BaseModel
from scrapegraphai.graphs.json_scraper_graph import JSONScraperGraph
from unittest.mock import Mock, patch

class TestJSONScraperGraph:
@pytest.fixture
def mock_llm_model(self):
return Mock()

@pytest.fixture
def mock_embedder_model(self):
return Mock()

@patch('scrapegraphai.graphs.json_scraper_graph.FetchNode')
@patch('scrapegraphai.graphs.json_scraper_graph.GenerateAnswerNode')
@patch.object(JSONScraperGraph, '_create_llm')
def test_json_scraper_graph_with_directory(self, mock_create_llm, mock_generate_answer_node, mock_fetch_node, mock_llm_model, mock_embedder_model):
"""
Test JSONScraperGraph with a directory of JSON files.
This test checks if the graph correctly handles multiple JSON files input
and processes them to generate an answer.
"""
# Mock the _create_llm method to return a mock LLM model
mock_create_llm.return_value = mock_llm_model

# Mock the execute method of BaseGraph
with patch('scrapegraphai.graphs.json_scraper_graph.BaseGraph.execute') as mock_execute:
mock_execute.return_value = ({"answer": "Mocked answer for multiple JSON files"}, {})

# Create a JSONScraperGraph instance
graph = JSONScraperGraph(
prompt="Summarize the data from all JSON files",
source="path/to/json/directory",
config={"llm": {"model": "test-model", "temperature": 0}},
schema=BaseModel
)

# Set mocked embedder model
graph.embedder_model = mock_embedder_model

# Run the graph
result = graph.run()

# Assertions
assert result == "Mocked answer for multiple JSON files"
assert graph.input_key == "json_dir"
mock_execute.assert_called_once_with({"user_prompt": "Summarize the data from all JSON files", "json_dir": "path/to/json/directory"})
mock_fetch_node.assert_called_once()
mock_generate_answer_node.assert_called_once()
mock_create_llm.assert_called_once_with({"model": "test-model", "temperature": 0})
36 changes: 36 additions & 0 deletions tests/test_search_graph.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
import pytest

from scrapegraphai.graphs.search_graph import SearchGraph
from unittest.mock import MagicMock, patch

class TestSearchGraph:
"""Test class for SearchGraph"""

@pytest.mark.parametrize("urls", [
["https://example.com", "https://test.com"],
[],
["https://single-url.com"]
])
@patch('scrapegraphai.graphs.search_graph.BaseGraph')
@patch('scrapegraphai.graphs.abstract_graph.AbstractGraph._create_llm')
def test_get_considered_urls(self, mock_create_llm, mock_base_graph, urls):
"""
Test that get_considered_urls returns the correct list of URLs
considered during the search process.
"""
# Arrange
prompt = "Test prompt"
config = {"llm": {"model": "test-model"}}

# Mock the _create_llm method to return a MagicMock
mock_create_llm.return_value = MagicMock()

# Mock the execute method to set the final_state
mock_base_graph.return_value.execute.return_value = ({"urls": urls}, {})

# Act
search_graph = SearchGraph(prompt, config)
search_graph.run()

# Assert
assert search_graph.get_considered_urls() == urls

0 comments on commit 02629e2

Please sign in to comment.