test_prefer_os_environ.py
1 from pathlib import Path 2 3 import pytest 4 from clint.config import Config 5 from clint.index import SymbolIndex 6 from clint.linter import lint_file 7 from clint.rules.prefer_os_environ import PreferOsEnviron 8 9 10 @pytest.mark.parametrize( 11 "code", 12 [ 13 pytest.param('import os\n\nval = os.getenv("FOO")', id="os.getenv"), 14 pytest.param('import os\n\nval = os.getenv("FOO", "default")', id="os.getenv with default"), 15 pytest.param('import os\n\nos.putenv("FOO", "bar")', id="os.putenv"), 16 pytest.param('from os import getenv\n\nval = getenv("FOO")', id="from os import getenv"), 17 pytest.param('from os import putenv\n\nputenv("FOO", "bar")', id="from os import putenv"), 18 ], 19 ) 20 def test_violation(code: str, index: SymbolIndex) -> None: 21 config = Config(select={PreferOsEnviron.name}) 22 violations = lint_file(Path("file.py"), code, config, index) 23 assert len(violations) == 1 24 assert isinstance(violations[0].rule, PreferOsEnviron) 25 26 27 @pytest.mark.parametrize( 28 "code", 29 [ 30 pytest.param('import os\n\nval = os.environ.get("FOO")', id="os.environ.get"), 31 pytest.param('import os\n\nval = os.environ["FOO"]', id="os.environ subscript"), 32 pytest.param('import os\n\nos.environ["FOO"] = "bar"', id="os.environ set"), 33 ], 34 ) 35 def test_no_violation(code: str, index: SymbolIndex) -> None: 36 config = Config(select={PreferOsEnviron.name}) 37 violations = lint_file(Path("file.py"), code, config, index) 38 assert len(violations) == 0