@@ -305,9 +305,77 @@ master_slave_cases() ->
305305 master_slave_test (config_voice_request_interval ),
306306 master_slave_test (config_visitor_nickchange ),
307307 master_slave_test (join_conflict ),
308- master_slave_test (duplicate_occupantid )
308+ master_slave_test (duplicate_occupantid ),
309+ master_slave_test (hats )
309310 ]}.
310311
312+ hats_master (Config ) ->
313+ Room = muc_room_jid (Config ),
314+ PeerJID = ? config (slave , Config ),
315+ PeerNick = ? config (slave_nick , Config ),
316+ PeerNickJID = jid :replace_resource (Room , PeerNick ),
317+ ok = master_join (Config ),
318+ CommandCreate =
319+ # adhoc_command {action = complete , node = <<" urn:xmpp:hats:commands:create" >>, xdata = # xdata {
320+ type = form , fields = [
321+ # xdata_field {var = <<" FORM_TYPE" >>, values = [<<" urn:xmpp:hats:commands" >>]},
322+ # xdata_field {var = <<" hats#title" >>, values = [<<" Test" >>]},
323+ # xdata_field {var = <<" hats#uri" >>, values = [<<" https://example.com/Test" >>]},
324+ # xdata_field {var = <<" hats#hue" >>, values = [<<" 100" >>]}
325+ ]}},
326+ # iq {type = result ,
327+ sub_els =
328+ [# adhoc_command {status = completed }]} =
329+ send_recv (Config ,
330+ # iq {type = set ,
331+ to = Room ,
332+ sub_els = [CommandCreate ]}),
333+ [104 ] = recv_only_config_change_message (Config ),
334+ put_event (Config , post_hat_setup ),
335+ post_hat_setup = get_event (Config ),
336+ CommandAssign =
337+ # adhoc_command {action = complete , node = <<" urn:xmpp:hats:commands:assign" >>, xdata = # xdata {
338+ type = form , fields = [
339+ # xdata_field {var = <<" FORM_TYPE" >>, values = [<<" urn:xmpp:hats:commands" >>]},
340+ # xdata_field {var = <<" hats#jid" >>, values = [jid :encode (PeerJID )]},
341+ # xdata_field {var = <<" hat" >>, values = [<<" https://example.com/Test" >>]}
342+ ]}},
343+ # iq {type = result ,
344+ sub_els =
345+ [# adhoc_command {status = completed }]} =
346+ send_recv (Config ,
347+ # iq {type = set ,
348+ to = Room ,
349+ sub_els = [CommandAssign ]}),
350+ # presence {from = PeerNickJID } = PresHat = recv_presence (Config ),
351+ ? match (# muc_hats {hats = [# muc_hat {title = <<" Test" >>,
352+ uri = <<" https://example.com/Test" >>,
353+ hue = <<" 100" >>}]},
354+ xmpp :get_subtag (PresHat , # muc_hats {})),
355+ put_event (Config , post_hat_assign ),
356+ post_hat_assign = get_event (Config ),
357+ recv_muc_presence (Config , PeerNickJID , unavailable ),
358+ ok = leave (Config ),
359+ disconnect (Config ).
360+
361+ hats_slave (Config ) ->
362+ Room = muc_room_jid (Config ),
363+ MyNick = ? config (nick , Config ),
364+ MyNickJID = jid :replace_resource (Room , MyNick ),
365+ {[], _ , _ } = slave_join (Config ),
366+ [104 ] = recv_only_config_change_message (Config ),
367+ post_hat_setup = get_event (Config ),
368+ put_event (Config , post_hat_setup ),
369+ # presence {from = MyNickJID } = PresHat = recv_presence (Config ),
370+ ? match (# muc_hats {hats = [# muc_hat {title = <<" Test" >>,
371+ uri = <<" https://example.com/Test" >>,
372+ hue = <<" 100" >>}]},
373+ xmpp :get_subtag (PresHat , # muc_hats {})),
374+ post_hat_assign = get_event (Config ),
375+ put_event (Config , post_hat_assign ),
376+ ok = leave (Config ),
377+ disconnect (Config ).
378+
311379duplicate_occupantid_master (Config ) ->
312380 Room = muc_room_jid (Config ),
313381 PeerJID = ? config (slave , Config ),
@@ -1950,6 +2018,11 @@ recv_config_change_message(Config) ->
19502018 ct :comment (" Receiving configuration change notification message" ),
19512019 Room = muc_room_jid (Config ),
19522020 # presence {from = Room , type = available } = recv_presence (Config ),
2021+ recv_only_config_change_message (Config ).
2022+
2023+ recv_only_config_change_message (Config ) ->
2024+ ct :comment (" Receiving configuration change notification message" ),
2025+ Room = muc_room_jid (Config ),
19532026 # message {type = groupchat , from = Room } = Msg = recv_message (Config ),
19542027 # muc_user {status_codes = Codes } = xmpp :get_subtag (Msg , # muc_user {}),
19552028 lists :sort (Codes ).
0 commit comments