@@ -119,29 +119,35 @@ describe("Service Discovery", function () {
119119
120120 describe ( 'api.disco.entities.find' , function ( ) {
121121 it (
122- "returns our own JID's entity if the bare JID advertises the desired feature " ,
122+ "returns our own JID's entity" ,
123123 mock . initConverse ( [ ] , { } , async function ( _converse ) {
124124 const bare = _converse . session . get ( 'bare_jid' ) ;
125+ const domain = Strophe . getDomainFromJid ( bare ) ;
125126 await mock . waitUntilDiscoConfirmed ( _converse , bare , [ ] , [ 'feature1' ] ) ;
126- const result = await _converse . api . disco . entities . find ( 'feature1' ) ;
127- expect ( result . get ( 'jid' ) ) . toBe ( bare ) ;
127+ await mock . waitUntilDiscoConfirmed ( _converse , domain , [ ] , [ 'feature2' ] ) ;
128+ const results = await _converse . api . disco . entities . find ( 'feature1' ) ;
129+ expect ( Array . isArray ( results ) ) . toBe ( true ) ;
130+ expect ( results . length ) . toBe ( 1 ) ;
131+ expect ( results [ 0 ] . get ( 'jid' ) ) . toBe ( bare ) ;
128132 } )
129133 ) ;
130134
131135 it (
132- 'returns the domain entity if bare JID does not advertise but domain does ' ,
136+ 'returns the domain entity' ,
133137 mock . initConverse ( [ ] , { } , async function ( _converse ) {
134138 const bare = _converse . session . get ( 'bare_jid' ) ;
135139 const domain = Strophe . getDomainFromJid ( bare ) ;
136140 await mock . waitUntilDiscoConfirmed ( _converse , bare , [ ] , [ ] ) ;
137141 await mock . waitUntilDiscoConfirmed ( _converse , domain , [ ] , [ 'feature2' ] ) ;
138- const result = await _converse . api . disco . entities . find ( 'feature2' ) ;
139- expect ( result . get ( 'jid' ) ) . toBe ( domain ) ;
142+ const results = await _converse . api . disco . entities . find ( 'feature2' ) ;
143+ expect ( Array . isArray ( results ) ) . toBe ( true ) ;
144+ expect ( results . length ) . toBe ( 1 ) ;
145+ expect ( results [ 0 ] . get ( 'jid' ) ) . toBe ( domain ) ;
140146 } )
141147 ) ;
142148
143149 it (
144- 'returns first matching item entity if neither bare nor domain advertises but an item does ' ,
150+ 'returns a matching item entity' ,
145151 mock . initConverse ( [ ] , { } , async function ( _converse ) {
146152 const bare = _converse . session . get ( 'bare_jid' ) ;
147153 const domain = Strophe . getDomainFromJid ( bare ) ;
@@ -155,8 +161,35 @@ describe("Service Discovery", function () {
155161 await mock . waitUntilDiscoConfirmed ( _converse , domain , [ ] , [ ] , [ 'a@b' , 'c@d' ] , 'items' ) ;
156162 await mock . waitUntilDiscoConfirmed ( _converse , 'a@b' , [ ] , [ ] ) ;
157163 await mock . waitUntilDiscoConfirmed ( _converse , 'c@d' , [ ] , [ 'feature3' ] ) ;
158- const result = await _converse . api . disco . entities . find ( 'feature3' ) ;
159- expect ( result . get ( 'jid' ) ) . toBe ( 'c@d' ) ;
164+ const results = await _converse . api . disco . entities . find ( 'feature3' ) ;
165+ expect ( Array . isArray ( results ) ) . toBe ( true ) ;
166+ expect ( results . length ) . toBe ( 1 ) ;
167+ expect ( results [ 0 ] . get ( 'jid' ) ) . toBe ( 'c@d' ) ;
168+ } )
169+ ) ;
170+
171+ it (
172+ 'returns multiple matching entities' ,
173+ mock . initConverse ( [ ] , { } , async function ( _converse ) {
174+ const bare = _converse . session . get ( 'bare_jid' ) ;
175+ const domain = Strophe . getDomainFromJid ( bare ) ;
176+ await mock . waitUntilDiscoConfirmed ( _converse , bare , [ ] , [ 'feature' ] ) ;
177+ await mock . waitUntilDiscoConfirmed (
178+ _converse ,
179+ domain ,
180+ [ { 'category' : 'server' , 'type' : 'IM' } ] ,
181+ [ 'http://jabber.org/protocol/disco#items' , 'feature' ]
182+ ) ;
183+ await mock . waitUntilDiscoConfirmed ( _converse , domain , [ ] , [ ] , [ 'a@b' , 'c@d' ] , 'items' ) ;
184+ await mock . waitUntilDiscoConfirmed ( _converse , 'a@b' , [ ] , [ 'feature' ] ) ;
185+ await mock . waitUntilDiscoConfirmed ( _converse , 'c@d' , [ ] , [ 'feature' ] ) ;
186+ const results = await _converse . api . disco . entities . find ( 'feature' ) ;
187+ expect ( Array . isArray ( results ) ) . toBe ( true ) ;
188+ expect ( results . length ) . toBe ( 4 ) ;
189+ expect ( results [ 0 ] . get ( 'jid' ) ) . toBe ( domain ) ;
190+ expect ( results [ 1 ] . get ( 'jid' ) ) . toBe ( bare ) ;
191+ expect ( results [ 2 ] . get ( 'jid' ) ) . toBe ( 'a@b' ) ;
192+ expect ( results [ 3 ] . get ( 'jid' ) ) . toBe ( 'c@d' ) ;
160193 } )
161194 ) ;
162195
@@ -173,8 +206,9 @@ describe("Service Discovery", function () {
173206 [ 'http://jabber.org/protocol/disco#items' ]
174207 ) ;
175208 await mock . waitUntilDiscoConfirmed ( _converse , domain , [ ] , [ ] , [ ] , 'items' ) ;
176- const result = await _converse . api . disco . entities . find ( 'feature4' ) ;
177- expect ( result ) . toBeNull ( ) ;
209+ const results = await _converse . api . disco . entities . find ( 'feature4' ) ;
210+ expect ( Array . isArray ( results ) ) . toBe ( true ) ;
211+ expect ( results . length ) . toBe ( 0 ) ;
178212 } )
179213 ) ;
180214 } ) ;
0 commit comments