-
-
Notifications
You must be signed in to change notification settings - Fork 771
/
actions.js
109 lines (94 loc) · 4.59 KB
/
actions.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
/*global mock, converse */
const { $msg, u } = converse.env;
describe("A Chat Message", function () {
it("Can be copied using a message action",
mock.initConverse(['chatBoxesFetched'], {}, async function (_converse) {
const { api } = _converse;
await mock.waitForRoster(_converse, 'current', 1);
await mock.openControlBox(_converse);
const contact_jid = mock.cur_names[0].replace(/ /g,'.').toLowerCase() + '@montague.lit';
await mock.openChatBoxFor(_converse, contact_jid);
const view = _converse.chatboxviews.get(contact_jid);
const textarea = view.querySelector('textarea.chat-textarea');
const firstMessageText = 'But soft, what light through yonder airlock breaks?';
textarea.value = firstMessageText;
const message_form = view.querySelector('converse-message-form');
message_form.onKeyDown({
target: textarea,
preventDefault: function preventDefault () {},
keyCode: 13 // Enter
});
await u.waitUntil(() => view.querySelectorAll('.chat-msg__text').length === 1);
const spyClipboard = spyOn(navigator.clipboard, 'writeText');
let firstAction = view.querySelector('.chat-msg__action-copy');
expect(firstAction).not.toBeNull();
firstAction.click();
expect(spyClipboard).toHaveBeenCalledOnceWith(firstMessageText);
// Test messages from other users
const secondMessageText = 'Hello';
_converse.handleMessageStanza(
$msg({
'from': contact_jid,
'to': api.connection.get().jid,
'type': 'chat',
'id': u.getUniqueId()
}).c('body').t(secondMessageText).up()
.c('active', {'xmlns': 'http://jabber.org/protocol/chatstates'}).tree()
);
await u.waitUntil(() => view.querySelectorAll('.chat-msg__text').length === 2);
const copyActions = view.querySelectorAll('.chat-msg__action-copy');
expect(copyActions.length).toBe(2);
let secondAction = copyActions[copyActions.length - 1];
expect(secondAction).not.toBeNull();
secondAction.click();
expect(spyClipboard).toHaveBeenCalledWith(secondMessageText);
}));
it("Can be quoted using a message action",
mock.initConverse(['chatBoxesFetched'], {}, async function (_converse) {
const { api } = _converse;
await mock.waitForRoster(_converse, 'current', 1);
await mock.openControlBox(_converse);
const contact_jid = mock.cur_names[0].replace(/ /g,'.').toLowerCase() + '@montague.lit';
await mock.openChatBoxFor(_converse, contact_jid);
const view = _converse.chatboxviews.get(contact_jid);
const textarea = view.querySelector('textarea.chat-textarea');
const firstMessageText = 'But soft, what light through yonder airlock breaks?';
textarea.value = firstMessageText;
const message_form = view.querySelector('converse-message-form');
message_form.onKeyDown({
target: textarea,
preventDefault: function preventDefault () {},
keyCode: 13 // Enter
});
await u.waitUntil(() => view.querySelectorAll('.chat-msg__text').length === 1);
// Quote with empty text area
expect(textarea.value).toBe('');
let firstAction = view.querySelector('.chat-msg__action-quote');
expect(firstAction).not.toBeNull();
firstAction.click();
expect(textarea.value).toBe('> ' + firstMessageText + '\n');
// Quote with already-present text
textarea.value = 'Hi!';
firstAction.click();
expect(textarea.value).toBe('Hi!\n> ' + firstMessageText + '\n');
// Test messages from other users
textarea.value = '';
const secondMessageText = 'Hello';
_converse.handleMessageStanza(
$msg({
'from': contact_jid,
'to': api.connection.get().jid,
'type': 'chat',
'id': u.getUniqueId()
}).c('body').t(secondMessageText).up()
.c('active', {'xmlns': 'http://jabber.org/protocol/chatstates'}).tree()
);
await u.waitUntil(() => view.querySelectorAll('.chat-msg__text').length === 2);
const quoteActions = view.querySelectorAll('.chat-msg__action-quote');
expect(quoteActions.length).toBe(2);
let secondAction = quoteActions[quoteActions.length - 1];
expect(secondAction).not.toBeNull();
secondAction.click();
expect(textarea.value).toBe('> ' + secondMessageText + '\n');
}));
});