diff --git a/polyfactory/factories/base.py b/polyfactory/factories/base.py index 54460325..196bccc4 100644 --- a/polyfactory/factories/base.py +++ b/polyfactory/factories/base.py @@ -507,7 +507,7 @@ def seed_random(cls, seed: int) -> None: :returns: 'None' """ - cls.__random__ = Random(seed) + cls.__random__.seed(seed) cls.__faker__.seed_instance(seed) @classmethod diff --git a/tests/test_random_seed.py b/tests/test_random_seed.py index f8996d4c..1ab691a3 100644 --- a/tests/test_random_seed.py +++ b/tests/test_random_seed.py @@ -3,6 +3,7 @@ from pydantic import VERSION, BaseModel, Field +from polyfactory.fields import Use from polyfactory.factories.pydantic_factory import ModelFactory @@ -26,6 +27,24 @@ class MyModelFactory(ModelFactory): assert ins.special_id == "ID-515.943" +def test_deterministic_use_function_seeding(): + class MyModel(BaseModel): + choice_value: str + + choices = ["option1", "option2", "option3", "option4", "option5"] + + class MyModelFactory(ModelFactory): + __model__ = MyModel + choice_value = Use(ModelFactory.__random__.choice, choices) + + ModelFactory.seed_random(12345) + first_batch = [MyModelFactory.build().choice_value for _ in range(10)] + + ModelFactory.seed_random(12345) # Seed random again with the same value + second_batch = [MyModelFactory.build().choice_value for _ in range(10)] + + assert first_batch == second_batch + def test_deterministic_optionals_seeding() -> None: class ModelWithOptionalValues(BaseModel): name: Optional[str]