Skip to content

Commit 5f605ea

Browse files
committed
test: improve get_nick_id tests
1 parent 4f478d2 commit 5f605ea

File tree

1 file changed

+45
-4
lines changed

1 file changed

+45
-4
lines changed

test/test_db.py

Lines changed: 45 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,14 @@
1111

1212
import pytest
1313

14-
from sopel.db import ChannelValues, Nicknames, NickValues, PluginValues, SopelDB
14+
from sopel.db import (
15+
ChannelValues,
16+
NickIDs,
17+
Nicknames,
18+
NickValues,
19+
PluginValues,
20+
SopelDB,
21+
)
1522
from sopel.tools import Identifier
1623

1724

@@ -38,6 +45,28 @@ def teardown_function(function):
3845
os.remove(db_filename)
3946

4047

48+
def test_get_nick_id(db):
49+
"""Test get_nick_id does not create NickID by default."""
50+
nick = Identifier('Exirel')
51+
session = db.session()
52+
53+
# Attempt to get nick ID: it is not created by default
54+
with pytest.raises(ValueError):
55+
db.get_nick_id(nick)
56+
57+
# Create the nick ID
58+
nick_id = db.get_nick_id(nick, create=True)
59+
60+
# Check that one and only one nickname exists with that ID
61+
nickname = session.query(Nicknames).filter(
62+
Nicknames.nick_id == nick_id,
63+
).one() # will raise if not one and exactly one
64+
assert nickname.canonical == 'Exirel'
65+
assert nickname.slug == nick.lower()
66+
67+
session.close()
68+
69+
4170
@pytest.mark.parametrize('name, slug, variant', (
4271
# Check case insensitive with ASCII only
4372
('Embolalia', 'embolalia', 'eMBOLALIA'),
@@ -46,10 +75,12 @@ def teardown_function(function):
4675
# Unicode, just in case
4776
('EmbölaliÅ', 'embölaliÅ', 'EMBöLALIÅ'),
4877
))
49-
def test_get_nick_id(db, name, slug, variant):
50-
session = db.ssession()
78+
def test_get_nick_id_casemapping(db, name, slug, variant):
79+
"""Test get_nick_id is case-insensitive through an Identifier."""
80+
session = db.session()
5181
nick = Identifier(name)
52-
# Create the NickID
82+
83+
# Create the nick ID
5384
nick_id = db.get_nick_id(nick, create=True)
5485

5586
registered = session.query(Nicknames) \
@@ -65,6 +96,16 @@ def test_get_nick_id(db, name, slug, variant):
6596
# Even if the case is different
6697
assert nick_id == db.get_nick_id(variant)
6798

99+
# And no other nick IDs are created (even with create=True)
100+
assert nick_id == db.get_nick_id(name, create=True)
101+
assert nick_id == db.get_nick_id(variant, create=True)
102+
assert 1 == session.query(NickIDs).count()
103+
104+
# But a truly different name means a new nick ID
105+
new_nick_id = db.get_nick_id(name + '_test', create=True)
106+
assert new_nick_id != nick_id
107+
assert 2 == session.query(NickIDs).count()
108+
68109
session.close()
69110

70111

0 commit comments

Comments
 (0)