/*global mock, converse */
const { Strophe } = converse.env;
const u = converse.env.utils;
// See: https://xmpp.org/rfcs/rfc3921.html
fdescribe("XEP-0437 Room Activity Indicators", function () {
it("will be activated for a MUC that becomes hidden",
mock.initConverse(
['rosterGroupsFetched'], {'muc_subscribe_to_rai': true, 'view_mode': 'fullscreen'},
async function (done, _converse) {
expect(_converse.session.get('rai_enabled_domains')).toBe(undefined);
const muc_jid = 'lounge@montague.lit';
await mock.openAndEnterChatRoom(_converse, muc_jid, 'romeo');
const view = _converse.api.chatviews.get(muc_jid);
expect(view.model.get('hidden')).toBe(false);
const sent_IQs = _converse.connection.IQ_stanzas;
const iq_get = await u.waitUntil(() => sent_IQs.filter(iq => iq.querySelector(`iq query[xmlns="${Strophe.NS.MAM}"]`)).pop());
const first_msg_id = _converse.connection.getUniqueId();
const last_msg_id = _converse.connection.getUniqueId();
let message = u.toStanza(
`
1st MAM Message
`);
_converse.connection._dataRecv(mock.createRequest(message));
message = u.toStanza(
`
2nd MAM Message
`);
_converse.connection._dataRecv(mock.createRequest(message));
const result = u.toStanza(
`
${first_msg_id}
${last_msg_id}
2
`);
_converse.connection._dataRecv(mock.createRequest(result));
await u.waitUntil(() => view.model.messages.length === 2);
const sent_stanzas = [];
spyOn(_converse.connection, 'send').and.callFake(s => sent_stanzas.push(s?.nodeTree ?? s));
view.model.save({'hidden': true});
await u.waitUntil(() => sent_stanzas.length === 3);
expect(Strophe.serialize(sent_stanzas[0])).toBe(
``+
``+
``
);
expect(Strophe.serialize(sent_stanzas[1])).toBe(
``+
`0`+
``+
``
);
expect(Strophe.serialize(sent_stanzas[2])).toBe(
``+
`0`+
``+
``+
``
);
view.model.save({'hidden': false});
done();
}));
});