@@ -153,16 +153,18 @@ def generate_fixtures(
153153 ),
154154 )
155155
156+ deps = get_deps (factory_class , model_name = model_name )
156157 if factory_name not in caller_locals .value :
157158 yield (
158159 factory_name ,
159160 create_fixture_with_related (
160161 name = factory_name ,
161162 function = functools .partial (factory_fixture , factory_class = factory_class ),
163+ fixtures = deps ,
164+ # TODO: related too?
162165 ),
163166 )
164167
165- deps = get_deps (factory_class , model_name = model_name )
166168 yield (
167169 model_name ,
168170 create_fixture_with_related (
@@ -345,6 +347,7 @@ def model_fixture(request: SubRequest, factory_name: str) -> Any:
345347 fixture_name = request .fixturename
346348 prefix = "" .join ((fixture_name , SEPARATOR ))
347349
350+ # TODO: This should be a dependency of the current fixture (i.e. use `usefixtures`)
348351 factory_class : FactoryType = request .getfixturevalue (factory_name )
349352
350353 # Create model fixture instance
@@ -478,7 +481,20 @@ def deferred_impl(request: SubRequest) -> Any:
478481
479482def factory_fixture (request : SubRequest , factory_class : F ) -> F :
480483 """Factory fixture implementation."""
481- return factory_class
484+ fixture_name = request .fixturename
485+ # TODO: Not good to check the fixture name, we should know what to expect (via args?)
486+ assert fixture_name .endswith ("_factory" )
487+ fixture_name = fixture_name [: - len ("_factory" )]
488+ prefix = "" .join ((fixture_name , SEPARATOR ))
489+
490+ # TODO: copy-paste from model_fixture; refactor
491+ kwargs = {}
492+ for key in factory_class ._meta .pre_declarations :
493+ argname = "" .join ((prefix , key ))
494+ if argname in request ._fixturedef .argnames :
495+ kwargs [key ] = evaluate (request , request .getfixturevalue (argname ))
496+
497+ return type (f"{ factory_class .__name__ } Fixture" , (factory_class ,), kwargs )
482498
483499
484500def attr_fixture (request : SubRequest , value : T ) -> T :
0 commit comments