@@ -172,16 +172,18 @@ def generate_fixtures(
172172 ),
173173 )
174174
175+ deps = get_deps (factory_class , model_name = model_name )
175176 if factory_name not in caller_locals .value :
176177 yield (
177178 factory_name ,
178179 create_fixture_with_related (
179180 name = factory_name ,
180181 function = functools .partial (factory_fixture , factory_class = factory_class ),
182+ fixtures = deps ,
183+ # TODO: related too?
181184 ),
182185 )
183186
184- deps = get_deps (factory_class , model_name = model_name )
185187 yield (
186188 model_name ,
187189 create_fixture_with_related (
@@ -366,6 +368,7 @@ def model_fixture(request: SubRequest, factory_name: str) -> object:
366368 fixture_name = request .fixturename
367369 prefix = "" .join ((fixture_name , SEPARATOR ))
368370
371+ # TODO: This should be a dependency of the current fixture (i.e. use `usefixtures`)
369372 factory_class : type [Factory [object ]] = request .getfixturevalue (factory_name )
370373
371374 # create Factory override for the model fixture
@@ -500,7 +503,20 @@ def deferred_impl(request: SubRequest) -> object:
500503
501504def factory_fixture (request : SubRequest , factory_class : type [Factory [T ]]) -> type [Factory [T ]]:
502505 """Factory fixture implementation."""
503- return factory_class
506+ fixture_name = request .fixturename
507+ # TODO: Not good to check the fixture name, we should know what to expect (via args?)
508+ assert fixture_name .endswith ("_factory" )
509+ fixture_name = fixture_name [: - len ("_factory" )]
510+ prefix = "" .join ((fixture_name , SEPARATOR ))
511+
512+ # TODO: copy-paste from model_fixture; refactor
513+ kwargs = {}
514+ for key in factory_class ._meta .pre_declarations :
515+ argname = "" .join ((prefix , key ))
516+ if argname in request ._fixturedef .argnames :
517+ kwargs [key ] = evaluate (request , request .getfixturevalue (argname ))
518+
519+ return type (f"{ factory_class .__name__ } Fixture" , (factory_class ,), kwargs )
504520
505521
506522def attr_fixture (request : SubRequest , value : T ) -> T :
0 commit comments