-
-
Notifications
You must be signed in to change notification settings - Fork 771
/
muc-list-modal.js
146 lines (133 loc) · 8.26 KB
/
muc-list-modal.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
/*global mock, converse */
const { Strophe, Promise, sizzle, u, stx } = converse.env;
describe('The "Groupchats" List modal', function () {
it('can be opened from a link in the "Groupchats" section of the controlbox',
mock.initConverse(['chatBoxesFetched'], {}, async function (_converse) {
await mock.openControlBox(_converse);
const roomspanel = _converse.chatboxviews.get('controlbox').querySelector('converse-rooms-list');
roomspanel.querySelector('.show-list-muc-modal').click();
mock.closeControlBox(_converse);
const modal = _converse.api.modal.get('converse-muc-list-modal');
await u.waitUntil(() => u.isVisible(modal), 1000);
spyOn(_converse.ChatRoom.prototype, 'getDiscoInfo').and.callFake(() => Promise.resolve());
// See: https://xmpp.org/extensions/xep-0045.html#disco-rooms
expect(modal.querySelectorAll('.available-chatrooms li').length).toBe(0);
const server_input = modal.querySelector('input[name="server"]');
expect(server_input.placeholder).toBe('conference.example.org');
server_input.value = 'chat.shakespeare.lit';
modal.querySelector('input[type="submit"]').click();
await u.waitUntil(() => _converse.chatboxes.length);
const IQ_stanzas = _converse.api.connection.get().IQ_stanzas;
const sent_stanza = await u.waitUntil(() =>
IQ_stanzas.filter(s => sizzle(`query[xmlns="${Strophe.NS.DISCO_ITEMS}"]`, s).length).pop()
);
const id = sent_stanza.getAttribute('id');
expect(Strophe.serialize(sent_stanza)).toBe(
`<iq from="romeo@montague.lit/orchard" id="${id}" ` +
`to="chat.shakespeare.lit" ` +
`type="get" ` +
`xmlns="jabber:client">` +
`<query xmlns="http://jabber.org/protocol/disco#items"/>` +
`</iq>`
);
const iq = stx`
<iq from="muc.montague.lit"
to="romeo@montague.lit/pda"
id="${id}"
type="result"
xmlns="jabber:client">
<query>
<item jid="heath@chat.shakespeare.lit" name="A Lonely Heath"/>
<item jid="coven@chat.shakespeare.lit" name="A Dark Cave"/>
<item jid="forres@chat.shakespeare.lit" name="The Palace"/>
<item jid="inverness@chat.shakespeare.lit" name="Macbeth's Castle"/>
<item jid="orchard@chat.shakespeare.lit" name="Capulet's Orchard"/>
<item jid="friar@chat.shakespeare.lit" name="Friar Laurence's cell"/>
<item jid="hall@chat.shakespeare.lit" name="Hall in Capulet's house"/>
<item jid="chamber@chat.shakespeare.lit" name="Juliet's chamber"/>
<item jid="public@chat.shakespeare.lit" name="A public place"/>
<item jid="street@chat.shakespeare.lit" name="A street"/>
</query>
</iq>`;
_converse.api.connection.get()._dataRecv(mock.createRequest(iq));
await u.waitUntil(() => modal.querySelectorAll('.available-chatrooms li').length === 11);
const rooms = modal.querySelectorAll('.available-chatrooms li');
expect(rooms[0].textContent.trim()).toBe('Groupchats found');
expect(rooms[1].textContent.trim()).toBe('A Lonely Heath');
expect(rooms[2].textContent.trim()).toBe('A Dark Cave');
expect(rooms[3].textContent.trim()).toBe('The Palace');
expect(rooms[4].textContent.trim()).toBe("Macbeth's Castle");
expect(rooms[5].textContent.trim()).toBe("Capulet's Orchard");
expect(rooms[6].textContent.trim()).toBe("Friar Laurence's cell");
expect(rooms[7].textContent.trim()).toBe("Hall in Capulet's house");
expect(rooms[8].textContent.trim()).toBe("Juliet's chamber");
expect(rooms[9].textContent.trim()).toBe('A public place');
expect(rooms[10].textContent.trim()).toBe('A street');
rooms[4].querySelector('.open-room').click();
await u.waitUntil(() => _converse.chatboxes.length > 1);
expect(sizzle('.chatroom', _converse.el).filter(u.isVisible).length).toBe(1); // There should now be an open chatroom
const view = _converse.chatboxviews.get('inverness@chat.shakespeare.lit');
expect(view.querySelector('.chatbox-title__text').textContent.trim()).toBe("Macbeth's Castle");
})
);
it('is pre-filled with the muc_domain',
mock.initConverse(['chatBoxesFetched'], { 'muc_domain': 'muc.example.org' }, async function (_converse) {
await mock.openControlBox(_converse);
const roomspanel = _converse.chatboxviews.get('controlbox').querySelector('converse-rooms-list');
roomspanel.querySelector('.show-list-muc-modal').click();
mock.closeControlBox(_converse);
const modal = _converse.api.modal.get('converse-muc-list-modal');
await u.waitUntil(() => u.isVisible(modal), 1000);
const server_input = modal.querySelector('input[name="server"]');
expect(server_input.value).toBe('muc.example.org');
})
);
it("doesn't let you set the MUC domain if it's locked",
mock.initConverse(
['chatBoxesFetched'],
{ 'muc_domain': 'chat.shakespeare.lit', 'locked_muc_domain': true },
async function (_converse) {
await mock.openControlBox(_converse);
const roomspanel = _converse.chatboxviews.get('controlbox').querySelector('converse-rooms-list');
roomspanel.querySelector('.show-list-muc-modal').click();
mock.closeControlBox(_converse);
const modal = _converse.api.modal.get('converse-muc-list-modal');
await u.waitUntil(() => u.isVisible(modal), 1000);
spyOn(_converse.ChatRoom.prototype, 'getDiscoInfo').and.callFake(() => Promise.resolve());
expect(modal.querySelector('input[name="server"]')).toBe(null);
expect(modal.querySelector('input[type="submit"]')).toBe(null);
await u.waitUntil(() => _converse.chatboxes.length);
const sent_stanza = await u.waitUntil(() =>
_converse.api.connection.get().sent_stanzas
.filter(s => sizzle(`query[xmlns="http://jabber.org/protocol/disco#items"]`, s).length)
.pop()
);
expect(Strophe.serialize(sent_stanza)).toBe(
`<iq from="romeo@montague.lit/orchard" id="${sent_stanza.getAttribute('id')}" ` +
`to="chat.shakespeare.lit" type="get" xmlns="jabber:client">` +
`<query xmlns="http://jabber.org/protocol/disco#items"/>` +
`</iq>`
);
const iq = stx`
<iq from="muc.montague.lit"
to="romeo@montague.lit/pda"
id="${sent_stanza.getAttribute('id')}"
type="result"
xmlns="jabber:client">
<query>
<item jid="heath@chat.shakespeare.lit" name="A Lonely Heath"/>
<item jid="coven@chat.shakespeare.lit" name="A Dark Cave"/>
<item jid="forres@chat.shakespeare.lit" name="The Palace"/>
</query>
</iq>`;
_converse.api.connection.get()._dataRecv(mock.createRequest(iq));
await u.waitUntil(() => modal.querySelectorAll('.available-chatrooms li').length === 4);
const rooms = modal.querySelectorAll('.available-chatrooms li');
expect(rooms[0].textContent.trim()).toBe('Groupchats found');
expect(rooms[1].textContent.trim()).toBe('A Lonely Heath');
expect(rooms[2].textContent.trim()).toBe('A Dark Cave');
expect(rooms[3].textContent.trim()).toBe('The Palace');
}
)
);
});