From 7bc96ee4648cf47bb9bfd2e6b8e23aa931aebbc4 Mon Sep 17 00:00:00 2001 From: Pawel Chmielowski Date: Fri, 30 Jan 2026 10:27:42 +0100 Subject: [PATCH] Add tests for muc hats --- test/muc_tests.erl | 75 +++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 74 insertions(+), 1 deletion(-) diff --git a/test/muc_tests.erl b/test/muc_tests.erl index 88009e3bb..235ab80bc 100644 --- a/test/muc_tests.erl +++ b/test/muc_tests.erl @@ -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).