VulpesOS/gaia/apps/sms/test/marionette/new_activity_test.js
OverSu b38dea0597 Publish Vulpes Preview 15 sources for desktop, Android and Tundra
Share Gaia assets and adapters, keep private profiles and development documents local, and update both public READMEs.
2026-09-30 23:13:03 +02:00

258 lines
7.8 KiB
JavaScript
Executable file

/* global require, marionette, setup, suite, test, __dirname */
'use strict';
var assert = require('chai').assert;
var Messages = require('./lib/messages.js');
var MessagesActivityCaller = require('./lib/messages_activity_caller.js');
var Storage = require('./lib/storage.js');
marionette('Messages as "new" activity target', function() {
var apps = {};
apps[MessagesActivityCaller.ORIGIN] = __dirname + '/apps/activitycaller';
var client = marionette.client({
profile: {
apps: apps
}
});
var messagesApp, activityCallerApp, storage;
function launchAsActivity(activityData) {
var smsMessage = {
id: 1,
iccId: null,
threadId: 1,
sender: null,
receiver: '+200',
type: 'sms',
delivery: 'sent',
body: 'Workload message',
timestamp: Date.now()
};
storage.setMessagesStorage([{
id: smsMessage.threadId,
body: smsMessage.body,
lastMessageType: smsMessage.type,
timestamp: smsMessage.timestamp,
messages: [smsMessage],
participants: [smsMessage.receiver]
}]);
storage.setContactsStorage([{
name: ['Alan Turing'],
tel: [{
value: '+100',
type: 'Mobile'
}]
}]);
activityCallerApp.sendMessage(activityData);
messagesApp.switchTo();
}
function assertIsFocused(element, message) {
assert.isTrue(element.scriptWith(function(el) {
return document.activeElement === el;
}), message);
}
setup(function() {
messagesApp = Messages.create(client);
activityCallerApp = MessagesActivityCaller.create(client);
storage = Storage.create(client);
client.loader.getMockManager('sms').inject([
'test_storages',
'test_blobs',
'navigator_moz_icc_manager',
'navigator_moz_mobile_message',
'navigator_moz_contacts'
]);
});
suite('Send new message', function() {
var content = 'Let\'s rock - http://mozilla.org!';
var number = '+123456';
setup(function() {
activityCallerApp.launch();
});
test('Activity with malicious content', function() {
var maliciousContent =
content + '<img src="/" onerror="delete window.Compose;" />';
launchAsActivity({ number: number, body: maliciousContent });
// Wait until message input is filled with the content
client.scope({ searchTimeout: 100 }).waitFor(function() {
return messagesApp.Composer.messageInput.text() === maliciousContent;
});
// Verify that xss wasn't successful for composer case
assert.isTrue(client.executeScript(function() {
return !!window.wrappedJSObject.Compose;
}), 'XSS should not be performed');
client.waitFor(() => messagesApp.Composer.sendButton.enabled());
assert.equal(
messagesApp.NewMessage.header.getAttribute('action'), 'close',
'Close activity button should be visible'
);
messagesApp.send();
// Verify that everything is fine with rendered message content
var message = messagesApp.Conversation.message;
assert.equal(
messagesApp.Conversation.getMessageContent(message).text(),
maliciousContent
);
// Validate that header is correctly set even that thread list hasn't
// been loaded yet.
assert.equal(messagesApp.Conversation.headerTitle.text(), number);
assert.equal(
messagesApp.NewMessage.header.getAttribute('action'), 'close',
'Close activity button should be visible'
);
// Verify that xss wasn't successful for thread case
assert.isTrue(client.executeScript(function() {
return !!window.wrappedJSObject.Compose;
}), 'XSS should not be performed');
});
test('Activity with "body" only', function() {
launchAsActivity({ body: content });
// Wait until message input is filled with the content
client.waitFor(
() => messagesApp.Composer.messageInput.text() === content
);
assert.isFalse(messagesApp.Composer.sendButton.enabled());
assert.equal(messagesApp.NewMessage.recipients.length, 0);
assert.equal(
messagesApp.NewMessage.header.getAttribute('action'), 'close',
'Close activity button should be visible'
);
assertIsFocused(
messagesApp.NewMessage.recipientsInput,
'Recipient input should be focused'
);
});
test('Activity with "body" and unknown "number"', function() {
launchAsActivity({ number: number, body: content });
// Wait until message input is filled with the content
client.waitFor(
() => messagesApp.Composer.messageInput.text() === content
);
var recipients = messagesApp.NewMessage.recipients;
assert.equal(recipients.length, 1);
assert.equal(recipients[0].text(), number);
assert.equal(recipients[0].getAttribute('data-source'), 'manual');
client.waitFor(() => messagesApp.Composer.sendButton.enabled());
assert.equal(
messagesApp.NewMessage.header.getAttribute('action'), 'close',
'Close activity button should be visible'
);
assertIsFocused(
messagesApp.Composer.messageInput, 'Message input should be focused'
);
});
test('Activity with "body" and contact "number"', function() {
// Send message to number that has contact associated with it
launchAsActivity({ number: '+100', body: content });
// Wait until message input is filled with the content
client.waitFor(
() => messagesApp.Composer.messageInput.text() === content
);
var recipients = messagesApp.NewMessage.recipients;
assert.equal(recipients.length, 1);
assert.equal(recipients[0].text(), 'Alan Turing');
assert.equal(recipients[0].getAttribute('data-source'), 'contacts');
client.waitFor(() => messagesApp.Composer.sendButton.enabled());
assert.equal(
messagesApp.NewMessage.header.getAttribute('action'), 'close',
'Close activity button should be visible'
);
assertIsFocused(
messagesApp.Composer.messageInput, 'Message input should be focused'
);
});
test('Activity with thread "number"', function() {
// Send message to number that has thread associated with it
launchAsActivity({ number: '+200' });
// Verify that we entered the right thread
var message = messagesApp.Conversation.message;
assert.equal(
messagesApp.Conversation.getMessageContent(message).text(),
'Workload message'
);
assert.isFalse(messagesApp.Composer.sendButton.enabled());
assert.equal(
messagesApp.NewMessage.header.getAttribute('action'), 'close',
'Close activity button should be visible'
);
// Validate that header is correctly set even that thread list hasn't
// been loaded yet.
assert.equal(messagesApp.Conversation.headerTitle.text(), '+200');
assertIsFocused(
messagesApp.Composer.messageInput, 'Message input should be focused'
);
});
test('Activity with thread "number" and "body"', function() {
// Send message to number that has thread associated with it
launchAsActivity({ number: '+200', body: content });
// Wait until message input is filled with the content
client.waitFor(
() => messagesApp.Composer.messageInput.text() === content
);
var recipients = messagesApp.NewMessage.recipients;
assert.equal(recipients.length, 1);
assert.equal(recipients[0].text(), '+200');
assert.equal(recipients[0].getAttribute('data-source'), 'manual');
client.waitFor(() => messagesApp.Composer.sendButton.enabled());
assert.equal(
messagesApp.NewMessage.header.getAttribute('action'), 'close',
'Close activity button should be visible'
);
assertIsFocused(
messagesApp.Composer.messageInput, 'Message input should be focused'
);
});
});
});