From c9d71af1efc829e4de234ed06054497c3bdaacc9 Mon Sep 17 00:00:00 2001 From: "codebeaver-ai[bot]" <192081515+codebeaver-ai[bot]@users.noreply.github.com> Date: Wed, 29 Jan 2025 10:25:51 +0000 Subject: [PATCH] test: Update coverage improvement test for tests/test_json_scraper_graph.py --- tests/test_json_scraper_graph.py | 58 +++++++++++++++++++++++++++++++- 1 file changed, 57 insertions(+), 1 deletion(-) diff --git a/tests/test_json_scraper_graph.py b/tests/test_json_scraper_graph.py index 1572650e..2abcaa85 100644 --- a/tests/test_json_scraper_graph.py +++ b/tests/test_json_scraper_graph.py @@ -1,6 +1,6 @@ import pytest -from pydantic import BaseModel +from pydantic import BaseModel, Field from scrapegraphai.graphs.json_scraper_graph import JSONScraperGraph from unittest.mock import Mock, patch @@ -133,4 +133,60 @@ class TestJSONScraperGraph: mock_execute.assert_called_once_with({"user_prompt": "Query that produces no answer", "json": "path/to/empty/file.json"}) 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}) + + @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_custom_schema(self, mock_create_llm, mock_generate_answer_node, mock_fetch_node, mock_llm_model, mock_embedder_model): + """ + Test JSONScraperGraph with a custom schema. + This test checks if the graph correctly handles a custom schema input + and passes it to the GenerateAnswerNode. + """ + # Define a custom schema + class CustomSchema(BaseModel): + name: str = Field(..., description="Name of the attraction") + description: str = Field(..., description="Description of the attraction") + + # 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 with custom schema"}, {}) + + # Create a JSONScraperGraph instance with a custom schema + graph = JSONScraperGraph( + prompt="List attractions in Chioggia", + source="path/to/chioggia.json", + config={"llm": {"model": "test-model", "temperature": 0}}, + schema=CustomSchema + ) + + # Set mocked embedder model + graph.embedder_model = mock_embedder_model + + # Run the graph + result = graph.run() + + # Assertions + assert result == "Mocked answer with custom schema" + assert graph.input_key == "json" + mock_execute.assert_called_once_with({"user_prompt": "List attractions in Chioggia", "json": "path/to/chioggia.json"}) + mock_fetch_node.assert_called_once() + mock_generate_answer_node.assert_called_once() + + # Check if the custom schema was passed to GenerateAnswerNode + generate_answer_node_call = mock_generate_answer_node.call_args[1] + assert generate_answer_node_call['node_config']['schema'] == CustomSchema + mock_create_llm.assert_called_once_with({"model": "test-model", "temperature": 0}) \ No newline at end of file