File: test_pgcompleter.py

package info (click to toggle)
pgcli 4.3.0-3
  • links: PTS, VCS
  • area: main
  • in suites: forky
  • size: 1,476 kB
  • sloc: python: 10,390; sh: 67; makefile: 8
file content (100 lines) | stat: -rw-r--r-- 2,867 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
import json
import pytest
from pgcli import pgcompleter
import tempfile


def test_load_alias_map_file_missing_file():
    with pytest.raises(
        pgcompleter.InvalidMapFile,
        match=r"Cannot read alias_map_file - /path/to/non-existent/file.json does not exist$",
    ):
        pgcompleter.load_alias_map_file("/path/to/non-existent/file.json")


def test_load_alias_map_file_invalid_json(tmp_path):
    fpath = tmp_path / "foo.json"
    fpath.write_text("this is not valid json")
    with pytest.raises(pgcompleter.InvalidMapFile, match=r".*is not valid json$"):
        pgcompleter.load_alias_map_file(str(fpath))


@pytest.mark.parametrize(
    "table_name, alias",
    [
        ("SomE_Table", "SET"),
        ("SOmeTabLe", "SOTL"),
        ("someTable", "T"),
    ],
)
def test_generate_alias_uses_upper_case_letters_from_name(table_name, alias):
    assert pgcompleter.generate_alias(table_name) == alias


@pytest.mark.parametrize(
    "table_name, alias",
    [
        ("some_tab_le", "stl"),
        ("s_ome_table", "sot"),
        ("sometable", "s"),
    ],
)
def test_generate_alias_uses_first_char_and_every_preceded_by_underscore(
    table_name, alias
):
    assert pgcompleter.generate_alias(table_name) == alias


@pytest.mark.parametrize(
    "table_name, alias_map, alias",
    [
        ("some_table", {"some_table": "my_alias"}, "my_alias"),
        pytest.param(
            "some_other_table", {"some_table": "my_alias"}, "sot", id="no_match_in_map"
        ),
    ],
)
def test_generate_alias_can_use_alias_map(table_name, alias_map, alias):
    assert pgcompleter.generate_alias(table_name, alias_map) == alias


@pytest.mark.parametrize(
    "table_name, alias_map, alias",
    [
        ("some_table", {"some_table": "my_alias"}, "my_alias"),
    ],
)
def test_pgcompleter_alias_uses_configured_alias_map(table_name, alias_map, alias):
    with tempfile.NamedTemporaryFile(mode="w", suffix=".json") as alias_map_file:
        alias_map_file.write(json.dumps(alias_map))
        alias_map_file.seek(0)
        completer = pgcompleter.PGCompleter(
            settings={
                "generate_aliases": True,
                "alias_map_file": alias_map_file.name,
            }
        )
        assert completer.alias(table_name, []) == alias


@pytest.mark.parametrize(
    "table_name, alias_map, alias",
    [
        ("SomeTable", {"SomeTable": "my_alias"}, "my_alias"),
    ],
)
def test_generate_alias_prefers_alias_over_upper_case_name(
    table_name, alias_map, alias
):
    assert pgcompleter.generate_alias(table_name, alias_map) == alias


@pytest.mark.parametrize(
    "table_name, alias",
    [
        ("Some_tablE", "SE"),
        ("SomeTab_le", "ST"),
    ],
)
def test_generate_alias_prefers_upper_case_name_over_underscore_name(table_name, alias):
    assert pgcompleter.generate_alias(table_name) == alias