Skip to content

Commit b0103d2

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

File tree

2 files changed

+96
-0
lines changed

2 files changed

+96
-0
lines changed

tests/test_circular.py

+16
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,17 @@ 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(
47+
book = factory.RelatedFactory("tests.test_circular.BookFactory", "author"))
48+
49+
3950
class BookFactory(factory.Factory):
4051
class Meta:
4152
model = Book
@@ -46,8 +57,13 @@ class Meta:
4657

4758

4859
register(AuthorFactory)
60+
register(AuthorBookTraitFactory)
4961
register(BookFactory)
5062

5163

5264
def test_circular(author, factoryboy_request, request):
5365
assert author.books
66+
67+
68+
def test_circular_with_trait(author_book_trait):
69+
assert author_book_trait.name == "Charles Dickens"

tests/test_trait_maybe.py

+80
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
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+
class Package(NamedTuple):
27+
box: bool
28+
packed_by: Any
29+
30+
31+
class PackageFactory(factory.Factory):
32+
class Meta:
33+
model = Package
34+
35+
box = False
36+
packed_by = None
37+
38+
class Params:
39+
packed = factory.Trait(
40+
box=True,
41+
packed_by=factory.SubFactory(UserFactory),
42+
)
43+
44+
45+
class Order(NamedTuple):
46+
state: str
47+
shipped_on: datetime.datetime
48+
shipped_by: Any
49+
50+
51+
class OrderFactory(factory.Factory):
52+
class Meta:
53+
model = Order
54+
55+
state = 'pending'
56+
shipped_on = None
57+
shipped_by = None
58+
59+
class Params:
60+
shipped = factory.Trait(
61+
state='shipped',
62+
shipped_on=datetime.date.today(),
63+
shipped_by=factory.RelatedFactory(UserFactory),
64+
)
65+
66+
register(UserFactory)
67+
register(PackageFactory)
68+
register(OrderFactory)
69+
70+
def test_maybe(user, factoryboy_request, request):
71+
# TODO: Factory.Maybe is completely ignored/mishandled
72+
assert user.deactivation_date is None
73+
74+
def test_trait_subfactory(package, factoryboy_request, request):
75+
assert not package.box
76+
77+
def test_trait_related_factory(order, factoryboy_request, request):
78+
# TODO: although defined as None, value of shipped_by is not passed during creation
79+
# which causes create() to fail missing an argument
80+
assert order.state == 'pending'

0 commit comments

Comments
 (0)