1111
1212import 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+ )
1522from 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