@@ -60,6 +60,53 @@ describe("The nickname autocomplete feature", function () {
60
60
done ( ) ;
61
61
} ) ) ;
62
62
63
+ it ( "should order by query index position and length" , mock . initConverse (
64
+ [ 'rosterGroupsFetched' , 'chatBoxesFetched' ] , { } , async function ( done , _converse ) {
65
+ await mock . openAndEnterChatRoom ( _converse , '[email protected] ' , 'tom' ) ;
66
+ const view = _converse . chatboxviews . get ( '[email protected] ' ) ;
67
+
68
+ // Nicknames from presences
69
+ [ 'bernard' , 'naber' , 'helberlo' , 'john' , 'jones' ] . forEach ( ( nick ) => {
70
+ _converse . connection . _dataRecv ( mock . createRequest (
71
+ $pres ( {
72
+ 'to' :
'[email protected] /resource' ,
73
+ 'from' :
`[email protected] /${ nick } `
74
+ } )
75
+ . c ( 'x' , { xmlns : Strophe . NS . MUC_USER } )
76
+ . c ( 'item' , {
77
+ 'affiliation' : 'none' ,
78
+ 'jid' : `${ nick } @montague.lit/resource` ,
79
+ 'role' : 'participant'
80
+ } ) ) ) ;
81
+ } ) ;
82
+
83
+ const textarea = view . el . querySelector ( 'textarea.chat-textarea' ) ;
84
+ const at_event = {
85
+ 'target' : textarea ,
86
+ 'preventDefault' : function preventDefault ( ) { } ,
87
+ 'stopPropagation' : function stopPropagation ( ) { } ,
88
+ 'keyCode' : 50 ,
89
+ 'key' : '@'
90
+ } ;
91
+
92
+ // Test that results are sorted by query index
93
+ view . onKeyDown ( at_event ) ;
94
+ textarea . value = '@ber' ;
95
+ view . onKeyUp ( at_event ) ;
96
+ await u . waitUntil ( ( ) => view . el . querySelectorAll ( '.suggestion-box__results li' ) . length === 3 ) ;
97
+ expect ( view . el . querySelector ( '.suggestion-box__results li:first-child' ) . textContent ) . toBe ( 'bernard' ) ;
98
+ expect ( view . el . querySelector ( '.suggestion-box__results li:nth-child(2)' ) . textContent ) . toBe ( 'naber' ) ;
99
+ expect ( view . el . querySelector ( '.suggestion-box__results li:nth-child(3)' ) . textContent ) . toBe ( 'helberlo' ) ;
100
+
101
+ // Test that when the query index is equal, results should be sorted by length
102
+ textarea . value = '@jo' ;
103
+ view . onKeyUp ( at_event ) ;
104
+ await u . waitUntil ( ( ) => view . el . querySelectorAll ( '.suggestion-box__results li' ) . length === 2 ) ;
105
+ expect ( view . el . querySelector ( '.suggestion-box__results li:first-child' ) . textContent ) . toBe ( 'john' ) ;
106
+ expect ( view . el . querySelector ( '.suggestion-box__results li:nth-child(2)' ) . textContent ) . toBe ( 'jones' ) ;
107
+ done ( ) ;
108
+ } ) ) ;
109
+
63
110
it ( "autocompletes when the user presses tab" ,
64
111
mock . initConverse (
65
112
[ 'rosterGroupsFetched' , 'chatBoxesFetched' ] , { } ,
0 commit comments