1
1
import pytest
2
2
3
- from pydantic import BaseModel
3
+ from pydantic import BaseModel , Field
4
4
from scrapegraphai .graphs .json_scraper_graph import JSONScraperGraph
5
5
from unittest .mock import Mock , patch
6
6
@@ -133,4 +133,60 @@ def test_json_scraper_graph_no_answer_found(self, mock_create_llm, mock_generate
133
133
mock_execute .assert_called_once_with ({"user_prompt" : "Query that produces no answer" , "json" : "path/to/empty/file.json" })
134
134
mock_fetch_node .assert_called_once ()
135
135
mock_generate_answer_node .assert_called_once ()
136
+ mock_create_llm .assert_called_once_with ({"model" : "test-model" , "temperature" : 0 })
137
+
138
+ @pytest .fixture
139
+ def mock_llm_model (self ):
140
+ return Mock ()
141
+
142
+ @pytest .fixture
143
+ def mock_embedder_model (self ):
144
+ return Mock ()
145
+
146
+ @patch ('scrapegraphai.graphs.json_scraper_graph.FetchNode' )
147
+ @patch ('scrapegraphai.graphs.json_scraper_graph.GenerateAnswerNode' )
148
+ @patch .object (JSONScraperGraph , '_create_llm' )
149
+ 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 ):
150
+ """
151
+ Test JSONScraperGraph with a custom schema.
152
+ This test checks if the graph correctly handles a custom schema input
153
+ and passes it to the GenerateAnswerNode.
154
+ """
155
+ # Define a custom schema
156
+ class CustomSchema (BaseModel ):
157
+ name : str = Field (..., description = "Name of the attraction" )
158
+ description : str = Field (..., description = "Description of the attraction" )
159
+
160
+ # Mock the _create_llm method to return a mock LLM model
161
+ mock_create_llm .return_value = mock_llm_model
162
+
163
+ # Mock the execute method of BaseGraph
164
+ with patch ('scrapegraphai.graphs.json_scraper_graph.BaseGraph.execute' ) as mock_execute :
165
+ mock_execute .return_value = ({"answer" : "Mocked answer with custom schema" }, {})
166
+
167
+ # Create a JSONScraperGraph instance with a custom schema
168
+ graph = JSONScraperGraph (
169
+ prompt = "List attractions in Chioggia" ,
170
+ source = "path/to/chioggia.json" ,
171
+ config = {"llm" : {"model" : "test-model" , "temperature" : 0 }},
172
+ schema = CustomSchema
173
+ )
174
+
175
+ # Set mocked embedder model
176
+ graph .embedder_model = mock_embedder_model
177
+
178
+ # Run the graph
179
+ result = graph .run ()
180
+
181
+ # Assertions
182
+ assert result == "Mocked answer with custom schema"
183
+ assert graph .input_key == "json"
184
+ mock_execute .assert_called_once_with ({"user_prompt" : "List attractions in Chioggia" , "json" : "path/to/chioggia.json" })
185
+ mock_fetch_node .assert_called_once ()
186
+ mock_generate_answer_node .assert_called_once ()
187
+
188
+ # Check if the custom schema was passed to GenerateAnswerNode
189
+ generate_answer_node_call = mock_generate_answer_node .call_args [1 ]
190
+ assert generate_answer_node_call ['node_config' ]['schema' ] == CustomSchema
191
+
136
192
mock_create_llm .assert_called_once_with ({"model" : "test-model" , "temperature" : 0 })
0 commit comments