From cd6e8479acf0896d87d16654b26e1365aac087c4 Mon Sep 17 00:00:00 2001 From: bdjellabaldebaran <144217889+bdjellabaldebaran@users.noreply.github.com> Date: Wed, 4 Sep 2024 16:35:59 +0200 Subject: [PATCH] Fix issue where Faker does not properly convert min/max value to decimal (#2101) --- faker/providers/python/__init__.py | 4 ++-- tests/providers/test_python.py | 10 ++++++++++ 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/faker/providers/python/__init__.py b/faker/providers/python/__init__.py index d601c8d4eb..374a5793ed 100644 --- a/faker/providers/python/__init__.py +++ b/faker/providers/python/__init__.py @@ -352,9 +352,9 @@ def pydecimal( # Because the random result might have the same number of decimals as max_value the random number # might be above max_value or below min_value if max_value is not None and result > max_value: - result = Decimal(max_value) + result = Decimal(str(max_value)) if min_value is not None and result < min_value: - result = Decimal(min_value) + result = Decimal(str(min_value)) return result diff --git a/tests/providers/test_python.py b/tests/providers/test_python.py index 4b89ebc377..5af45bf245 100644 --- a/tests/providers/test_python.py +++ b/tests/providers/test_python.py @@ -506,6 +506,16 @@ def test_min_value_10_pow_1000_return_greater_number(self): result = self.fake.pydecimal(min_value=10**1000) self.assertGreater(result, 10**1000) + def test_min_value_float_returns_correct_digit_number(self): + Faker.seed("6") + result = self.fake.pydecimal(left_digits=1, right_digits=1, min_value=0.2, max_value=0.3) + self.assertEqual(decimal.Decimal("0.2"), result) + + def test_max_value_float_returns_correct_digit_number(self): + Faker.seed("3") + result = self.fake.pydecimal(left_digits=1, right_digits=1, min_value=0.2, max_value=0.3) + self.assertEqual(decimal.Decimal("0.3"), result) + class TestPystr(unittest.TestCase): def setUp(self):