Skip to content

test_auto_envvar_parsing fails with click 8.2.1 #1264

@danigm

Description

@danigm

Some parametrized tests are failing with the latest click release 8.2.1, possibly related to this bug: pallets/click#2863 (comment)

FAILED tests/test_envvar.py::test_auto_envvar_parsing[command|working_envvar={'Magic': 'False'}|expected_flag=False] - AssertionError: assert 'Flag value: True\n' == 'Flag value: False\n'
FAILED tests/test_envvar.py::test_auto_envvar_parsing[command|working_envvar={'Magic': 'false'}|expected_flag=False] - AssertionError: assert 'Flag value: True\n' == 'Flag value: False\n'
FAILED tests/test_envvar.py::test_auto_envvar_parsing[command|working_envvar={'Magic': 'fAlsE'}|expected_flag=False] - AssertionError: assert 'Flag value: True\n' == 'Flag value: False\n'
FAILED tests/test_envvar.py::test_auto_envvar_parsing[command|working_envvar={'Magic': '0'}|expected_flag=False] - AssertionError: assert 'Flag value: True\n' == 'Flag value: False\n'
FAILED tests/test_envvar.py::test_auto_envvar_parsing[command|working_envvar={'sUper': 'False'}|expected_flag=False] - AssertionError: assert 'Flag value: True\n' == 'Flag value: False\n'
FAILED tests/test_envvar.py::test_auto_envvar_parsing[command|working_envvar={'sUper': 'false'}|expected_flag=False] - AssertionError: assert 'Flag value: True\n' == 'Flag value: False\n'
FAILED tests/test_envvar.py::test_auto_envvar_parsing[command|working_envvar={'sUper': 'fAlsE'}|expected_flag=False] - AssertionError: assert 'Flag value: True\n' == 'Flag value: False\n'
FAILED tests/test_envvar.py::test_auto_envvar_parsing[command|working_envvar={'sUper': '0'}|expected_flag=False] - AssertionError: assert 'Flag value: True\n' == 'Flag value: False\n'
FAILED tests/test_envvar.py::test_auto_envvar_parsing[extra_command|working_envvar={'Magic': 'False'}|expected_flag=False] - AssertionError: assert 'Flag value: True\n' == 'Flag value: False\n'
FAILED tests/test_envvar.py::test_auto_envvar_parsing[extra_command|working_envvar={'Magic': 'false'}|expected_flag=False] - AssertionError: assert 'Flag value: True\n' == 'Flag value: False\n'
FAILED tests/test_envvar.py::test_auto_envvar_parsing[extra_command|working_envvar={'Magic': 'fAlsE'}|expected_flag=False] - AssertionError: assert 'Flag value: True\n' == 'Flag value: False\n'
FAILED tests/test_envvar.py::test_auto_envvar_parsing[extra_command|working_envvar={'Magic': '0'}|expected_flag=False] - AssertionError: assert 'Flag value: True\n' == 'Flag value: False\n'
FAILED tests/test_envvar.py::test_auto_envvar_parsing[extra_command|working_envvar={'sUper': 'False'}|expected_flag=False] - AssertionError: assert 'Flag value: True\n' == 'Flag value: False\n'
FAILED tests/test_envvar.py::test_auto_envvar_parsing[extra_command|working_envvar={'sUper': 'false'}|expected_flag=False] - AssertionError: assert 'Flag value: True\n' == 'Flag value: False\n'
FAILED tests/test_envvar.py::test_auto_envvar_parsing[extra_command|working_envvar={'sUper': 'fAlsE'}|expected_flag=False] - AssertionError: assert 'Flag value: True\n' == 'Flag value: False\n'
FAILED tests/test_envvar.py::test_auto_envvar_parsing[extra_command|working_envvar={'sUper': '0'}|expected_flag=False] - AssertionError: assert 'Flag value: True\n' == 'Flag value: False\n'
FAILED tests/test_envvar.py::test_auto_envvar_parsing[extra_command|working_envvar={'yo_FLAG': 'False'}|expected_flag=False] - AssertionError: assert 'Flag value: True\n' == 'Flag value: False\n'
FAILED tests/test_envvar.py::test_auto_envvar_parsing[extra_command|working_envvar={'yo_FLAG': 'false'}|expected_flag=False] - AssertionError: assert 'Flag value: True\n' == 'Flag value: False\n'
FAILED tests/test_envvar.py::test_auto_envvar_parsing[extra_command|working_envvar={'yo_FLAG': 'fAlsE'}|expected_flag=False] - AssertionError: assert 'Flag value: True\n' == 'Flag value: False\n'
FAILED tests/test_envvar.py::test_auto_envvar_parsing[extra_command|working_envvar={'yo_FLAG': '0'}|expected_flag=False] - AssertionError: assert 'Flag value: True\n' == 'Flag value: False\n'

One of them:

_______________________________________________________________________________________________ test_auto_envvar_parsing[extra_command|working_envvar={'yo_FLAG': '0'}|expected_flag=False] _______________________________________________________________________________________________

invoke = <bound method ExtraCliRunner.invoke of <click_extra.testing.ExtraCliRunner object at 0x7fa88e511940>>, cmd_decorator = <function decorator_factory.<locals>.decorator at 0x7fa88e8b5440>, envvars = {'yo_FLAG': '0'}, expected_flag = False

    @pytest.mark.parametrize("cmd_decorator, envvars, expected_flag", envvars_test_cases())
    def test_auto_envvar_parsing(invoke, cmd_decorator, envvars, expected_flag):
        """This test highlights the way Click recognize and parse envvars.
    
        It shows that the default behavior is not ideal, and covers how ``extra_command``
        improves the situation by normalizing the envvar name.
        """
    
        @cmd_decorator(context_settings={"auto_envvar_prefix": "yo"})
        # XXX Explicitly pass bool type to fix 8.2.0 regression:
        # https://github.com/pallets/click/discussions/2863#discussioncomment-12675496
        @option("--flag/--no-flag", type=bool, envvar=["Magic", "sUper"])
        def my_cli(flag):
            echo(f"Flag value: {flag}")
    
        registered_envvars = ["Magic", "sUper"]
        # Specific behavior of @extra_command that is not present in vanilla Click.
        if cmd_decorator == extra_command:
            # @extra_command forces registration of auto-generated envvar.
            registered_envvars = [*registered_envvars, "yo_FLAG"]
            # On Windows, envvars are normalizes to uppercase.
            if os.name == "nt":
                registered_envvars = [envvar.upper() for envvar in registered_envvars]
            # @extra_command parameters returns envvar property as tuple, while vanilla Click
            # returns a list.
            registered_envvars = tuple(registered_envvars)
        assert my_cli.params[0].envvar == registered_envvars
    
        result = invoke(my_cli, env=envvars)
        assert result.exit_code == 0
        assert not result.stderr
>       assert result.stdout == f"Flag value: {expected_flag}\n"
E       AssertionError: assert 'Flag value: True\n' == 'Flag value: False\n'
E         
E         - Flag value: False
E         ?             ^^^^
E         + Flag value: True
E         ?             ^^^

/home/danigm/Projects/suse/tmp/click-extra/tests/test_envvar.py:237: AssertionError

Metadata

Metadata

Assignees

No one assigned

    Labels

    🐛 bugSomething isn't working, or a fix is proposed

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions