set_global('page_params', {}); set_global('$', global.make_zjquery()); set_global('loading', {}); set_global('Sortable', {create: () => {}}); const SHORT_TEXT_ID = 1; const CHOICE_ID = 3; const EXTERNAL_ACCOUNT_ID = 7; const SHORT_TEXT_NAME = "Short Text"; const CHOICE_NAME = "Choice"; const EXTERNAL_ACCOUNT_NAME = "External account"; page_params.custom_profile_fields = {}; page_params.realm_default_external_accounts = JSON.stringify({}); page_params.custom_profile_field_types = { SHORT_TEXT: { id: SHORT_TEXT_ID, name: SHORT_TEXT_NAME, }, CHOICE: { id: CHOICE_ID, name: CHOICE_NAME, }, EXTERNAL_ACCOUNT: { id: EXTERNAL_ACCOUNT_ID, name: EXTERNAL_ACCOUNT_NAME, }, }; zrequire('settings_profile_fields'); 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); let num_appends = 0; table.append = () => { num_appends += 1; }; loading.destroy_indicator = () => {}; const template_data = []; global.stub_templates((fn, data) => { assert.equal(fn, 'admin_profile_field_list'); template_data.push(data); return 'whatever'; }); 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 = [ { type: SHORT_TEXT_ID, id: 10, name: 'favorite color', hint: 'blue?', field_data: '', }, { type: CHOICE_ID, id: 30, name: 'meal', hint: 'lunch', field_data: JSON.stringify([ { text: 'lunch', order: 0, }, { text: 'dinner', order: 1, }, ]), }, { 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', }), }, ]; const expected_template_data = [ { profile_field: { id: 10, name: 'favorite color', hint: 'blue?', type: SHORT_TEXT_NAME, choices: [], is_choice_field: false, is_external_account_field: false, }, can_modify: true, realm_default_external_accounts: page_params.realm_default_external_accounts, }, { profile_field: { id: 30, name: 'meal', hint: 'lunch', type: CHOICE_NAME, choices: [ {order: 0, value: 0, text: 'lunch'}, {order: 1, value: 1, text: 'dinner'}, ], is_choice_field: true, 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, }, can_modify: true, realm_default_external_accounts: page_params.realm_default_external_accounts, }, ]; test_populate({ fields_data: fields_data, expected_template_data: expected_template_data, is_admin: true, }); });