Skip to content

Commit 844f487

Browse files
committed
tests for mycli/packages/special/favoritequeries.py
also making the return value of FavoriteQueries.list() a copy.
1 parent 3140cac commit 844f487

3 files changed

Lines changed: 103 additions & 2 deletions

File tree

changelog.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@ Bug Fixes
1414
* More careful removal of redundant fuzzy completion suggestions.
1515
* Fix a corner case when listing an empty list of favorite queries.
1616
* Better completions refresh on changing databases or ALTERs.
17+
* Make the return value of `FavoriteQueries.list()` a copy.
18+
* Make multi-line detection and special cases more robust.
1719

1820

1921
Internal
@@ -31,7 +33,6 @@ Internal
3133
* Refactor suggestion logic into declarative rules.
3234
* Factor the `--batch` execution modes out of `main.py`.
3335
* Sort coverage report in tox suite.
34-
* Make multi-line detection and special cases more robust.
3536

3637

3738
1.67.1 (2026/03/28)

mycli/packages/special/favoritequeries.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ def from_config(cls, config):
4444
return FavoriteQueries(config)
4545

4646
def list(self) -> list[str | None]:
47-
return self.config.get(self.section_name, [])
47+
return list(self.config.get(self.section_name, {}))
4848

4949
def get(self, name) -> str | None:
5050
return self.config.get(self.section_name, {}).get(name, None)
Lines changed: 100 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,100 @@
1+
from collections.abc import Mapping
2+
3+
from mycli.packages.special.favoritequeries import FavoriteQueries
4+
5+
6+
class DummyConfig(dict):
7+
def __init__(self, initial: Mapping[str, object] | None = None) -> None:
8+
super().__init__(initial or {})
9+
self.encoding: str | None = None
10+
self.write_calls = 0
11+
12+
def write(self) -> None:
13+
self.write_calls += 1
14+
15+
16+
def test_from_config_returns_instance_with_same_config() -> None:
17+
config = DummyConfig()
18+
19+
favorites = FavoriteQueries.from_config(config)
20+
21+
assert isinstance(favorites, FavoriteQueries)
22+
assert favorites.config is config
23+
24+
25+
def test_list_and_get_use_favorite_queries_section() -> None:
26+
config = DummyConfig({
27+
'favorite_queries': {
28+
'daily': 'select 1',
29+
'weekly': 'select 2',
30+
},
31+
})
32+
favorites = FavoriteQueries(config)
33+
34+
assert favorites.list() == ['daily', 'weekly']
35+
assert favorites.get('daily') == 'select 1'
36+
assert favorites.get('missing') is None
37+
38+
39+
def test_list_returns_empty_list_when_section_is_missing() -> None:
40+
favorites = FavoriteQueries(DummyConfig())
41+
42+
assert favorites.list() == []
43+
44+
45+
def test_save_creates_section_sets_encoding_and_writes_config() -> None:
46+
config = DummyConfig()
47+
favorites = FavoriteQueries(config)
48+
49+
favorites.save('demo', 'select 1')
50+
51+
assert config.encoding == 'utf-8'
52+
assert config == {'favorite_queries': {'demo': 'select 1'}}
53+
assert config.write_calls == 1
54+
55+
56+
def test_save_updates_existing_section_and_writes_config() -> None:
57+
config = DummyConfig({'favorite_queries': {'demo': 'select 1'}})
58+
favorites = FavoriteQueries(config)
59+
60+
favorites.save('report', 'select 2')
61+
62+
assert config.encoding == 'utf-8'
63+
assert config['favorite_queries'] == {
64+
'demo': 'select 1',
65+
'report': 'select 2',
66+
}
67+
assert config.write_calls == 1
68+
69+
70+
def test_delete_removes_existing_favorite_and_writes_config() -> None:
71+
config = DummyConfig({'favorite_queries': {'demo': 'select 1'}})
72+
favorites = FavoriteQueries(config)
73+
74+
result = favorites.delete('demo')
75+
76+
assert result == 'demo: Deleted.'
77+
assert config['favorite_queries'] == {}
78+
assert config.write_calls == 1
79+
80+
81+
def test_delete_returns_not_found_without_writing_config() -> None:
82+
config = DummyConfig({'favorite_queries': {'demo': 'select 1'}})
83+
favorites = FavoriteQueries(config)
84+
85+
result = favorites.delete('missing')
86+
87+
assert result == 'missing: Not Found.'
88+
assert config['favorite_queries'] == {'demo': 'select 1'}
89+
assert config.write_calls == 0
90+
91+
92+
def test_delete_returns_not_found_when_section_is_missing() -> None:
93+
config = DummyConfig()
94+
favorites = FavoriteQueries(config)
95+
96+
result = favorites.delete('missing')
97+
98+
assert result == 'missing: Not Found.'
99+
assert config == {}
100+
assert config.write_calls == 0

0 commit comments

Comments
 (0)