3131from types import SimpleNamespace
3232
3333import pytest
34- from common .shared_utils import DummyDataModel
34+
35+ # from common.shared_utils import DummyDataModel
36+ from conftest import DummyDataModel
3537from pydantic import BaseModel
3638
3739from nodescraper .cli import cli
38- from nodescraper .cli .helper import build_config , find_datamodel_and_result
40+ from nodescraper .cli .helper import (
41+ build_config ,
42+ extract_collector_args_from_model ,
43+ find_datamodel_and_result ,
44+ )
3945from nodescraper .configregistry import ConfigRegistry
4046from nodescraper .enums import ExecutionStatus , SystemInteractionLevel
4147from nodescraper .models import PluginConfig , TaskResult
@@ -50,7 +56,7 @@ def test_generate_reference_config(plugin_registry):
5056 source = "TestPluginA" ,
5157 message = "Plugin tasks completed successfully" ,
5258 result_data = DataPluginResult (
53- system_data = DummyDataModel (some_version = "17" ),
59+ system_data = DummyDataModel (foo = "17" ),
5460 collection_result = TaskResult (
5561 status = ExecutionStatus .OK ,
5662 message = "BIOS: 17" ,
@@ -176,3 +182,59 @@ def build_from_model(cls, datamodel):
176182 assert isinstance (cfg , PluginConfig )
177183 assert set (cfg .plugins ) == {parent }
178184 assert cfg .plugins [parent ]["analysis_args" ] == {}
185+
186+
187+ def test_no_collector_args_defined (caplog ):
188+ class NoArgsPlugin :
189+ pass
190+
191+ caplog .set_level (logging .WARNING )
192+ res = extract_collector_args_from_model (
193+ NoArgsPlugin , DummyDataModel (foo = 1 ), logging .getLogger ()
194+ )
195+ assert res is None
196+ assert "does not support reference config creation" in caplog .text
197+
198+
199+ def test_collector_args_none (caplog ):
200+ class NoneArgsPlugin :
201+ COLLECTOR_ARGS = None
202+
203+ caplog .set_level (logging .WARNING )
204+ res = extract_collector_args_from_model (
205+ NoneArgsPlugin , DummyDataModel (foo = 1 ), logging .getLogger ()
206+ )
207+ assert res is None
208+ assert "does not support reference config creation" in caplog .text
209+
210+
211+ def test_successful_build_from_model ():
212+ class MyArgs (BaseModel ):
213+ a : int
214+
215+ @classmethod
216+ def build_from_model (cls , dm ):
217+ return cls (a = dm .foo )
218+
219+ class GoodPlugin :
220+ COLLECTOR_ARGS = MyArgs
221+
222+ dm = DummyDataModel (foo = 42 )
223+ args = extract_collector_args_from_model (GoodPlugin , dm , logging .getLogger ())
224+ assert isinstance (args , MyArgs )
225+ assert args .a == 42
226+
227+
228+ def test_build_from_model_not_implemented (caplog ):
229+ class BadArgs (BaseModel ):
230+ @classmethod
231+ def build_from_model (cls , dm ):
232+ raise NotImplementedError ("not implemented" )
233+
234+ class BadPlugin :
235+ COLLECTOR_ARGS = BadArgs
236+
237+ caplog .set_level (logging .INFO )
238+ res = extract_collector_args_from_model (BadPlugin , DummyDataModel (foo = 7 ), logging .getLogger ())
239+ assert res is None
240+ assert "not implemented" in caplog .text
0 commit comments