Add tests for muc hats

This commit is contained in:
Pawel Chmielowski
2026-01-30 10:27:42 +01:00
parent 3a5f7e6cfe
commit 7bc96ee464
+74 -1
View File
@@ -305,9 +305,77 @@ master_slave_cases() ->
master_slave_test(config_voice_request_interval),
master_slave_test(config_visitor_nickchange),
master_slave_test(join_conflict),
master_slave_test(duplicate_occupantid)
master_slave_test(duplicate_occupantid),
master_slave_test(hats)
]}.
hats_master(Config) ->
Room = muc_room_jid(Config),
PeerJID = ?config(slave, Config),
PeerNick = ?config(slave_nick, Config),
PeerNickJID = jid:replace_resource(Room, PeerNick),
ok = master_join(Config),
CommandCreate =
#adhoc_command{action = complete, node = <<"urn:xmpp:hats:commands:create">>, xdata = #xdata{
type = form, fields = [
#xdata_field{var = <<"FORM_TYPE">>, values = [<<"urn:xmpp:hats:commands">>]},
#xdata_field{var = <<"hats#title">>, values = [<<"Test">>]},
#xdata_field{var = <<"hats#uri">>, values = [<<"https://example.com/Test">>]},
#xdata_field{var = <<"hats#hue">>, values = [<<"100">>]}
]}},
#iq{type = result,
sub_els =
[#adhoc_command{status = completed}]} =
send_recv(Config,
#iq{type = set,
to = Room,
sub_els = [CommandCreate]}),
[104] = recv_only_config_change_message(Config),
put_event(Config, post_hat_setup),
post_hat_setup = get_event(Config),
CommandAssign =
#adhoc_command{action = complete, node = <<"urn:xmpp:hats:commands:assign">>, xdata = #xdata{
type = form, fields = [
#xdata_field{var = <<"FORM_TYPE">>, values = [<<"urn:xmpp:hats:commands">>]},
#xdata_field{var = <<"hats#jid">>, values = [jid:encode(PeerJID)]},
#xdata_field{var = <<"hat">>, values = [<<"https://example.com/Test">>]}
]}},
#iq{type = result,
sub_els =
[#adhoc_command{status = completed}]} =
send_recv(Config,
#iq{type = set,
to = Room,
sub_els = [CommandAssign]}),
#presence{from = PeerNickJID} = PresHat = recv_presence(Config),
?match(#muc_hats{hats = [#muc_hat{title = <<"Test">>,
uri = <<"https://example.com/Test">>,
hue = <<"100">>}]},
xmpp:get_subtag(PresHat, #muc_hats{})),
put_event(Config, post_hat_assign),
post_hat_assign = get_event(Config),
recv_muc_presence(Config, PeerNickJID, unavailable),
ok = leave(Config),
disconnect(Config).
hats_slave(Config) ->
Room = muc_room_jid(Config),
MyNick = ?config(nick, Config),
MyNickJID = jid:replace_resource(Room, MyNick),
{[], _, _} = slave_join(Config),
[104] = recv_only_config_change_message(Config),
post_hat_setup = get_event(Config),
put_event(Config, post_hat_setup),
#presence{from = MyNickJID} = PresHat = recv_presence(Config),
?match(#muc_hats{hats = [#muc_hat{title = <<"Test">>,
uri = <<"https://example.com/Test">>,
hue = <<"100">>}]},
xmpp:get_subtag(PresHat, #muc_hats{})),
post_hat_assign = get_event(Config),
put_event(Config, post_hat_assign),
ok = leave(Config),
disconnect(Config).
duplicate_occupantid_master(Config) ->
Room = muc_room_jid(Config),
PeerJID = ?config(slave, Config),
@@ -1950,6 +2018,11 @@ recv_config_change_message(Config) ->
ct:comment("Receiving configuration change notification message"),
Room = muc_room_jid(Config),
#presence{from = Room, type = available} = recv_presence(Config),
recv_only_config_change_message(Config).
recv_only_config_change_message(Config) ->
ct:comment("Receiving configuration change notification message"),
Room = muc_room_jid(Config),
#message{type = groupchat, from = Room} = Msg = recv_message(Config),
#muc_user{status_codes = Codes} = xmpp:get_subtag(Msg, #muc_user{}),
lists:sort(Codes).