/ dev / clint / tests / rules / test_prefer_os_environ.py
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