Repository navigation
Expand file tree
/
Copy pathpolifactory use
More file actions
103 lines (70 loc) · 2.11 KB
/
Copy pathpolifactory use
File metadata and controls
103 lines (70 loc) · 2.11 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
from dataclasses import dataclass
from datetime import date, datetime
from enum import Enum
from typing import Any, Dict, List, Union
from uuid import UUID
from polyfactory import Use
from polyfactory.factories import DataclassFactory
class Species(str, Enum):
CAT = "Cat"
DOG = "Dog"
@dataclass
class Pet:
name: str
species: Species
sound: str
@dataclass
class Person:
id: UUID
name: str
hobbies: List[str]
age: Union[float, int]
birthday: Union[datetime, date]
pets: List[Pet]
assets: List[Dict[str, Dict[str, Any]]]
class PetFactory(DataclassFactory[Pet]):
name = lambda: DataclassFactory.__random__.choice(["Ralph", "Roxy"])
species = lambda: DataclassFactory.__random__.choice(list(Species))
class PersonFactory(DataclassFactory[Person]):
pets = Use(PetFactory.batch, size=2)
def test_pet_choices() -> None:
person_instance = PersonFactory.build()
assert len(person_instance.pets) == 2
assert all(pet.name in ["Ralph", "Roxy"] for pet in person_instance.pets)
from dataclasses import dataclass
from datetime import date, datetime
from enum import Enum
from typing import Any, Dict, List, Union
from uuid import UUID
from polyfactory import Use
from polyfactory.factories import DataclassFactory
class Species(str, Enum):
CAT = "Cat"
DOG = "Dog"
@dataclass
class Pet:
name: str
species: Species
sound: str
@dataclass
class Person:
id: UUID
name: str
hobbies: List[str]
age: Union[float, int]
birthday: Union[datetime, date]
pets: List[Pet]
assets: List[Dict[str, Dict[str, Any]]]
class PetFactory(DataclassFactory[Pet]):
@classmethod
def name(cls) -> str:
return cls.__random__.choice(["Ralph", "Roxy"])
@classmethod
def species(cls) -> str:
return cls.__random__.choice(list(Species))
class PersonFactory(DataclassFactory[Person]):
pets = Use(PetFactory.batch, size=2)
def test_pet_choices() -> None:
person_instance = PersonFactory.build()
assert len(person_instance.pets) == 2
assert all(pet.name in ["Ralph", "Roxy"] for pet in person_instance.pets)