Skip to content

Commit

Permalink
Merge pull request #7 from allrod5/bugfix/regression/#5
Browse files Browse the repository at this point in the history
Fix Regression of #5
  • Loading branch information
Rodrigo Martins de Oliveira committed Jun 10, 2019
2 parents e991979 + fee50d5 commit 900a9af
Show file tree
Hide file tree
Showing 3 changed files with 117 additions and 17 deletions.
8 changes: 4 additions & 4 deletions parameters_validation/validate_parameters_decorator.py
Original file line number Diff line number Diff line change
Expand Up @@ -37,14 +37,14 @@ def get_parameter_value_dict(args, kwargs):
for arg_value, parameter in zip(args, specs.args):
parameters[parameter] = arg_value
if specs.defaults:
for default_parameter, default_value in zip(specs.args, specs.defaults):
for default_parameter, default_value in zip(
specs.args[len(specs.args)-len(specs.defaults):], specs.defaults
):
if default_parameter in parameters:
pass
parameters[default_parameter] = default_value
if specs.kwonlydefaults:
for default_parameter, default_value in zip(
specs.kwonlyargs, specs.kwonlydefaults
):
for default_parameter, default_value in specs.kwonlydefaults.items():
if default_parameter in parameters:
pass
parameters[default_parameter] = default_value
Expand Down
2 changes: 1 addition & 1 deletion setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@

setup(
name='parameters-validation',
version='1.1.2',
version='1.1.3',
packages=['parameters_validation'],
url='https://github.com/allrod5/parameters-validation',
license='MIT',
Expand Down
124 changes: 112 additions & 12 deletions tests/bugfixes/test_strongly_typed_on_default_parameters.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,20 +7,120 @@
`strongly_typed` is used for a parameter with default value
and there is a call to this function that uses the default value
This bug was fixed in version 1.1.2
This bug was fixed in version 1.1.3
"""
from parameters_validation import non_null, validate_parameters, strongly_typed
from parameters_validation import validate_parameters, strongly_typed


def test_strongly_typed_on_default_parameters():
# given
default_value = "default value"
@validate_parameters
def guinea_pig(a: strongly_typed(str) = default_value):
return a
class TestStronglyTypedOnDefaultParameters:
def test_function_with_just_one_default_arg(self):
# given
default_value = "default value"
@validate_parameters
def just_one_default_arg(a: strongly_typed(str) = default_value):
return a

# when
return_value = guinea_pig()
# when
return_value = just_one_default_arg()

# then
assert return_value == default_value
# then
assert return_value == default_value

def test_function_with_just_one_default_kwonly_arg(self):
# given
default_value = "default value"
@validate_parameters
def just_one_default_kwonly_arg(*, a: strongly_typed(str) = default_value):
return a

# when
return_value = just_one_default_kwonly_arg()

# then
assert return_value == default_value

def test_function_with_default_arg_and_kwonly_arg(self):
# given
default_value = "default value"
@validate_parameters
def default_arg_and_kwonly_arg(
a: strongly_typed(str) = default_value,
b: strongly_typed(str) = default_value,
):
return a, b

# when
return_value = default_arg_and_kwonly_arg()

# then
assert return_value == (default_value, default_value)

def test_function_with_mixed_default_and_not_default_arg_and_kwonly_arg(self):
# given
default_value = "default value"
@validate_parameters
def mixed_default_and_not_default_arg_and_kwonly_arg(
a: strongly_typed(str),
b: strongly_typed(str) = default_value,
*,
c: strongly_typed(str),
d: strongly_typed(str) = default_value
):
return a, b, c, d

# when
return_value = mixed_default_and_not_default_arg_and_kwonly_arg(
default_value, c=default_value
)

# then
assert return_value == (
default_value, default_value, default_value, default_value
)

def test_function_with_mixed_default_and_not_default_arg_and_kwonly_arg_2(self):
# given
default_value = "default value"
@validate_parameters
def mixed_default_and_not_default_arg_and_kwonly_arg(
a: strongly_typed(str),
b: strongly_typed(str) = default_value,
*,
c: strongly_typed(str),
d: strongly_typed(str) = default_value
):
return a, b, c, d

# when
return_value = mixed_default_and_not_default_arg_and_kwonly_arg(
a=default_value, c=default_value
)

# then
assert return_value == (
default_value, default_value, default_value, default_value
)

def test_function_with_mixed_default_and_not_default_arg_and_kwonly_arg_3(self):
# given
default_value = "default value"
custom_value = "custom value"
@validate_parameters
def mixed_default_and_not_default_arg_and_kwonly_arg(
a: strongly_typed(str),
b: strongly_typed(str) = default_value,
*,
c: strongly_typed(str),
d: strongly_typed(str) = default_value
):
return a, b, c, d

# when
return_value = mixed_default_and_not_default_arg_and_kwonly_arg(
custom_value, custom_value, c=custom_value, d=custom_value
)

# then
assert return_value == (
custom_value, custom_value, custom_value, custom_value
)

0 comments on commit 900a9af

Please sign in to comment.