Files
zulip/frontend_tests/casper_tests/10-admin.js
Yago González 6837fc5d56 i18n: Add missing strings for custom profile fields and fix capitalization.
The "Short/Long Text" option for custom profile fields wasn't properly
capitalized (i.e. "Text" should have been all lowercase), and also
wasn't properly tagged for translation.

For the sake of consistency, the change to proper capitalization has
also been applied to the models and any tests involving this feature.

Due to a bug in Django, it complained about the models having changed
and thus not being consistent with the migrations. That isn't actually
true (since the database stores the numeric values for each key), but
the migrations have been modified to avoid this error. This does not
affect the migrations' behaviour in any way.
2018-05-06 19:44:36 -07:00

452 lines
17 KiB
JavaScript

var common = require('../casper_lib/common.js').common;
common.start_and_log_in();
casper.then(function () {
var menu_selector = '#settings-dropdown';
casper.waitUntilVisible(menu_selector, function () {
casper.click(menu_selector);
});
});
casper.then(function () {
casper.test.info('Organization page');
casper.click('a[href^="#organization"]');
});
casper.waitForSelector('#settings_overlay_container.show', function () {
casper.test.info('Organization page is active');
casper.test.assertUrlMatch(/^http:\/\/[^/]+\/#organization/, 'URL suggests we are on organization page');
});
casper.then(function () {
casper.click("li[data-section='organization-settings']");
});
// Test changing notifications stream
casper.then(function () {
casper.test.info('Changing notifications stream to Verona by filtering with "verona"');
casper.click("#id_realm_notifications_stream > button.dropdown-toggle");
casper.waitUntilVisible('#id_realm_notifications_stream ul.dropdown-menu', function () {
casper.sendKeys('#id_realm_notifications_stream .dropdown-search > input[type=text]', 'verona');
casper.click("#id_realm_notifications_stream .dropdown-list-body li.stream_name");
});
casper.waitUntilVisible('#admin-realm-notifications-stream-status', function () {
casper.test.assertSelectorHasText('#admin-realm-notifications-stream-status',
'Notifications stream changed!');
casper.test.assertSelectorHasText('#realm_notifications_stream_name', '#Verona');
});
});
casper.then(function () {
casper.click(".notifications-stream-disable");
casper.waitUntilVisible('#admin-realm-notifications-stream-status', function () {
casper.test.assertSelectorHasText('#admin-realm-notifications-stream-status',
'Notifications stream disabled!');
casper.test.assertSelectorHasText('#realm_notifications_stream_name', 'Disabled');
});
});
// Test changing signup notifications stream
casper.then(function () {
casper.test.info('Changing signup notifications stream to Verona by filtering with "verona"');
casper.click("#id_realm_signup_notifications_stream > button.dropdown-toggle");
casper.waitUntilVisible('#id_realm_signup_notifications_stream ul.dropdown-menu', function () {
casper.sendKeys('#id_realm_signup_notifications_stream .dropdown-search > input[type=text]', 'verona');
casper.click("#id_realm_signup_notifications_stream .dropdown-list-body li.stream_name");
});
casper.waitUntilVisible('#admin-realm-signup-notifications-stream-status', function () {
casper.test.assertSelectorHasText('#admin-realm-signup-notifications-stream-status',
'Signup notifications stream changed!');
casper.test.assertSelectorHasText('#realm_signup_notifications_stream_name', '#Verona');
});
});
casper.then(function () {
casper.click(".signup-notifications-stream-disable");
casper.waitUntilVisible('#admin-realm-signup-notifications-stream-status', function () {
casper.test.assertSelectorHasText('#admin-realm-signup-notifications-stream-status',
'Signup notifications stream disabled!');
casper.test.assertSelectorHasText('#realm_signup_notifications_stream_name', 'Disabled');
});
});
// Test permissions setting
casper.then(function () {
casper.click("li[data-section='organization-permissions']");
});
function submit_permissions_change() {
casper.test.assertSelectorHasText('#org-submit-other-permissions', "Save");
casper.click('#org-submit-other-permissions');
}
// Test setting limiting stream creation to administrators
casper.then(function () {
casper.test.info("Test setting limiting stream creation to administrators");
casper.waitUntilVisible("#id_realm_create_stream_permission", function () {
casper.evaluate(function () {
$("#id_realm_create_stream_permission").val("by_admins_only").change();
});
submit_permissions_change();
});
});
casper.then(function () {
// Test setting was activated
casper.waitUntilVisible('#org-submit-other-permissions[data-status="saved"]', function () {
casper.test.assertSelectorHasText('#org-submit-other-permissions',
'Saved');
});
});
casper.then(function () {
casper.waitUntilVisible("#id_realm_create_stream_permission", function () {
casper.evaluate(function () {
$("#id_realm_create_stream_permission").val("by_admin_user_with_custom_time").change();
$("#id_realm_waiting_period_threshold").val('6');
});
submit_permissions_change();
});
});
casper.then(function () {
// Test setting was activated
casper.waitUntilVisible('#org-submit-other-permissions[data-status="saved"]', function () {
casper.test.assertSelectorHasText('#org-submit-other-permissions',
'Saved');
});
});
casper.then(function () {
// Leave the page and return
casper.click('#settings-dropdown');
casper.click('a[href^="#streams"]');
casper.click('#settings-dropdown');
casper.click('a[href^="#organization"]');
});
casper.waitUntilVisible('#id_realm_create_stream_permission', function () {
// Test Setting was saved
casper.test.assertEval(function () {
return $('input[type="text"][id="id_realm_waiting_period_threshold"]').val() === '6';
}, 'Waiting period threshold set to 6 days');
// Deactivate setting
casper.evaluate(function () {
$("#id_realm_create_stream_permission").val("by_admins_only").change();
});
submit_permissions_change();
});
casper.then(function () {
// Test setting was activated
casper.waitUntilVisible('#org-submit-other-permissions[data-status="saved"]', function () {
casper.test.assertSelectorHasText('#org-submit-other-permissions',
'Saved');
});
});
casper.then(function () {
// Test custom realm emoji
casper.click("li[data-section='emoji-settings']");
casper.waitUntilVisible('.admin-emoji-form', function () {
casper.fill('form.admin-emoji-form', {
name: 'mouseface',
emoji_file_input: 'static/images/logo/zulip-icon-128x128.png',
}, true);
});
});
casper.then(function () {
casper.waitUntilVisible('div#admin-emoji-status', function () {
casper.test.assertSelectorHasText('div#admin-emoji-status', 'Custom emoji added!');
});
});
casper.then(function () {
casper.waitUntilVisible('tr#emoji_mouseface', function () {
casper.test.assertSelectorHasText('tr#emoji_mouseface .emoji_name', 'mouseface');
casper.test.assertExists('tr#emoji_mouseface img');
casper.click('tr#emoji_mouseface button.delete');
});
});
casper.then(function () {
casper.waitWhileVisible('tr#emoji_mouseface', function () {
casper.test.assertDoesntExist('tr#emoji_mouseface');
});
});
// Test custom profile fields
casper.test.info("Testing custom profile fields");
casper.thenClick("li[data-section='profile-field-settings']");
casper.then(function () {
casper.waitUntilVisible('.admin-profile-field-form', function () {
casper.fill('form.admin-profile-field-form', {
name: 'Teams',
field_type: '1',
});
casper.click("form.admin-profile-field-form button[type='submit']");
});
});
casper.then(function () {
casper.waitUntilVisible('#admin-profile-field-status img', function () {
casper.test.assertSelectorHasText('div#admin-profile-field-status', 'Saved');
});
casper.waitUntilVisible('.profile-field-row span.profile_field_name', function () {
casper.test.assertSelectorHasText('.profile-field-row span.profile_field_name', 'Teams');
casper.test.assertSelectorHasText('.profile-field-row span.profile_field_type', 'Short text');
casper.click('.profile-field-row button.open-edit-form');
});
});
casper.then(function () {
casper.waitUntilVisible('tr.profile-field-form form', function () {
casper.fill('tr.profile-field-form form.name-setting', {
name: 'team',
});
casper.click('tr.profile-field-form button.submit');
});
});
casper.then(function () {
casper.waitUntilVisible('#admin-profile-field-status img', function () {
casper.test.assertSelectorHasText('div#admin-profile-field-status', 'Saved');
});
casper.waitForSelectorTextChange('.profile-field-row span.profile_field_name', function () {
casper.test.assertSelectorHasText('.profile-field-row span.profile_field_name', 'team');
casper.test.assertSelectorHasText('.profile-field-row span.profile_field_type', 'Short text');
casper.click('.profile-field-row button.delete');
});
});
casper.then(function () {
casper.waitUntilVisible('#admin-profile-field-status img', function () {
casper.test.assertSelectorHasText('div#admin-profile-field-status', 'Saved');
});
});
// Test custom realm filters
casper.then(function () {
casper.click("li[data-section='filter-settings']");
casper.waitUntilVisible('.admin-filter-form', function () {
casper.fill('form.admin-filter-form', {
pattern: '#(?P<id>[0-9]+)',
url_format_string: 'https://trac.example.com/ticket/%(id)s',
});
casper.click('form.admin-filter-form button.button');
});
});
casper.then(function () {
casper.waitUntilVisible('div#admin-filter-status', function () {
casper.test.assertSelectorHasText('div#admin-filter-status', 'Custom filter added!');
});
});
casper.then(function () {
casper.waitUntilVisible('.filter_row', function () {
casper.test.assertSelectorHasText('.filter_row span.filter_pattern', '#(?P<id>[0-9]+)');
casper.test.assertSelectorHasText('.filter_row span.filter_url_format_string', 'https://trac.example.com/ticket/%(id)s');
casper.click('.filter_row button');
});
});
casper.then(function () {
casper.waitWhileVisible('.filter_row', function () {
casper.test.assertDoesntExist('.filter_row');
});
});
casper.then(function () {
casper.waitUntilVisible('.admin-filter-form', function () {
casper.fill('form.admin-filter-form', {
pattern: 'a$',
url_format_string: 'https://trac.example.com/ticket/%(id)s',
});
casper.click('form.admin-filter-form button.button');
});
});
casper.then(function () {
casper.waitUntilVisible('div#admin-filter-pattern-status', function () {
casper.test.assertSelectorHasText('div#admin-filter-pattern-status', 'Failed: Invalid filter pattern, you must use the following format OPTIONAL_PREFIX(?P<id>.+)');
});
});
var stream_name = "Scotland";
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("li[data-section='default-streams-list']");
casper.waitUntilVisible(".create_default_stream", function () {
// It matches with all the stream names which has 'O' as a substring (Rome, Scotland, Verona
// etc). 'O' is used to make sure that it works even if there are multiple suggestions.
// Uppercase 'O' is used instead of the lowercase version to make sure that the suggestions
// are case insensitive.
get_suggestions("O");
select_from_suggestions(stream_name);
});
});
casper.then(function () {
casper.waitUntilVisible('.default_stream_row[id='+stream_name+']', function () {
casper.test.assertSelectorHasText('.default_stream_row[id='+stream_name+'] .default_stream_name', stream_name);
});
});
casper.then(function () {
casper.waitUntilVisible('.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.then(function () {
casper.waitWhileVisible('.default_stream_row[id='+stream_name+']', function () {
casper.test.assertDoesntExist('.default_stream_row[id='+stream_name+']');
});
});
// TODO: Test stream deletion
// Test uploading realm icon image
casper.then(function () {
casper.click("li[data-section='organization-profile']");
var selector = 'img#realm-settings-icon[src^="https://secure.gravatar.com/avatar/"]';
casper.waitUntilVisible(selector, function () {
casper.test.assertEqual(casper.visible('#realm_icon_delete_button'), false);
// Hack: Rather than submitting the form, we just fill the
// form and then trigger a click event by clicking the button.
casper.fill('form.admin-realm-form', {
realm_icon_file_input: 'static/images/logo/zulip-icon-128x128.png',
}, false);
casper.click("#realm_icon_upload_button");
casper.waitWhileVisible("#upload_icon_spinner .loading_indicator_spinner", function () {
casper.test.assertExists('img#realm-settings-icon[src^="/user_avatars/1/realm/icon.png?version=2"]');
casper.test.assertEqual(casper.visible('#realm_icon_delete_button'), true);
});
});
});
// Test deleting realm icon image
casper.then(function () {
casper.click("li[data-section='organization-profile']");
casper.click("#realm_icon_delete_button");
casper.test.assertEqual(casper.visible('#realm_icon_delete_button'), true);
casper.waitWhileVisible('#realm_icon_delete_button', function () {
casper.test.assertExists('img#realm-settings-icon[src^="https://secure.gravatar.com/avatar/"]');
casper.test.assertEqual(casper.visible('#realm_icon_delete_button'), false);
});
});
casper.then(function () {
casper.click("li[data-section='organization-settings']");
casper.waitUntilVisible('#id_realm_default_language', function () {
casper.test.info("Changing realm default language");
casper.evaluate(function () {
$('#id_realm_default_language').val('de').change();
});
casper.test.assertSelectorHasText('#org-submit-user-defaults', "Save");
casper.click('#org-submit-user-defaults');
});
});
casper.then(function () {
casper.waitUntilVisible('#org-submit-user-defaults[data-status="saved"]', function () {
casper.test.assertSelectorHasText('#org-submit-user-defaults',
'Saved');
});
});
function submit_org_authentication_change() {
casper.click('form.org-authentications-form button.button');
}
// Test authentication methods setting
casper.then(function () {
casper.click("li[data-section='auth-methods']");
casper.waitUntilVisible(".method_row[data-method='Email'] input[type='checkbox'] + span", function () {
casper.click(".method_row[data-method='Email'] input[type='checkbox'] + span");
submit_org_authentication_change();
});
});
// Test setting was activated--default is checked
casper.then(function () {
// Scroll to bottom so that casper snapshots show the auth methods table
this.scrollToBottom();
// Test setting was activated
casper.waitUntilVisible('#admin-realm-authentication-methods-status', function () {
casper.test.assertSelectorHasText('#admin-realm-authentication-methods-status', 'Authentication methods saved!');
casper.test.assertEval(function () {
return !(document.querySelector(".method_row[data-method='Email'] input[type='checkbox']").checked);
});
});
});
casper.then(function () {
// Leave the page and return
casper.click('#settings-dropdown');
casper.click('a[href^="#streams"]');
casper.click('#settings-dropdown');
casper.click('a[href^="#organization"]');
casper.waitUntilVisible(".method_row[data-method='Email'] input[type='checkbox'] + span", function () {
// Test Setting was saved
casper.test.assertEval(function () {
return !(document.querySelector(".method_row[data-method='Email'] input[type='checkbox']").checked);
});
});
});
// Deactivate setting--default is checked
casper.then(function () {
casper.click(".method_row[data-method='Email'] input[type='checkbox'] + span");
submit_org_authentication_change();
casper.waitUntilVisible('#admin-realm-authentication-methods-status', function () {
casper.test.assertSelectorHasText('#admin-realm-authentication-methods-status', 'Authentication methods saved!');
casper.test.assertEval(function () {
return document.querySelector(".method_row[data-method='Email'] input[type='checkbox']").checked;
});
});
});
common.then_log_out();
casper.run(function () {
casper.test.done();
});