Skip to content

Commit d2c1ca1

Browse files
committed
tests: Add tests for trait and maybe
1 parent bb6508f commit d2c1ca1

File tree

2 files changed

+100
-0
lines changed

2 files changed

+100
-0
lines changed

tests/test_circular.py

+15
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,16 @@ class Meta:
3636
book = factory.RelatedFactory("tests.test_circular.BookFactory", "author")
3737

3838

39+
class AuthorBookTraitFactory(factory.Factory):
40+
class Meta:
41+
model = Author
42+
43+
name = "Charles Dickens"
44+
45+
class Params:
46+
with_book = factory.Trait(book=factory.RelatedFactory("tests.test_circular.BookFactory", "author"))
47+
48+
3949
class BookFactory(factory.Factory):
4050
class Meta:
4151
model = Book
@@ -46,8 +56,13 @@ class Meta:
4656

4757

4858
register(AuthorFactory)
59+
register(AuthorBookTraitFactory)
4960
register(BookFactory)
5061

5162

5263
def test_circular(author, factoryboy_request, request):
5364
assert author.books
65+
66+
67+
def test_circular_with_trait(author_book_trait):
68+
assert author_book_trait.name == "Charles Dickens"

tests/test_trait_maybe.py

+85
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
import datetime
2+
from typing import NamedTuple, Any
3+
4+
import factory
5+
from pytest_factoryboy import register
6+
7+
8+
class User(NamedTuple):
9+
is_active: bool
10+
deactivation_date: datetime.datetime
11+
12+
13+
class UserFactory(factory.Factory):
14+
class Meta:
15+
model = User
16+
17+
is_active = True
18+
deactivation_date = factory.Maybe(
19+
"is_active",
20+
yes_declaration=None,
21+
no_declaration=factory.fuzzy.FuzzyDateTime(
22+
datetime.datetime.now(tz=datetime.timezone.utc) - datetime.timedelta(days=10)
23+
),
24+
)
25+
26+
27+
class Package(NamedTuple):
28+
box: bool
29+
packed_by: Any
30+
31+
32+
class PackageFactory(factory.Factory):
33+
class Meta:
34+
model = Package
35+
36+
box = False
37+
packed_by = None
38+
39+
class Params:
40+
packed = factory.Trait(
41+
box=True,
42+
packed_by=factory.SubFactory(UserFactory),
43+
)
44+
45+
46+
class Order(NamedTuple):
47+
state: str
48+
shipped_on: datetime.datetime
49+
shipped_by: Any
50+
51+
52+
class OrderFactory(factory.Factory):
53+
class Meta:
54+
model = Order
55+
56+
state = "pending"
57+
shipped_on = None
58+
shipped_by = None
59+
60+
class Params:
61+
shipped = factory.Trait(
62+
state="shipped",
63+
shipped_on=datetime.date.today(),
64+
shipped_by=factory.RelatedFactory(UserFactory),
65+
)
66+
67+
68+
register(UserFactory)
69+
register(PackageFactory)
70+
register(OrderFactory)
71+
72+
73+
def test_maybe(user, factoryboy_request, request):
74+
# TODO: Factory.Maybe is completely ignored/mishandled
75+
assert user.deactivation_date is None
76+
77+
78+
def test_trait_subfactory(package, factoryboy_request, request):
79+
assert not package.box
80+
81+
82+
def test_trait_related_factory(order, factoryboy_request, request):
83+
# TODO: although defined as None, value of shipped_by is not passed during creation
84+
# which causes create() to fail missing an argument
85+
assert order.state == "pending"

0 commit comments

Comments
 (0)