Skip to content

Commit cb4adee

Browse files
committed
test interaction with 'converse-bookmarks-pin' component
1 parent df5615a commit cb4adee

3 files changed

Lines changed: 63 additions & 2 deletions

File tree

src/headless/plugins/bookmarks/collection.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,7 @@ class Bookmarks extends Collection {
8282
const groupchat = await api.rooms.create(bookmark.get('jid'), {
8383
nick: bookmark.get('nick'),
8484
password: bookmark.get('password'),
85+
pinned: bookmark.get('pinned'),
8586
});
8687
groupchat.maybeShow();
8788
}
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
/* global mock, converse */
2+
const { u } = converse.env;
3+
4+
describe("The bookmarks pin list", function () {
5+
it("shows a list of pinned bookmarks", mock.initConverse(['connected', 'chatboxesFetched'], {}, async function (_converse) {
6+
const { api } = _converse;
7+
await mock.waitForRoster(_converse, 'current', 0);
8+
await mock.waitUntilBookmarksReturned(_converse);
9+
await mock.openControlBox(_converse);
10+
11+
const bookmarks_pin_list = document.querySelector('converse-bookmarks-pin');
12+
const main_list = document.querySelector('converse-rooms-list');
13+
14+
let muc_jid = 'room@conference.shakespeare.lit';
15+
await api.bookmarks.set({
16+
jid: muc_jid,
17+
name: 'Romeo\'s room',
18+
autojoin: true,
19+
nick: 'romeo',
20+
extensions: ['<pinned xmlns="urn:xmpp:bookmarks-pinning:0"/>'],
21+
})
22+
await mock.waitForMUCDiscoInfo(_converse, muc_jid);
23+
24+
await u.waitUntil(() => bookmarks_pin_list.querySelectorAll(".open-room").length);
25+
let room_els = bookmarks_pin_list.querySelectorAll(".open-room");
26+
expect(room_els.length).toBe(1);
27+
expect(main_list.querySelectorAll(".open-room").length).toBe(0);
28+
29+
muc_jid = 'lounge@montague.lit';
30+
await api.bookmarks.set({
31+
jid: muc_jid,
32+
name: 'Lounge',
33+
autojoin: true,
34+
nick: 'romeo',
35+
extensions: ['<pinned xmlns="urn:xmpp:bookmarks-pinning:0"/>'],
36+
});
37+
await mock.waitForMUCDiscoInfo(_converse, muc_jid);
38+
39+
await u.waitUntil(() => bookmarks_pin_list.querySelectorAll(".open-room").length > 1);
40+
room_els = bookmarks_pin_list.querySelectorAll(".open-room");
41+
expect(room_els.length).toBe(2);
42+
expect(main_list.querySelectorAll(".open-room").length).toBe(0);
43+
44+
// Unpin a room
45+
bookmarks_pin_list.querySelector('.unpin-room').click();
46+
await u.waitUntil(() => bookmarks_pin_list.querySelectorAll(".open-room").length === 1);
47+
expect(bookmarks_pin_list.querySelectorAll(".open-room").length).toBe(1);
48+
expect(main_list.querySelectorAll(".open-room").length).toBe(1);
49+
50+
// pin it again
51+
main_list.querySelector('.pin-room').click();
52+
await u.waitUntil(() => bookmarks_pin_list.querySelectorAll(".open-room").length === 2);
53+
expect(bookmarks_pin_list.querySelectorAll(".open-room").length).toBe(2);
54+
expect(main_list.querySelectorAll(".open-room").length).toBe(0);
55+
}));
56+
});

src/shared/roomslist/templates/room-item.js

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ export function tplRoomItem (el, room) {
4040
alt_text: i18n_leave_room,
4141
text: __('Leave'),
4242
icon_class: 'fa-sign-out-alt',
43+
btn_class: 'close-room',
4344
handler: (ev) => el.closeRoom(ev)
4445
}),
4546
];
@@ -51,6 +52,7 @@ export function tplRoomItem (el, room) {
5152
alt_text: __('Pin this groupchat to the top of the list'),
5253
text: __('Pin'),
5354
icon_class: 'fa-bookmark',
55+
btn_class: 'pin-room',
5456
handler: (ev) => el.pinRoom(ev)
5557
}))
5658
} else {
@@ -59,6 +61,7 @@ export function tplRoomItem (el, room) {
5961
alt_text: __('Unpin this groupchat from the top of the list'),
6062
text: __('Unpin'),
6163
icon_class: 'fa-bookmark-empty',
64+
btn_class: 'unpin-room',
6265
handler: (ev) => el.unpinRoom(ev)
6366
}))
6467
}
@@ -96,11 +99,12 @@ export function tplRoomItem (el, room) {
9699
* @param {string} config.text
97100
* @param {function} config.handler
98101
* @param {string} config.icon_class
102+
* @param {string} config.btn_class
99103
* @returns
100104
*/
101105
function tplRoomMenuItem (config) {
102-
const { room, alt_text, text, handler, icon_class } = config;
103-
return html`<a class="dropdown-item" role="button"
106+
const { room, alt_text, text, handler, icon_class, btn_class } = config;
107+
return html`<a class="dropdown-item ${btn_class}" role="button"
104108
@click="${handler}"
105109
tabindex="0"
106110
data-room-jid="${room.get('jid')}"

0 commit comments

Comments
 (0)