Skip to content

Commit 0d120fb

Browse files
committed
Tweaked the EmailFactory to return an email address not longer than the Email.address field.
- Legacy-Id: 13738
1 parent db96292 commit 0d120fb

1 file changed

Lines changed: 18 additions & 2 deletions

File tree

ietf/person/factories.py

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -94,14 +94,30 @@ def _create(cls, model_class, *args, **kwargs):
9494

9595
name = factory.Faker('name')
9696

97+
def fake_email_address(n):
98+
address_field = [ f for f in Email._meta.fields if f.name == 'address'][0]
99+
count = 0
100+
while True:
101+
address = '%s.%s_%d@%s' % (
102+
slugify(unidecode(fake.first_name())),
103+
slugify(unidecode(fake.last_name())),
104+
n, fake.domain_name()
105+
)
106+
count += 1
107+
if len(address) <= address_field.max_length:
108+
break
109+
if count >= 10:
110+
raise RuntimeError("Failed generating a fake email address to fit in Email.address(max_length=%s)"%address_field.max_lenth)
111+
return address
112+
97113
class EmailFactory(factory.DjangoModelFactory):
98114
class Meta:
99115
model = Email
100116
django_get_or_create = ('address',)
101117

102-
address = factory.Sequence(lambda n:'%s.%s_%d@%s' % ( slugify(unidecode(fake.first_name())),
103-
slugify(unidecode(fake.last_name())), n, fake.domain_name()))
118+
address = factory.Sequence(fake_email_address)
104119
person = factory.SubFactory(PersonFactory)
105120

106121
active = True
107122
primary = False
123+

0 commit comments

Comments
 (0)