• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

yazmolod / pynspd / #12

28 Jul 2025 06:51PM UTC coverage: 95.698% (-1.9%) from 97.585%
#12

push

coveralls-python

yazmolod
bump version

5 of 5 new or added lines in 2 files covered. (100.0%)

71 existing lines in 5 files now uncovered.

2825 of 2952 relevant lines covered (95.7%)

0.96 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

95.12
/tests/test_cli.py
1
from pathlib import Path
1✔
2

3
import pytest
1✔
4
from typer.testing import CliRunner
1✔
5

6
from pynspd import __version__
1✔
7
from pynspd.cli import app
1✔
8

9
runner = CliRunner()
1✔
10

11

12
@pytest.fixture()
1✔
13
def output_file(request):
1✔
14
    file: Path = Path.cwd() / ("test" + request.param)
1✔
15
    yield file
1✔
16
    assert file.exists()
1✔
17
    file.unlink()
1✔
18

19

20
def test_cn_list_text():
1✔
21
    result = runner.invoke(app, ["search", "77:01:0001057:76"])
1✔
22
    assert result.exit_code == 0
1✔
23

24

25
@pytest.mark.parametrize("output_file", [".xlsx"], indirect=True)
1✔
26
def test_cn_list_file(output_file: Path):
1✔
27
    result = runner.invoke(
1✔
28
        app,
29
        [
30
            "search",
31
            "-o",
32
            output_file.name,
33
            "-l",
34
            "./tests/data/cn_list.txt",
35
        ],
36
    )
37
    assert result.exit_code == 0
1✔
38

39

40
@pytest.mark.parametrize("output_file", [".csv"], indirect=True)
1✔
41
def test_geo_file(output_file: Path):
1✔
42
    result = runner.invoke(
1✔
43
        app, ["geo", "-o", output_file.name, "./tests/data/poly.gpkg"]
44
    )
45
    assert result.exit_code == 0
1✔
46

47

48
@pytest.mark.parametrize("output_file", [".gpkg"], indirect=True)
1✔
49
def test_geo_text(output_file: Path):
1✔
50
    result = runner.invoke(
1✔
51
        app, ["geo", "-o", output_file.name, "Point (37.562 55.605)"]
52
    )
53
    assert result.exit_code == 0
1✔
54

55

56
@pytest.mark.parametrize("output_file", [".geojson"], indirect=True)
1✔
57
def test_geo_coords(output_file: Path):
1✔
58
    result = runner.invoke(
1✔
59
        app,
60
        [
61
            "geo",
62
            "-o",
63
            output_file.name,
64
            "   53.193168, 50.106273 53.193704, 50.105026   ",
65
        ],
66
    )
67
    assert result.exit_code == 0
1✔
68

69

70
@pytest.mark.parametrize("output_file", [".geojson"], indirect=True)
1✔
71
def test_geo_coords_file(output_file: Path):
1✔
72
    result = runner.invoke(
1✔
73
        app, ["geo", "-o", output_file.name, "./tests/data/pt_list.txt"]
74
    )
75
    assert result.exit_code == 0
1✔
76

77

78
def test_version():
1✔
79
    result = runner.invoke(app, ["-v"])
1✔
80
    assert result.exit_code == 0
1✔
81
    assert __version__ in result.stdout
1✔
82

83

84
def test_bad_text_input():
1✔
85
    result = runner.invoke(app, ["search", "./tests/data/missing_file.txt"])
1✔
86
    assert result.exit_code == 2
1✔
87
    assert "Нужно ввести валидные кадастровые номера" in result.stdout
1✔
88

89
    result = runner.invoke(app, ["search", "./tests/data/empty_list.txt"])
1✔
90
    assert result.exit_code == 2
1✔
91
    assert "В файле не найдены кадастровые номера" in result.stdout
1✔
92

93
    result = runner.invoke(app, ["search", "./tests/data/lines.gpkg"])
1✔
94
    assert result.exit_code == 2
1✔
95
    assert "Невозможно прочитать файл" in result.stdout
1✔
96

97

98
def test_bad_geom_input():
1✔
99
    result = runner.invoke(app, ["geo", "./tests/data/cn_list.txt"])
1✔
100
    assert result.exit_code == 2
1✔
101
    assert "не является поддерживаемым файлом" in result.stdout
1✔
102

103
    result = runner.invoke(app, ["geo", "Bad WKT"])
1✔
104
    assert result.exit_code == 2
1✔
105
    assert "не является валидным WKT" in result.stdout
1✔
106

107
    result = runner.invoke(app, ["geo", "./tests/data/lines.gpkg"])
1✔
108
    assert result.exit_code == 2
1✔
109
    assert "Не поддерживаемый тип геометрии" in result.stdout
1✔
110

111

112
def test_empty_output():
1✔
113
    result = runner.invoke(app, ["search", "-p", "fuzzbuzz"])
1✔
114
    assert result.exit_code == 1
1✔
115
    assert "Ничего не найдено" in result.stdout
1✔
116

117
    result = runner.invoke(
1✔
118
        app, ["geo", "Point (37.55342908811032743 55.59951468019968246)"]
119
    )
120
    assert result.exit_code == 1
1✔
121
    assert "Ничего не найдено" in result.stdout
1✔
122

123

124
def test_bad_layer_name():
1✔
125
    result = runner.invoke(
1✔
126
        app,
127
        ["geo", "./tests/data/poly.gpkg", "-c", "---test-layer-name", "Hello World"],
128
        catch_exceptions=False,
129
    )
130
    assert result.exit_code == 2
1✔
131
    assert "не является слоем НСПД" in result.stdout
1✔
132

133

134
def test_tab_output():
1✔
135
    result = runner.invoke(app, ["search", "77:07:0006001:1020", "--tab-objects"])
1✔
UNCOV
136
    assert result.exit_code == 0
×
137
    assert "Помещения (количество)" in result.stdout
1✔
138
    result = runner.invoke(
1✔
139
        app, ["geo", "Point (37.5106798 55.729467)", "--tab-objects"]
140
    )
141
    assert result.exit_code == 0
1✔
142
    assert "Объект недвижимости" in result.stdout
1✔
143

144

145
def test_cities_parse():
1✔
146
    result = runner.invoke(
1✔
147
        app,
148
        [
149
            "search",
150
            "-pc",
151
            "---test-layer-names",
152
            "Муниципальные образования (полигональный)",
153
            "---test-layer-names",
154
            "Населённые пункты (полигоны)",
155
            "Обнинск",
156
        ],
157
    )
UNCOV
158
    assert result.exit_code == 0
×
159
    # два разных субъекта в выводе
UNCOV
160
    assert "29415000000" in result.stdout
×
UNCOV
161
    assert "29415000000" in result.stdout
×
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc