mirror of
https://github.com/zulip/zulip.git
synced 2026-07-03 21:10:12 +08:00
There is a hard to reproduce race condition causing these tests to occasionally fail. We believe it is caused by switching to the home tab and not properly waiting for all the messages to load; see Issue #1243. The tests are for the following pathway (not a high priority to test): 1. User starts editing a message. 2. allow_message_editing is turned off for the realm (in this case, by the user going to the admin page and turning it off). 3. User finishes editing the message and hits send.
444 lines
20 KiB
JavaScript
444 lines
20 KiB
JavaScript
var common = require('../casper_lib/common.js').common;
|
|
var test_credentials = require('../casper_lib/test_credentials.js').test_credentials;
|
|
|
|
common.start_and_log_in();
|
|
|
|
casper.then(function () {
|
|
casper.test.info('Administration page');
|
|
casper.click('a[href^="#administration"]');
|
|
casper.test.assertUrlMatch(/^http:\/\/[^\/]+\/#administration/, 'URL suggests we are on administration page');
|
|
casper.test.assertExists('#administration.tab-pane.active', 'Administration page is active');
|
|
});
|
|
|
|
// Test only admins may create streams Setting
|
|
casper.waitForSelector('input[type="checkbox"][id="id_realm_create_stream_by_admins_only"]', function () {
|
|
casper.click('input[type="checkbox"][id="id_realm_create_stream_by_admins_only"]');
|
|
casper.click('form.admin-realm-form input.btn');
|
|
|
|
// Test setting was activated
|
|
casper.waitUntilVisible('#admin-realm-create-stream-by-admins-only-status', function () {
|
|
casper.test.assertSelectorHasText('#admin-realm-create-stream-by-admins-only-status', 'Only Admins may now create new streams!');
|
|
casper.test.assertEval(function () {
|
|
return document.querySelector('input[type="checkbox"][id="id_realm_create_stream_by_admins_only"]').checked;
|
|
}, 'Only admins may create streams Setting activated');
|
|
});
|
|
});
|
|
|
|
casper.then(function () {
|
|
// Leave the page and return
|
|
casper.click('#settings-dropdown');
|
|
casper.click('a[href^="#subscriptions"]');
|
|
casper.click('#settings-dropdown');
|
|
casper.click('a[href^="#administration"]');
|
|
|
|
casper.waitForSelector('input[type="checkbox"][id="id_realm_create_stream_by_admins_only"]', function () {
|
|
// Test Setting was saved
|
|
casper.test.assertEval(function () {
|
|
return document.querySelector('input[type="checkbox"][id="id_realm_create_stream_by_admins_only"]').checked;
|
|
}, 'Only admins may create streams Setting saved');
|
|
|
|
// Deactivate setting
|
|
casper.click('input[type="checkbox"][id="id_realm_create_stream_by_admins_only"]');
|
|
casper.click('form.admin-realm-form input.btn');
|
|
casper.waitUntilVisible('#admin-realm-create-stream-by-admins-only-status', function () {
|
|
casper.test.assertSelectorHasText('#admin-realm-create-stream-by-admins-only-status', 'Any user may now create new streams!');
|
|
casper.test.assertEval(function () {
|
|
return !(document.querySelector('input[type="checkbox"][id="id_realm_create_stream_by_admins_only"]').checked);
|
|
}, 'Only admins may create streams Setting deactivated');
|
|
});
|
|
});
|
|
});
|
|
|
|
// Test user deactivation and reactivation
|
|
casper.waitForSelector('.user_row[id="[email protected]"]', function () {
|
|
casper.test.assertSelectorHasText('.user_row[id="[email protected]"]', 'Deactivate');
|
|
casper.click('.user_row[id="[email protected]"] .deactivate');
|
|
casper.test.assertTextExists('Deactivate [email protected]', 'Deactivate modal has right user');
|
|
casper.test.assertTextExists('Deactivate now', 'Deactivate now button available');
|
|
casper.click('#do_deactivate_user_button');
|
|
});
|
|
|
|
casper.waitForSelector('.user_row[id="[email protected]"].deactivated_user', function () {
|
|
casper.test.assertSelectorHasText('.user_row[id="[email protected]"]', 'Reactivate');
|
|
casper.click('.user_row[id="[email protected]"] .reactivate');
|
|
});
|
|
|
|
casper.waitForSelector('.user_row[id="[email protected]"]:not(.deactivated_user)', function () {
|
|
casper.test.assertSelectorHasText('.user_row[id="[email protected]"]', 'Deactivate');
|
|
});
|
|
|
|
// Test Deactivated users section of admin page
|
|
casper.waitForSelector('.user_row[id="[email protected]"]', function () {
|
|
casper.test.assertSelectorHasText('.user_row[id="[email protected]"]', 'Deactivate');
|
|
casper.click('.user_row[id="[email protected]"] .deactivate');
|
|
casper.test.assertTextExists('Deactivate [email protected]', 'Deactivate modal has right user');
|
|
casper.test.assertTextExists('Deactivate now', 'Deactivate now button available');
|
|
casper.click('#do_deactivate_user_button');
|
|
});
|
|
|
|
casper.then(function () {
|
|
// Leave the page and return
|
|
casper.click('#settings-dropdown');
|
|
casper.click('a[href^="#subscriptions"]');
|
|
casper.click('#settings-dropdown');
|
|
casper.click('a[href^="#administration"]');
|
|
|
|
casper.test.assertSelectorHasText("#administration a[aria-controls='deactivated-users']", "Deactivated Users");
|
|
casper.click("#administration a[aria-controls='deactivated-users']");
|
|
|
|
|
|
casper.waitForSelector('#admin_deactivated_users_table .user_row[id="[email protected]"] .reactivate', function () {
|
|
casper.test.assertSelectorHasText('#admin_deactivated_users_table .user_row[id="[email protected]"]', 'Reactivate');
|
|
casper.click('#admin_deactivated_users_table .user_row[id="[email protected]"] .reactivate');
|
|
});
|
|
|
|
casper.waitForSelector('#admin_deactivated_users_table .user_row[id="[email protected]"] button:not(.reactivate)', function () {
|
|
casper.test.assertSelectorHasText('#admin_deactivated_users_table .user_row[id="[email protected]"]', 'Deactivate');
|
|
});
|
|
|
|
casper.test.assertSelectorHasText("#administration a[aria-controls='organization']", "Organization");
|
|
casper.click("#administration a[aria-controls='organization']");
|
|
});
|
|
|
|
// Test bot deactivation and reactivation
|
|
casper.waitForSelector('.user_row[id="[email protected]"]', function () {
|
|
casper.test.assertSelectorHasText('.user_row[id="[email protected]"]', 'Deactivate');
|
|
casper.click('.user_row[id="[email protected]"] .deactivate');
|
|
});
|
|
|
|
casper.waitForSelector('.user_row[id="[email protected]"].deactivated_user', function () {
|
|
casper.test.assertSelectorHasText('.user_row[id="[email protected]"]', 'Reactivate');
|
|
casper.click('.user_row[id="[email protected]"] .reactivate');
|
|
});
|
|
casper.waitForSelector('.user_row[id="[email protected]"]:not(.deactivated_user)', function () {
|
|
casper.test.assertSelectorHasText('.user_row[id="[email protected]"]', 'Deactivate');
|
|
});
|
|
|
|
// Test custom realm emoji
|
|
casper.waitForSelector('.admin-emoji-form', function () {
|
|
casper.fill('form.admin-emoji-form', {
|
|
'name': 'MouseFace',
|
|
'url': 'http://localhost:9991/static/images/integrations/logos/jenkins.png'
|
|
});
|
|
casper.click('form.admin-emoji-form input.btn');
|
|
});
|
|
|
|
casper.waitUntilVisible('div#admin-emoji-status', function () {
|
|
casper.test.assertSelectorHasText('div#admin-emoji-status', 'Custom emoji added!');
|
|
});
|
|
|
|
casper.waitForSelector('.emoji_row', function () {
|
|
casper.test.assertSelectorHasText('.emoji_row .emoji_name', 'MouseFace');
|
|
casper.test.assertExists('.emoji_row img[src="http://localhost:9991/static/images/integrations/logos/jenkins.png"]');
|
|
casper.click('.emoji_row button.delete');
|
|
});
|
|
|
|
casper.waitWhileSelector('.emoji_row', function () {
|
|
casper.test.assertDoesntExist('.emoji_row');
|
|
});
|
|
|
|
function get_suggestions(str) {
|
|
casper.then(function () {
|
|
casper.evaluate(function (str) {
|
|
$('.create_default_stream')
|
|
.focus()
|
|
.val(str)
|
|
.trigger($.Event('keyup', { which: 0 }));
|
|
}, str);
|
|
});
|
|
}
|
|
|
|
function select_from_suggestions(item) {
|
|
casper.then(function () {
|
|
casper.evaluate(function (item) {
|
|
var tah = $('.create_default_stream').data().typeahead;
|
|
tah.mouseenter({
|
|
currentTarget: $('.typeahead:visible li:contains("'+item+'")')[0]
|
|
});
|
|
tah.select();
|
|
}, {item: item});
|
|
});
|
|
}
|
|
|
|
// Test default stream creation and addition
|
|
casper.then(function () {
|
|
casper.click('#settings-dropdown');
|
|
casper.click('a[href^="#subscriptions"]');
|
|
casper.click('#settings-dropdown');
|
|
casper.click('a[href^="#administration"]');
|
|
var stream_name = "Scotland";
|
|
// It matches with all the stream names which has 'O' as a substring (Rome, Scotland, Verona etc).
|
|
// I used 'O' to make sure that it works even if there are multiple suggestions.
|
|
// Capital 'O' is used instead of small 'o' to make sure that the suggestions are not case sensitive.
|
|
get_suggestions("O");
|
|
select_from_suggestions(stream_name);
|
|
casper.waitForSelector('.default_stream_row[id='+stream_name+']', function () {
|
|
casper.test.assertSelectorHasText('.default_stream_row[id='+stream_name+'] .default_stream_name', stream_name);
|
|
});
|
|
casper.waitForSelector('.default_stream_row[id='+stream_name+']', function () {
|
|
casper.test.assertSelectorHasText('.default_stream_row[id='+stream_name+'] .default_stream_name', stream_name);
|
|
casper.click('.default_stream_row[id='+stream_name+'] button.remove-default-stream');
|
|
});
|
|
casper.waitWhileSelector('.default_stream_row[id='+stream_name+']', function () {
|
|
casper.test.assertDoesntExist('.default_stream_row[id='+stream_name+']');
|
|
});
|
|
});
|
|
// TODO: Test stream deletion
|
|
|
|
// Test turning message editing off and on
|
|
// go to home page
|
|
casper.then(function () {
|
|
casper.click('.global-filter[data-name="home"]');
|
|
});
|
|
|
|
// send two messages
|
|
common.then_send_message('stream', {
|
|
stream: 'Verona',
|
|
subject: 'edits',
|
|
content: 'test editing 1'
|
|
});
|
|
common.then_send_message('stream', {
|
|
stream: 'Verona',
|
|
subject: 'edits',
|
|
content: 'test editing 2'
|
|
});
|
|
casper.waitForText("test editing 1");
|
|
casper.waitForText("test editing 2");
|
|
|
|
// wait for message to be sent
|
|
casper.waitFor(function () {
|
|
return casper.evaluate(function () {
|
|
return current_msg_list.last().local_id === undefined;
|
|
});
|
|
});
|
|
|
|
// edit the last message just sent
|
|
casper.then(function () {
|
|
casper.evaluate(function () {
|
|
var msg = $('#zhome .message_row:last');
|
|
msg.find('.info').click();
|
|
$('.popover_edit_message').click();
|
|
});
|
|
});
|
|
casper.waitForSelector(".message_edit_content", function () {
|
|
casper.evaluate(function () {
|
|
var msg = $('#zhome .message_row:last');
|
|
msg.find('.message_edit_content').val("test edited");
|
|
msg.find('.message_edit_save').click();
|
|
});
|
|
});
|
|
|
|
// check that the message was indeed edited
|
|
casper.waitWhileVisible("textarea.message_edit_content", function () {
|
|
casper.test.assertSelectorHasText(".last_message .message_content", "test edited");
|
|
});
|
|
|
|
// Commented out due to Issue #1243
|
|
// // edit the same message, but don't hit save this time
|
|
// casper.then(function () {
|
|
// casper.evaluate(function () {
|
|
// var msg = $('#zhome .message_row:last');
|
|
// msg.find('.info').click();
|
|
// $('.popover_edit_message').click();
|
|
// });
|
|
// });
|
|
// casper.waitForSelector(".message_edit_content", function () {
|
|
// casper.evaluate(function () {
|
|
// var msg = $('#zhome .message_row:last');
|
|
// msg.find('.message_edit_content').val("test RE-edited");
|
|
// });
|
|
// });
|
|
|
|
// go to admin page
|
|
casper.then(function () {
|
|
casper.click('#settings-dropdown');
|
|
casper.click('a[href^="#administration"]');
|
|
});
|
|
|
|
// deactivate "allow message editing"
|
|
casper.waitForSelector('input[type="checkbox"][id="id_realm_allow_message_editing"]', function () {
|
|
casper.click('input[type="checkbox"][id="id_realm_allow_message_editing"]');
|
|
casper.click('form.admin-realm-form input.btn');
|
|
casper.waitUntilVisible('#admin-realm-message-editing-status', function () {
|
|
casper.test.assertSelectorHasText('#admin-realm-message-editing-status', 'Users can no longer edit their past messages!');
|
|
casper.test.assertEval(function () {
|
|
return !(document.querySelector('input[type="checkbox"][id="id_realm_allow_message_editing"]').checked);
|
|
}, 'Allow message editing Setting de-activated');
|
|
});
|
|
});
|
|
|
|
// go back to home page
|
|
casper.then(function () {
|
|
casper.click('.global-filter[data-name="home"]');
|
|
});
|
|
|
|
// Commented out due to Issue #1243
|
|
// // try to save the half-finished edit
|
|
// casper.waitForSelector('.message_table', function () {
|
|
// casper.then(function () {
|
|
// casper.evaluate(function () {
|
|
// var msg = $('#zhome .message_row:last');
|
|
// msg.find('.message_edit_save').click();
|
|
// });
|
|
// });
|
|
// });
|
|
|
|
// // make sure we get the right error message, and that the message hasn't actually changed
|
|
// casper.waitForSelector("div.edit_error", function () {
|
|
// casper.test.assertSelectorHasText('div.edit_error', 'Error saving edit: Your organization has turned off message editing.');
|
|
// casper.test.assertSelectorHasText(".last_message .message_content", "test edited");
|
|
// });
|
|
|
|
// Check that edit link no longer appears in the popover menu
|
|
// TODO: also check that the edit icon no longer appears next to the message
|
|
casper.then(function () {
|
|
casper.waitForSelector('.message_row');
|
|
// Note that this could have a false positive, e.g. if all the messages aren't
|
|
// loaded yet. See Issue #1243
|
|
casper.evaluate(function () {
|
|
var msg = $('#zhome .message_row:last');
|
|
msg.find('.info').click();
|
|
});
|
|
casper.test.assertDoesntExist('.popover_edit_message');
|
|
casper.evaluate(function () {
|
|
var msg = $('#zhome .message_row:last');
|
|
msg.find('.info').click();
|
|
});
|
|
});
|
|
|
|
// go back to admin page, and reactivate "allow message editing"
|
|
casper.then(function () {
|
|
casper.click('#settings-dropdown');
|
|
casper.click('a[href^="#administration"]');
|
|
});
|
|
casper.waitForSelector('input[type="checkbox"][id="id_realm_allow_message_editing"]', function () {
|
|
casper.click('input[type="checkbox"][id="id_realm_allow_message_editing"]');
|
|
casper.click('form.admin-realm-form input.btn');
|
|
casper.waitUntilVisible('#admin-realm-message-editing-status', function () {
|
|
casper.test.assertSelectorHasText('#admin-realm-message-editing-status', 'Users can now edit topics for all their messages, and the content of messages which are less than 10 minutes old.');
|
|
casper.test.assertEval(function () {
|
|
return document.querySelector('input[type="checkbox"][id="id_realm_allow_message_editing"]').checked;
|
|
}, 'Allow message editing Setting re-activated');
|
|
});
|
|
});
|
|
|
|
// Commented out due to Issue #1243
|
|
// go back home
|
|
// casper.then(function () {
|
|
// casper.click('.global-filter[data-name="home"]');
|
|
// });
|
|
|
|
// // save our edit
|
|
// casper.waitForSelector('.message_table', function () {
|
|
// casper.then(function () {
|
|
// casper.evaluate(function () {
|
|
// var msg = $('#zhome .message_row:last');
|
|
// msg.find('.message_edit_save').click();
|
|
// });
|
|
// });
|
|
// });
|
|
|
|
// // check that edit went through
|
|
// casper.waitWhileVisible("textarea.message_edit_content", function () {
|
|
// casper.test.assertSelectorHasText(".last_message .message_content", "test RE-edited");
|
|
// });
|
|
|
|
// check that the edit link reappears in popover menu
|
|
// TODO check for edit icon next to message on hover
|
|
// casper.then(function () {
|
|
// casper.evaluate(function () {
|
|
// var msg = $('#zhome .message_row:last');
|
|
// msg.find('.info').click();
|
|
// });
|
|
// casper.test.assertExists('.popover_edit_message');
|
|
// casper.evaluate(function () {
|
|
// var msg = $('#zhome .message_row:last');
|
|
// msg.find('.info').click();
|
|
// });
|
|
// });
|
|
|
|
// go to admin page
|
|
casper.then(function () {
|
|
casper.test.info('Administration page');
|
|
casper.click('a[href^="#administration"]');
|
|
casper.test.assertUrlMatch(/^http:\/\/[^\/]+\/#administration/, 'URL suggests we are on administration page');
|
|
casper.test.assertExists('#administration.tab-pane.active', 'Administration page is active');
|
|
});
|
|
|
|
casper.waitForSelector('form.admin-realm-form input.btn', function () {
|
|
// deactivate message editing
|
|
casper.waitForSelector('input[type="checkbox"][id="id_realm_allow_message_editing"]', function () {
|
|
casper.evaluate(function () {
|
|
$('input[type="text"][id="id_realm_message_content_edit_limit_minutes"]').val('4');
|
|
});
|
|
casper.click('input[type="checkbox"][id="id_realm_allow_message_editing"]');
|
|
casper.click('form.admin-realm-form input.btn');
|
|
casper.waitUntilVisible('#admin-realm-message-editing-status', function () {
|
|
casper.test.assertSelectorHasText('#admin-realm-message-editing-status', 'Users can no longer edit their past messages!');
|
|
casper.test.assertEval(function () {
|
|
return !(document.querySelector('input[type="checkbox"][id="id_realm_allow_message_editing"]').checked);
|
|
}, 'Allow message editing Setting de-activated');
|
|
casper.test.assertEval(function () {
|
|
return $('input[type="text"][id="id_realm_message_content_edit_limit_minutes"]').val() === '4';
|
|
}, 'Message content edit limit now 4');
|
|
});
|
|
});
|
|
|
|
// allow message editing again, and check that the old edit limit is still there
|
|
casper.waitForSelector('input[type="checkbox"][id="id_realm_allow_message_editing"]', function () {
|
|
casper.click('input[type="checkbox"][id="id_realm_allow_message_editing"]');
|
|
casper.click('form.admin-realm-form input.btn');
|
|
casper.waitUntilVisible('#admin-realm-message-editing-status', function () {
|
|
casper.test.assertSelectorHasText('#admin-realm-message-editing-status', 'Users can now edit topics for all their messages, and the content of messages which are less than 4 minutes old.');
|
|
casper.test.assertEval(function () {
|
|
return document.querySelector('input[type="checkbox"][id="id_realm_allow_message_editing"]').checked;
|
|
}, 'Allow message editing Setting activated');
|
|
casper.test.assertEval(function () {
|
|
return $('input[type="text"][id="id_realm_message_content_edit_limit_minutes"]').val() === '4';
|
|
}, 'Message content edit limit still 4');
|
|
});
|
|
});
|
|
|
|
// allow arbitrary message editing
|
|
casper.waitForSelector('input[type="checkbox"][id="id_realm_allow_message_editing"]', function () {
|
|
casper.evaluate(function () {
|
|
$('input[type="text"][id="id_realm_message_content_edit_limit_minutes"]').val('0');
|
|
});
|
|
casper.click('form.admin-realm-form input.btn');
|
|
casper.waitUntilVisible('#admin-realm-message-editing-status', function () {
|
|
casper.test.assertSelectorHasText('#admin-realm-message-editing-status', 'Users can now edit the content and topics of all their past messages!');
|
|
casper.test.assertEval(function () {
|
|
return document.querySelector('input[type="checkbox"][id="id_realm_allow_message_editing"]').checked;
|
|
}, 'Allow message editing Setting still activated');
|
|
casper.test.assertEval(function () {
|
|
return $('input[type="text"][id="id_realm_message_content_edit_limit_minutes"]').val() === '0';
|
|
}, 'Message content edit limit is 0');
|
|
});
|
|
});
|
|
|
|
// disallow message editing, with illegal edit limit value. should be fixed by admin.js
|
|
casper.waitForSelector('input[type="checkbox"][id="id_realm_allow_message_editing"]', function () {
|
|
casper.evaluate(function () {
|
|
$('input[type="text"][id="id_realm_message_content_edit_limit_minutes"]').val('moo');
|
|
});
|
|
casper.click('input[type="checkbox"][id="id_realm_allow_message_editing"]');
|
|
casper.click('form.admin-realm-form input.btn');
|
|
casper.waitUntilVisible('#admin-realm-message-editing-status', function () {
|
|
casper.test.assertSelectorHasText('#admin-realm-message-editing-status', 'Users can no longer edit their past messages!');
|
|
casper.test.assertEval(function () {
|
|
return !(document.querySelector('input[type="checkbox"][id="id_realm_allow_message_editing"]').checked);
|
|
}, 'Allow message editing Setting de-activated');
|
|
casper.test.assertEval(function () {
|
|
return $('input[type="text"][id="id_realm_message_content_edit_limit_minutes"]').val() === '10';
|
|
}, 'Message content edit limit has been reset to its default');
|
|
});
|
|
});
|
|
});
|
|
|
|
|
|
common.then_log_out();
|
|
|
|
casper.run(function () {
|
|
casper.test.done();
|
|
});
|