Skip to content

Commit

Permalink
Fix Faker.random_number intermittent exceptions #1074 (#1089)
Browse files Browse the repository at this point in the history
* ensure max number of digits generated in random_number is > -1 when param is not passed and > 0 when fix_len is True

* add additional tests for random_number functionality
  • Loading branch information
Jengah authored and fcurella committed Jan 14, 2020
1 parent 6c4fde4 commit 24401dc
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 3 deletions.
11 changes: 8 additions & 3 deletions faker/providers/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -151,10 +151,15 @@ def random_number(self, digits=None, fix_len=False):
fixed length number
"""
if digits is None:
digits = self.random_digit()
digits = self.random_digit_not_null()
if digits < 0:
raise ValueError("The digit parameter must be greater than or equal to 0.")
if fix_len:
return self.generator.random.randint(
pow(10, digits - 1), pow(10, digits) - 1)
if digits > 0:
return self.generator.random.randint(
pow(10, digits - 1), pow(10, digits) - 1)
else:
raise ValueError("A number of fixed length cannot have less than 1 digit in it.")
else:
return self.generator.random.randint(0, pow(10, digits) - 1)

Expand Down
8 changes: 8 additions & 0 deletions tests/test_factory.py
Original file line number Diff line number Diff line change
Expand Up @@ -912,6 +912,14 @@ def test_random_number(self):
number = provider.random_number(10, True)
assert len(str(number)) == 10

# Digits parameter < 0
with self.assertRaises(ValueError):
number = provider.random_number(-1, True)

# Digits parameter < 1 with fix_len=True
with self.assertRaises(ValueError):
number = provider.random_number(0, True)

def test_instance_seed_chain(self):
factory = Factory.create()

Expand Down

0 comments on commit 24401dc

Please sign in to comment.