2018-08-15 13:17:15 +02:00
|
|
|
set_global('page_params', {});
|
2018-06-11 22:32:11 +02:00
|
|
|
set_global('$', global.make_zjquery());
|
|
|
|
set_global('loading', {});
|
2018-06-09 09:37:59 +02:00
|
|
|
set_global('Sortable', {create: () => {}});
|
2018-06-11 22:32:11 +02:00
|
|
|
|
|
|
|
|
2018-08-15 11:35:18 +02:00
|
|
|
const SHORT_TEXT_ID = 1;
|
|
|
|
const CHOICE_ID = 3;
|
2019-05-27 10:59:55 +02:00
|
|
|
const EXTERNAL_ACCOUNT_ID = 7;
|
|
|
|
|
|
|
|
const SHORT_TEXT_NAME = "Short Text";
|
|
|
|
const CHOICE_NAME = "Choice";
|
|
|
|
const EXTERNAL_ACCOUNT_NAME = "External account";
|
2018-08-15 11:35:18 +02:00
|
|
|
|
2018-08-15 13:37:40 +02:00
|
|
|
page_params.custom_profile_fields = {};
|
2019-05-27 10:59:55 +02:00
|
|
|
page_params.realm_default_external_accounts = JSON.stringify({});
|
2018-08-15 13:37:40 +02:00
|
|
|
|
2018-08-15 11:35:18 +02:00
|
|
|
page_params.custom_profile_field_types = {
|
|
|
|
SHORT_TEXT: {
|
|
|
|
id: SHORT_TEXT_ID,
|
2019-05-27 10:59:55 +02:00
|
|
|
name: SHORT_TEXT_NAME,
|
2018-08-15 11:35:18 +02:00
|
|
|
},
|
|
|
|
CHOICE: {
|
|
|
|
id: CHOICE_ID,
|
2019-05-27 10:59:55 +02:00
|
|
|
name: CHOICE_NAME,
|
|
|
|
},
|
|
|
|
EXTERNAL_ACCOUNT: {
|
|
|
|
id: EXTERNAL_ACCOUNT_ID,
|
|
|
|
name: EXTERNAL_ACCOUNT_NAME,
|
2018-08-15 11:35:18 +02:00
|
|
|
},
|
|
|
|
};
|
2018-06-11 22:32:11 +02:00
|
|
|
|
2018-08-15 13:17:15 +02:00
|
|
|
zrequire('settings_profile_fields');
|
|
|
|
|
2018-06-11 22:32:11 +02:00
|
|
|
function test_populate(opts) {
|
|
|
|
const fields_data = opts.fields_data;
|
|
|
|
|
|
|
|
page_params.is_admin = opts.is_admin;
|
|
|
|
const table = $('#admin_profile_fields_table');
|
|
|
|
const rows = $.create('rows');
|
|
|
|
const form = $.create('forms');
|
|
|
|
table.set_find_results('tr.profile-field-row', rows);
|
|
|
|
table.set_find_results('tr.profile-field-form', form);
|
|
|
|
|
|
|
|
var num_appends = 0;
|
|
|
|
table.append = () => {
|
|
|
|
num_appends += 1;
|
|
|
|
};
|
|
|
|
|
|
|
|
loading.destroy_indicator = () => {};
|
|
|
|
|
|
|
|
const template_data = [];
|
2019-07-11 05:06:20 +02:00
|
|
|
global.stub_templates((fn, data) => {
|
2018-06-11 22:32:11 +02:00
|
|
|
assert.equal(fn, 'admin_profile_field_list');
|
|
|
|
template_data.push(data);
|
|
|
|
return 'whatever';
|
2019-07-11 05:06:20 +02:00
|
|
|
});
|
2018-06-11 22:32:11 +02:00
|
|
|
|
|
|
|
settings_profile_fields.do_populate_profile_fields(fields_data);
|
|
|
|
|
|
|
|
assert.deepEqual(template_data, opts.expected_template_data);
|
|
|
|
assert.equal(num_appends, fields_data.length);
|
|
|
|
}
|
|
|
|
|
|
|
|
run_test('populate_profile_fields', () => {
|
|
|
|
const fields_data = [
|
|
|
|
{
|
2018-08-15 11:35:18 +02:00
|
|
|
type: SHORT_TEXT_ID,
|
2018-06-11 22:32:11 +02:00
|
|
|
id: 10,
|
|
|
|
name: 'favorite color',
|
|
|
|
hint: 'blue?',
|
|
|
|
field_data: '',
|
|
|
|
},
|
|
|
|
{
|
2018-08-15 11:35:18 +02:00
|
|
|
type: CHOICE_ID,
|
2018-06-11 22:32:11 +02:00
|
|
|
id: 30,
|
|
|
|
name: 'meal',
|
|
|
|
hint: 'lunch',
|
|
|
|
field_data: JSON.stringify([
|
|
|
|
{
|
|
|
|
text: 'lunch',
|
|
|
|
order: 0,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
text: 'dinner',
|
|
|
|
order: 1,
|
|
|
|
},
|
|
|
|
]),
|
|
|
|
},
|
2019-05-27 10:59:55 +02:00
|
|
|
{
|
|
|
|
type: EXTERNAL_ACCOUNT_ID,
|
|
|
|
id: 20,
|
|
|
|
name: 'github profile',
|
|
|
|
hint: 'username only',
|
|
|
|
field_data: JSON.stringify({
|
|
|
|
subtype: 'github',
|
|
|
|
}),
|
|
|
|
},
|
|
|
|
{
|
|
|
|
type: EXTERNAL_ACCOUNT_ID,
|
|
|
|
id: 21,
|
|
|
|
name: 'zulip profile',
|
|
|
|
hint: 'username only',
|
|
|
|
field_data: JSON.stringify({
|
|
|
|
subtype: 'custom',
|
|
|
|
url_pattern: 'https://chat.zulip.com/%(username)s',
|
|
|
|
}),
|
|
|
|
},
|
2018-06-11 22:32:11 +02:00
|
|
|
];
|
|
|
|
const expected_template_data = [
|
|
|
|
{
|
|
|
|
profile_field: {
|
|
|
|
id: 10,
|
|
|
|
name: 'favorite color',
|
|
|
|
hint: 'blue?',
|
2019-05-27 10:59:55 +02:00
|
|
|
type: SHORT_TEXT_NAME,
|
2018-06-11 22:32:11 +02:00
|
|
|
choices: [],
|
|
|
|
is_choice_field: false,
|
2019-05-27 10:59:55 +02:00
|
|
|
is_external_account_field: false,
|
2018-06-11 22:32:11 +02:00
|
|
|
},
|
|
|
|
can_modify: true,
|
2019-05-27 10:59:55 +02:00
|
|
|
realm_default_external_accounts:
|
|
|
|
page_params.realm_default_external_accounts,
|
2018-06-11 22:32:11 +02:00
|
|
|
},
|
|
|
|
{
|
|
|
|
profile_field: {
|
|
|
|
id: 30,
|
|
|
|
name: 'meal',
|
|
|
|
hint: 'lunch',
|
2019-05-27 10:59:55 +02:00
|
|
|
type: CHOICE_NAME,
|
2018-06-11 22:32:11 +02:00
|
|
|
choices: [
|
2018-08-11 17:02:46 +02:00
|
|
|
{order: 0, value: 0, text: 'lunch'},
|
|
|
|
{order: 1, value: 1, text: 'dinner'},
|
2018-06-11 22:32:11 +02:00
|
|
|
],
|
|
|
|
is_choice_field: true,
|
2019-05-27 10:59:55 +02:00
|
|
|
is_external_account_field: false,
|
|
|
|
},
|
|
|
|
can_modify: true,
|
|
|
|
realm_default_external_accounts:
|
|
|
|
page_params.realm_default_external_accounts,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
profile_field: {
|
|
|
|
id: 20,
|
|
|
|
name: 'github profile',
|
|
|
|
hint: 'username only',
|
|
|
|
type: EXTERNAL_ACCOUNT_NAME,
|
|
|
|
choices: [],
|
|
|
|
is_choice_field: false,
|
|
|
|
is_external_account_field: true,
|
|
|
|
},
|
|
|
|
can_modify: true,
|
|
|
|
realm_default_external_accounts:
|
|
|
|
page_params.realm_default_external_accounts,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
profile_field: {
|
|
|
|
id: 21,
|
|
|
|
name: 'zulip profile',
|
|
|
|
hint: 'username only',
|
|
|
|
type: EXTERNAL_ACCOUNT_NAME,
|
|
|
|
choices: [],
|
|
|
|
is_choice_field: false,
|
|
|
|
is_external_account_field: true,
|
2018-06-11 22:32:11 +02:00
|
|
|
},
|
|
|
|
can_modify: true,
|
2019-05-27 10:59:55 +02:00
|
|
|
realm_default_external_accounts:
|
|
|
|
page_params.realm_default_external_accounts,
|
2018-06-11 22:32:11 +02:00
|
|
|
},
|
|
|
|
];
|
|
|
|
|
|
|
|
test_populate({
|
|
|
|
fields_data: fields_data,
|
|
|
|
expected_template_data: expected_template_data,
|
|
|
|
is_admin: true,
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
|