11/*global converse */
22import mock from "../../../tests/mock.js" ;
33
4- const { u, stx } = converse . env ;
4+ const { u, stx, Strophe } = converse . env ;
55
66describe ( "Service Discovery" , function ( ) {
77
@@ -108,7 +108,6 @@ describe("Service Discovery", function () {
108108 [ 'discoInitialized' ] , { } ,
109109 function ( _converse ) {
110110
111- const { Strophe } = converse . env ;
112111 spyOn ( _converse . api , "trigger" ) . and . callThrough ( ) ;
113112 _converse . disco_entities . get ( _converse . domain ) . features . create ( { 'var' : Strophe . NS . MAM } ) ;
114113 expect ( _converse . api . trigger ) . toHaveBeenCalled ( ) ;
@@ -117,4 +116,66 @@ describe("Service Discovery", function () {
117116 expect ( last_call . args [ 1 ] . get ( 'var' ) ) . toBe ( Strophe . NS . MAM ) ;
118117 } ) ) ;
119118 } ) ;
119+
120+ describe ( 'api.disco.entities.find' , function ( ) {
121+ it (
122+ "returns our own JID's entity if the bare JID advertises the desired feature" ,
123+ mock . initConverse ( [ ] , { } , async function ( _converse ) {
124+ const bare = _converse . session . get ( 'bare_jid' ) ;
125+ await mock . waitUntilDiscoConfirmed ( _converse , bare , [ ] , [ 'feature1' ] ) ;
126+ const result = await _converse . api . disco . entities . find ( 'feature1' ) ;
127+ expect ( result . get ( 'jid' ) ) . toBe ( bare ) ;
128+ } )
129+ ) ;
130+
131+ it (
132+ 'returns the domain entity if bare JID does not advertise but domain does' ,
133+ mock . initConverse ( [ ] , { } , async function ( _converse ) {
134+ const bare = _converse . session . get ( 'bare_jid' ) ;
135+ const domain = Strophe . getDomainFromJid ( bare ) ;
136+ await mock . waitUntilDiscoConfirmed ( _converse , bare , [ ] , [ ] ) ;
137+ await mock . waitUntilDiscoConfirmed ( _converse , domain , [ ] , [ 'feature2' ] ) ;
138+ const result = await _converse . api . disco . entities . find ( 'feature2' ) ;
139+ expect ( result . get ( 'jid' ) ) . toBe ( domain ) ;
140+ } )
141+ ) ;
142+
143+ it (
144+ 'returns first matching item entity if neither bare nor domain advertises but an item does' ,
145+ mock . initConverse ( [ ] , { } , async function ( _converse ) {
146+ const bare = _converse . session . get ( 'bare_jid' ) ;
147+ const domain = Strophe . getDomainFromJid ( bare ) ;
148+ await mock . waitUntilDiscoConfirmed ( _converse , bare , [ ] , [ ] ) ;
149+ await mock . waitUntilDiscoConfirmed (
150+ _converse ,
151+ domain ,
152+ [ { 'category' : 'server' , 'type' : 'IM' } ] ,
153+ [ 'http://jabber.org/protocol/disco#items' ]
154+ ) ;
155+ await mock . waitUntilDiscoConfirmed ( _converse , domain , [ ] , [ ] , [ 'a@b' , 'c@d' ] , 'items' ) ;
156+ await mock . waitUntilDiscoConfirmed ( _converse , 'a@b' , [ ] , [ ] ) ;
157+ 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' ) ;
160+ } )
161+ ) ;
162+
163+ it (
164+ 'returns null if no entity matches' ,
165+ mock . initConverse ( [ ] , { } , async function ( _converse ) {
166+ const bare = _converse . session . get ( 'bare_jid' ) ;
167+ const domain = Strophe . getDomainFromJid ( bare ) ;
168+ await mock . waitUntilDiscoConfirmed ( _converse , bare , [ ] , [ ] ) ;
169+ await mock . waitUntilDiscoConfirmed (
170+ _converse ,
171+ domain ,
172+ [ { 'category' : 'server' , 'type' : 'IM' } ] ,
173+ [ 'http://jabber.org/protocol/disco#items' ]
174+ ) ;
175+ await mock . waitUntilDiscoConfirmed ( _converse , domain , [ ] , [ ] , [ ] , 'items' ) ;
176+ const result = await _converse . api . disco . entities . find ( 'feature4' ) ;
177+ expect ( result ) . toBeNull ( ) ;
178+ } )
179+ ) ;
180+ } ) ;
120181} ) ;
0 commit comments