Files
zulip/frontend_tests/casper_tests/04-compose.js
Steve Howell d604814347 casper: Improve logic to confirm message sends.
We now use `wait_for_message_fully_processed`
to check that messages are fully rendered.

Before this, we had loopholes where messages
sent outside the view were effectively ignored.
Now we explicitly ignore the check for the
one place we do that.

The more important behavior is for messages
that get sent to the current view.

Before this change, the older version of this
function declared victory as soon as we put the
server version of a locally echoed message into
the current message list's data.

This fixes flaky behavior with 07-stars in
particular, since we need the star icon
on our last message to be there before
we click on it.

Because this function is more robust now, we
can remove some redundant checks in 08-edit.js.
2020-03-26 14:54:02 -04:00

233 lines
6.8 KiB
JavaScript

var common = require('../casper_lib/common.js');
common.start_and_log_in();
var msgs_qty;
casper.then(function () {
casper.waitUntilVisible("#zhome");
});
casper.then(function () {
msgs_qty = this.evaluate(function () {
return $('#zhome .message_row').length;
});
});
// Send a message to try replying to
common.then_send_many([
{ stream: 'Verona',
subject: 'Reply test',
content: "We reply to this message",
},
{ recipient: "cordelia@zulip.com",
content: "And reply to this message",
},
]);
casper.then(function () {
casper.waitFor(function check_length() {
return casper.evaluate(function (expected_length) {
return $('#zhome .message_row').length === expected_length;
}, msgs_qty + 2);
});
});
casper.then(function () {
// TODO: Test opening the compose box from the left side buttons
casper.click('body');
casper.page.sendEvent('keypress', "c");
});
function check_compose_is_cleared() {
common.check_form(
'#send_message_form',
{
stream_message_recipient_stream: '',
stream_message_recipient_topic: '',
},
"Stream empty on new compose"
);
}
casper.then(function () {
casper.waitUntilVisible('#compose', function () {
casper.test.assertVisible('#stream-message', 'Stream input box visible');
check_compose_is_cleared();
casper.click('body');
casper.page.sendEvent('keypress', "x");
});
});
casper.then(function () {
casper.waitUntilVisible('#private_message_recipient', function () {
common.pm_recipient.expect("");
casper.click('body');
casper.page.sendEvent('keypress', 'c');
});
});
casper.then(function () {
casper.waitUntilVisible('#stream-message', function () {
check_compose_is_cleared();
// Check that when you reply to a message it pre-populates the stream and subject fields
casper.click('body');
});
});
casper.then(function () {
casper.waitWhileVisible('#stream-message', function () {
casper.clickLabel("We reply to this message");
});
});
casper.then(function () {
casper.waitUntilVisible('#stream-message', function () {
common.check_form(
'#send_message_form',
{
stream_message_recipient_stream: "Verona",
stream_message_recipient_topic: "Reply test",
},
"Stream populated after reply by click"
);
// Or recipient field
casper.click('body');
casper.clickLabel("And reply to this message");
});
});
casper.then(function () {
casper.waitUntilVisible('#private_message_recipient', function () {
common.pm_recipient.expect("cordelia@zulip.com");
common.keypress(27); //escape
casper.page.sendEvent('keypress', 'k');
casper.page.sendEvent('keypress', 'r');
});
});
casper.then(function () {
casper.waitUntilVisible('#stream-message', function () {
common.check_form(
'#send_message_form',
{
stream_message_recipient_stream: "Verona",
stream_message_recipient_topic: "Reply test",
},
"Stream populated after reply with `r`"
);
// Test "closing" the compose box
casper.click('body');
});
});
casper.then(function () {
casper.waitWhileVisible('#stream-message', function () {
casper.test.assertNotVisible('#stream-message', 'Close stream compose box');
casper.page.sendEvent('keypress', "x");
casper.click('body');
});
});
casper.then(function () {
casper.waitWhileVisible('#private-message', function () {
casper.test.assertNotVisible('#private-message', 'Close PM compose box');
});
});
// Test focus after narrowing to PMs with a user and typing 'c'
casper.then(function () {
casper.click('*[title="Narrow to your private messages with Cordelia Lear"]');
});
casper.then(function () {
var cordelia_user_id = common.get_user_id('cordelia@zulip.com');
var pm_li = 'li[data-user-ids-string="' + cordelia_user_id + '"].expanded_private_message.active-sub-filter';
casper.waitUntilVisible(pm_li, function () {
casper.page.sendEvent('keypress', 'c');
});
});
casper.then(function () {
casper.waitUntilVisible('#compose', function () {
casper.test.assertEval(function () {
return document.activeElement === $('.compose_table #stream_message_recipient_stream')[0];
}, 'Stream box focused after narrowing to PMs with a user and pressing `c`');
});
});
// Make sure multiple PM recipients display properly.
var recipients = ['cordelia@zulip.com', 'othello@zulip.com'];
casper.then(function () {
common.keypress(27); // escape to dismiss compose box
});
casper.waitWhileVisible('.message_comp');
common.then_send_message('private', {
recipient: recipients.join(','),
outside_view: true,
content: 'A huddle to check spaces',
});
casper.then(function () {
common.keypress(27); // escape to dismiss compose box
});
casper.then(function () {
common.un_narrow();
});
casper.waitUntilVisible('#zhome', function () {
casper.clickLabel('A huddle to check spaces');
});
casper.then(function () {
casper.waitUntilVisible('#compose', function () {
common.pm_recipient.expect(recipients.join(','));
});
});
casper.then(function () {
casper.waitUntilVisible('#markdown_preview', function () {
casper.test.assertNotVisible('#undo_markdown_preview', 'Write button is hidden');
casper.click("#markdown_preview");
});
});
casper.then(function () {
casper.waitWhileVisible("#markdown_preview", function () {
casper.test.assertVisible('#undo_markdown_preview', 'Write button is visible');
casper.test.assertEquals(casper.getHTML('#preview_content'), "Nothing to preview", "Nothing to preview");
casper.click("#undo_markdown_preview");
});
});
casper.then(function () {
casper.waitWhileVisible("#undo_markdown_preview", function () {
casper.test.assertVisible('#markdown_preview', 'Preview button is visible.');
casper.test.assertNotVisible('#undo_markdown_preview', 'Write button is hidden.');
casper.test.assertEquals(casper.getHTML('#preview_content'), "", "Markdown preview area is empty");
casper.fill('form[action^="/json/messages"]', {
content: '**Markdown Preview** >> Test for markdown preview',
}, false);
casper.click("#markdown_preview");
});
});
casper.then(function () {
casper.waitForSelectorTextChange("#preview_content", function () {
casper.test.assertEquals(casper.getHTML('#preview_content'), "<p><strong>Markdown Preview</strong> &gt;&gt; Test for markdown preview</p>", "Check markdown is previewed properly");
});
});
common.then_log_out();
casper.run(function () {
casper.test.done();
});