TimeTrex/interface/html5/views/developer_tools/AwesomeboxTestViewController.js

787 lines
32 KiB
JavaScript
Raw Normal View History

2022-12-13 07:10:06 +01:00
export class AwesomeboxTestViewController extends BaseViewController {
constructor( options = {} ) {
_.defaults( options, {
el: '#awesomebox_test_view_container',
// _required_files: ['TImage', 'TImageAdvBrowser'],
user_api: null,
user_group_api: null,
company_api: null,
user_id_array: null
} );
super( options );
}
init( options ) {
this.edit_view_tpl = 'AwesomeboxTestEditView.html';
this.permission_id = 'user';
this.viewId = 'AwesomeboxTest';
this.script_name = 'AwesomeboxTestView';
this.table_name_key = 'awesomebox_test';
this.context_menu_name = $.i18n._( 'AwesomeBox Test' );
this.navigation_label = $.i18n._( 'AwesomBox Test' );
this.api = TTAPI.APIUser;
this.select_company_id = LocalCacheData.getCurrentCompany().id;
this.user_group_api = TTAPI.APIUserGroup;
this.company_api = TTAPI.APICompany;
this.user_id_array = [];
this.render();
this.buildContextMenu();
this.initData();
}
setCurrentEditRecordData() {
this.collectUIDataToCurrentEditRecord();
this.setEditViewDataDone();
}
clearEditViewData() {
return false;
}
buildEditViewUI() {
var $this = this;
if( ContextMenuManager.getMenu( this.determineContextMenuMountAttributes().id ) === undefined ) {
this.buildContextMenu();
} else {
Debug.Warn( 'Context Menu ('+ this.determineContextMenuMountAttributes().id +') already exists for: '+ this.viewId, 'AwesomeBoxTestView.js', 'AwesomeBoxTestView', 'buildEditViewUI', 10 );
}
var tab_model = {
'tab_employee': { 'label': $.i18n._( 'AWESOMEBOX TESTING VIEW' ) },
};
this.setTabModel( tab_model );
//Tab 0 start
var tab_employee = this.edit_view_tab.find( '#tab_employee' );
var tab_employee_column1 = tab_employee.find( '.first-column' );
this.edit_view_tabs[0] = [];
this.edit_view_tabs[0].push( tab_employee_column1 );
// User
var form_item_input = Global.loadWidgetByName( FormItemType.AWESOME_DROPDOWN );
form_item_input.ADropDown( {
//api_class: TTAPI.APIUser,
field: 'user_id',
display_show_all: false,
id: 'user_id_dropdown',
key: 'id',
allow_drag_to_order: false,
display_close_btn: false,
auto_sort: true,
display_column_settings: false,
default_height: 100
} );
// form_item_input.setSourceData( $this.user_id_array );
form_item_input.addClass( 'splayed-adropdown' );
var display_columns = ALayoutCache.getDefaultColumn( 'global_user' ); //Get Default columns base on different layout name
display_columns = Global.convertColumnsTojGridFormat( display_columns, 'global_user' ); //Convert to jQgrid format
this.addEditFieldToColumn( $.i18n._( 'User' ), form_item_input, tab_employee_column1 );
form_item_input.setColumns( display_columns );
form_item_input.setUnselectedGridData( this.user_id_array );
form_item_input.setGridColumnsWidths();
form_item_input.setHeight( 150 );
//Company
var form_item_input = Global.loadWidgetByName( FormItemType.AWESOME_BOX );
form_item_input.AComboBox( {
api_class: TTAPI.APIUser,
allow_multiple_selection: true,
layout_name: 'global_user',
show_search_inputs: true,
set_empty: true,
field: 'user_id2'
} );
this.addEditFieldToColumn( $.i18n._( 'User ( Big Multi-select)' ), form_item_input, tab_employee_column1 );
form_item_input.setEnabled( false );
//Company
var form_item_input = Global.loadWidgetByName( FormItemType.AWESOME_BOX );
form_item_input.AComboBox( {
api_class: TTAPI.APICompany,
allow_multiple_selection: true,
layout_name: 'global_company',
show_search_inputs: true,
set_empty: true,
field: 'company_id'
} );
this.addEditFieldToColumn( $.i18n._( 'Company' ), form_item_input, tab_employee_column1 );
form_item_input.setEnabled( false );
//Legal Entity
form_item_input = Global.loadWidgetByName( FormItemType.AWESOME_BOX );
form_item_input.AComboBox( {
api_class: TTAPI.APILegalEntity,
allow_multiple_selection: false,
layout_name: 'global_legal_entity',
show_search_inputs: true,
set_empty: true,
field: 'legal_entity_id'
} );
this.addEditFieldToColumn( $.i18n._( 'Legal Entity' ), form_item_input, tab_employee_column1 );
//Group
form_item_input = Global.loadWidgetByName( FormItemType.AWESOME_BOX );
form_item_input.AComboBox( {
tree_mode: true,
allow_multiple_selection: false,
layout_name: 'global_tree_column',
set_empty: true,
field: 'group_id'
} );
form_item_input.setSourceData( $this.user_group_array );
this.addEditFieldToColumn( $.i18n._( 'Group' ), form_item_input, tab_employee_column1 );
form_item_input = Global.loadWidgetByName( FormItemType.AWESOME_BOX );
form_item_input.AComboBox( {
tree_mode: true,
allow_multiple_selection: true,
layout_name: 'global_tree_column',
set_empty: true,
field: 'group_id2'
} );
form_item_input.setSourceData( $this.user_group_array );
this.addEditFieldToColumn( $.i18n._( 'Group (Multi)' ), form_item_input, tab_employee_column1 );
//Status
form_item_input = Global.loadWidgetByName( FormItemType.COMBO_BOX );
form_item_input.TComboBox( { field: 'status_id' } );
form_item_input.setSourceData( $this.status_array );
this.addEditFieldToColumn( $.i18n._( 'Status' ), form_item_input, tab_employee_column1 );
TTPromise.resolve( 'Awesomeboxtest', 'init' );
}
buildSearchFields() {
super.buildSearchFields();
var $this = this;
this.search_fields = [
new SearchField( {
label: $.i18n._( 'Company' ),
in_column: 1,
field: 'company_id',
layout_name: 'global_company',
api_class: TTAPI.APICompany,
multiple: false,
custom_first_label: Global.default_item,
basic_search: PermissionManager.checkTopLevelPermission( 'Companies' ) ? true : false,
adv_search: PermissionManager.checkTopLevelPermission( 'Companies' ) ? true : false,
form_item_type: FormItemType.AWESOME_BOX
} ),
new SearchField( {
label: $.i18n._( 'Legal Entity' ),
in_column: 1,
field: 'legal_entity_id',
layout_name: 'global_legal_entity',
api_class: TTAPI.APILegalEntity,
multiple: true,
custom_first_label: Global.any_item,
basic_search: PermissionManager.checkTopLevelPermission( 'LegalEntity' ) ? true : false,
adv_search: PermissionManager.checkTopLevelPermission( 'LegalEntity' ) ? true : false,
form_item_type: FormItemType.AWESOME_BOX
} ),
new SearchField( {
label: $.i18n._( 'Status' ),
in_column: 1,
field: 'status_id',
multiple: true,
basic_search: true,
adv_search: true,
layout_name: 'global_option_column',
form_item_type: FormItemType.AWESOME_BOX
} ),
new SearchField( {
label: $.i18n._( 'Gender' ),
in_column: 2,
field: 'sex_id',
multiple: true,
basic_search: false,
adv_search: true,
layout_name: 'global_option_column',
form_item_type: FormItemType.AWESOME_BOX
} ),
new SearchField( {
label: $.i18n._( 'Group' ),
in_column: 2,
multiple: true,
field: 'group_id',
layout_name: 'global_tree_column',
tree_mode: true,
basic_search: true,
adv_search: true,
form_item_type: FormItemType.AWESOME_BOX
} )
];
}
getCustomContextMenuModel() {
var context_menu_model = {
exclude: ['default'],
include: [
'view',
'edit',
'cancel'
]
};
return context_menu_model;
}
initOptions( callBack ) {
var options = [
{ option_name: 'status' },
{ option_name: 'company_id' }
];
this.initDropDownOptions( options, function( result ) {
if ( callBack ) {
callBack( result ); // First to initialize drop down options, and then to initialize edit view UI.
}
} );
}
initDropDownOptions( options, callBack ) {
var $this = this;
var len = options.length + 2;
var complete_count = 0;
var option_result = [];
var res = '[{"id":"00000000-0000-0000-0000-000000000000","name":"Root","level":0,"children":[{"id":"11e85213-a778-6410-bee1-123456abcdef","company_id":"11e85213-a6b2-93b0-a2cd-123456abcdef","parent_id":"00000000-0000-0000-0000-000000000000","name":"Corporate","deleted":false,"created_by_id":false,"created_by":false,"created_date":"07-May-18 9:28 AM","updated_by_id":false,"updated_by":false,"updated_date":"07-May-18 9:28 AM","level":1,"children":[{"id":"11e85213-a779-fa20-835f-123456abcdef","company_id":"11e85213-a6b2-93b0-a2cd-123456abcdef","parent_id":"11e85213-a778-6410-bee1-123456abcdef","name":"Executives","deleted":false,"created_by_id":false,"created_by":false,"created_date":"07-May-18 9:28 AM","updated_by_id":false,"updated_by":false,"updated_date":"07-May-18 9:28 AM","level":2,"expanded":true,"loaded":true,"parent":"11e85213-a778-6410-bee1-123456abcdef","isLeaf":true},{"id":"11e85213-a77a-39c0-9bc2-123456abcdef","company_id":"11e85213-a6b2-93b0-a2cd-123456abcdef","parent_id":"11e85213-a778-6410-bee1-123456abcdef","name":"Human Resources","deleted":false,"created_by_id":false,"created_by":false,"created_date":"07-May-18 9:28 AM","updated_by_id":false,"updated_by":false,"updated_date":"07-May-18 9:28 AM","level":2,"expanded":true,"loaded":true,"parent":"11e85213-a778-6410-bee1-123456abcdef","isLeaf":true}],"expanded":true,"loaded":true,"parent":"00000000-0000-0000-0000-000000000000"},{"id":"11e85213-a77a-7810-a67f-123456abcdef","company_id":"11e85213-a6b2-93b0-a2cd-123456abcdef","parent_id":"00000000-0000-0000-0000-000000000000","name":"Hourly (Non-Exempt)","deleted":false,"created_by_id":false,"created_by":false,"created_date":"07-May-18 9:28 AM","updated_by_id":false,"updated_by":false,"updated_date":"07-May-18 9:28 AM","level":1,"children":[{"id":"11e85213-a77a-bb40-b83e-123456abcdef","company_id":"11e85213-a6b2-93b0-a2cd-123456abcdef","parent_id":"11e85213-a77a-7810-a67f-123456abcdef","name":"Salary (Exempt)","deleted":false,"created_by_id":false,"created_by":false,"created_date":"07-May-18 9:28 AM","updated_by_id":false,"updated_by":false,"updated_date":"07-May-18 9:28 AM","level":2,"expanded":true,"loaded":true,"parent":"11e85213-a77a-7810-a67f-123456abcdef","isLeaf":true}],"expanded":true,"loaded":true,"parent":"00000000-0000-0000-0000-000000000000"}],"expanded":true,"loaded":true},{"id":"11e85213-a778-6410-bee1-123456abcdef","company_id":"11e85213-a6b2-93b0-a2cd-123456abcdef","parent_id":"00000000-0000-0000-0000-000000000000","name":"Corporate","deleted":false,"created_by_id":false,"created_by":false,"created_date":"07-May-18 9:28 AM","updated_by_id":false,"updated_by":false,"updated_date":"07-May-18 9:28 AM","level":1,"children":[{"id":"11e85213-a779-fa20-835f-123456abcdef","company_id":"11e85213-a6b2-93b0-a2cd-123456abcdef","parent_id":"11e85213-a778-6410-bee1-123456abcdef","name":"Executives","deleted":false,"created_by_id":false,"created_by":false,"created_date":"07-May-18 9:28 AM","updated_by_id":false,"updated_by":false,"updated_date":"07-May-18 9:28 AM","level":2,"expanded":true,"loaded":true,"parent":"11e85213-a778-6410-bee1-123456abcdef","isLeaf":true},{"id":"11e85213-a77a-39c0-9bc2-123456abcdef","company_id":"11e85213-a6b2-93b0-a2cd-123456abcdef","parent_id":"11e85213-a778-6410-bee1-123456abcdef","name":"Human Resources","deleted":false,"created_by_id":false,"created_by":false,"created_date":"07-May-18 9:28 AM","updated_by_id":false,"updated_by":false,"updated_date":"07-May-18 9:28 AM","level":2,"expanded":true,"loaded":true,"parent":"11e85213-a778-6410-bee1-123456abcdef","isLeaf":true}],"expanded":true,"loaded":true,"parent":"00000000-0000-0000-0000-000000000000"},{"id":"11e85213-a779-fa20-835f-123456abcdef","company_id":"11e85213-a6b2-93b0-a2cd-123456abcdef","parent_id":"11e85213-a778-6410-bee1-123456abcdef","name":"Executives","deleted":false,"created_by_id":false,"created_by":false,"created_date":"07-May-18 9:28 AM","updated_by_id":false,"updated_by":false,"updated_date":"07-May-18 9:28 AM","level":2,"expanded":true,"loaded":true,"parent":"11e85213-a778-6410-bee1-123456abcdef","isLeaf":true
res = JSON.parse( res );
if ( !$this.edit_only_mode ) {
if ( !$this.sub_view_mode && $this.basic_search_field_ui_dic['group_id'] ) {
$this.basic_search_field_ui_dic['group_id'].setSourceData( res );
$this.adv_search_field_ui_dic['group_id'].setSourceData( res );
}
}
$this.user_group_array = res;
complete_count = complete_count + 1;
if ( complete_count === len ) {
callBack( option_result );
}
for ( var i = 0; i < len - 2; i++ ) {
var option_info = options[i];
this.initDropDownOption( option_info.option_name, option_info.field_name, option_info.api, onGetOptionResult );
}
function onGetOptionResult( result ) {
option_result.push( result );
complete_count = complete_count + 1;
if ( complete_count === len ) {
callBack( option_result );
}
}
}
//override that forces same data to grid at all times.
search() {
var result_data = JSON.parse( '[{"id":"11e85213-a799-d200-b041-123456abcdef","status":"Active","employee_number":100,"first_name":"Mr.","last_name":"FAKE","full_name":"Administrator, Mr.","home_phone":"471-438-3900","is_owner":true,"is_child":false},' +
'{"id":"11e85213-ad34-e0e0-8541-123456abcdef","status":"Active","employee_number":13,"first_name":"Tristen","last_name":"Braun","full_name":"FAKE Braun, Tristen","home_phone":"527-500-4852","is_owner":false,"is_child":true},' +
'{"id":"11e85213-af64-d0e0-9b00-123456abcdef","status":"Active","employee_number":20,"first_name":"Jane","last_name":"Doe","full_name":"FAKE Doe, Jane","home_phone":"477-443-9650","is_owner":false,"is_child":true},' +
'{"id":"11e85213-ac44-1830-9908-123456abcdef","status":"Active","employee_number":10,"first_name":"John","last_name":"Doe","full_name":"FAKE Doe, John","home_phone":"464-547-9452","is_owner":false,"is_child":true}]' );
this.user_id_array = result_data;
result_data = this.processResultData( result_data );
this.grid.setData( result_data );
this.grid.setGridColumnsWidth();
this.current_edit_record = result_data[0];
this.setCurrentEditViewState( 'edit' );
TTPromise.add( 'Awesomeboxtest', 'init' );
var $this = this;
TTPromise.wait( 'Awesomeboxtest', 'init', function() {
$this.initEditView();
} );
this.initEditViewUI( this.viewId, this.edit_view_tpl );
}
setEditViewDataDone() {
var $this = this;
setTimeout( function() {
TAlertManager.showConfirmAlert( $.i18n._( 'Run tests?' ), null, function( result ) {
if ( result == true ) {
$this.runTests();
}
} );
$this.setTabOVisibility( true );
$( '.edit-view-tab-bar' ).css( 'opacity', 1 );
}, 2500 );
}
/**
* in the testing code are a lot of null null waits to ensure that all awesomeboxes are ready for next step in test
*/
runTests() {
if ( $( '#qunit_script' ).length == 0 ) {
$( '<script id=\'qunit_script\' src=\'framework/qunit/qunit.js\'></script>' ).appendTo( 'head' );
$( '<link rel=\'stylesheet\' type=\'text/css\' href=\'framework/qunit/qunit.css\'>' ).appendTo( 'head' );
}
;
QUnit.config.autostart = false;
$( '#qunit_container' ).css( 'width', '100%' );
$( '#qunit_container' ).css( 'height', 'auto' );
$( '#qunit_container' ).css( 'overflow-y', 'scroll' );
$( '#qunit_container' ).css( 'top', '0px' );
$( '#qunit_container' ).css( 'left', '0px' );
$( '#qunit_container' ).css( 'z-index', '100' );
$( '#qunit_container' ).css( 'background', '#fff' );
$( '#qunit_container' ).show();
$( '#tt_debug_console' ).remove();
if ( !window.qunit_initiated ) {
window.qunit_initiated = true;
//QUnit.start(); //This causes a JavaScript exception, but does not seem to be required. Test ran without it.
}
// QUnit.module('QUnit Sanity');
// QUnit.test("QUnit test", function (assert) {
// assert.ok(1 == "1", "QUnit is loaded and sane!");
// });
//select an item by clicking a td in the last row
var $this = this;
QUnit.module( 'AwesomeBox' );
QUnit.test( 'Awesomebox tests', function( assert ) {
var done_awesomebox_tests = assert.async();
Debug.Text( 'A: Test Splayed Awesomebox', 'AwesomeboxTestViewController.js', 'AwesomeboxTestViewController', 'runTests', 11 );
$this.checkOpenAwesomeBox( $this.edit_view_ui_dic['user_id'], assert, function() {
Debug.Text( 'B: Test MultiSelect AwesomeBox', 'AwesomeboxTestViewController.js', 'AwesomeboxTestViewController', 'runTests', 11 );
$this.checkMultiSelectAwesomeBox( assert, function() {
Debug.Text( 'C: Test regular AwesomeBox', 'AwesomeboxTestViewController.js', 'AwesomeboxTestViewController', 'runTests', 11 );
$this.checkAwesomeBox( assert, function() {
Debug.Text( 'D: Test tree_mode AwesomeBox', 'AwesomeboxTestViewController.js', 'AwesomeboxTestViewController', 'runTests', 11 );
$this.checkTreeBox( assert, function() {
Debug.Text( 'E: Test tree_mode MultiSelect AwesomeBox', 'AwesomeboxTestViewController.js', 'AwesomeboxTestViewController', 'runTests', 11 );
$this.checkMultiTreeAwesomeBox( assert, function() {
Debug.Text( 'F: Test searching in AwesomeBox', 'AwesomeboxTestViewController.js', 'AwesomeboxTestViewController', 'runTests', 11 );
$this.checkClearSearch( $this.edit_view_ui_dic['user_id2'], assert, function() {
Debug.Text( 'G: Wonky move all scenario', 'AwesomeboxTestViewController.js', 'AwesomeboxTestViewController', 'runTests', 11 );
$this.checkMoveAllScenario( $this.edit_view_ui_dic['user_id2'], assert, function() {
setTimeout( function() {
Debug.Text( 'Z: Testing Complete', 'AwesomeboxTestViewController.js', 'AwesomeboxTestViewController', 'runTests', 11 );
done_awesomebox_tests();
}, 1000 );
} );
} );
} );
} );
} );
} );
} );
} );
}
checkMultiTreeAwesomeBox( assert, callback ) {
var awesomebox = this.edit_view_ui_dic['group_id2'];
awesomebox.trigger( 'click' );
var visible_awesomebox = $( '#group_id2a_dropdown_div' );
var $this = this;
TTPromise.wait( 'AComboBox', 'init', function() {
visible_awesomebox.find( '.unselect-grid-div tbody tr:last td:last' ).trigger( 'click' );
visible_awesomebox.find( '.a-grid-right-arrow' ).trigger( 'click' );
visible_awesomebox.find( '#select_grid_close_btn' ).trigger( 'click' );
var val = awesomebox.getValue();
assert.ok( ( TTUUID.isUUID( val ) && val != TTUUID.zero_id ), 'Multi tree - selection valid' );
setTimeout( function() {
awesomebox.trigger( 'click' );
setTimeout( function() {
var visible_awesomebox = $( '#group_id2a_dropdown_div' );
visible_awesomebox.find( '.select-grid-div tbody tr:last td:last' ).trigger( 'click' );
visible_awesomebox.find( '.a-grid-left-arrow' ).trigger( 'click' );
visible_awesomebox.find( '#select_grid_close_btn' ).trigger( 'click' );
var val = awesomebox.getValue();
assert.ok( ( val == TTUUID.zero_id ), 'Multi tree - unselection valid' );
awesomebox.trigger( 'click' );
//this check fails when it should not as the border makes it look fine
//$this.checkGridWidths( visible_awesomebox, assert );
visible_awesomebox.find( '#select_grid_close_btn' ).trigger( 'click' );
if ( callback ) {
callback();
}
}, 1000 );
}, 1000 );
} );
}
checkTreeBox( assert, callback ) {
var awesomebox = this.edit_view_ui_dic['group_id'];
var val = awesomebox.getValue();
assert.ok( ( val == TTUUID.zero_id ), 'tree - unselection valid' );
var $this = this;
setTimeout( function() {
awesomebox.trigger( 'click' );
TTPromise.wait( null, null, function() {
$this.checkGridWidths( $( '#group_ida_dropdown_div' ), assert );
$( '#group_ida_dropdown_div .unselect-grid-div tbody tr:last td:last' ).trigger( 'click' );
setTimeout( function() {
var val = awesomebox.getValue();
awesomebox.setValue( null );
assert.ok( ( TTUUID.isUUID( val ) && val != TTUUID.zero_id ), 'tree - selection valid' );
if ( callback ) {
callback();
}
}, 1000 );
} );
}, 1000 );
}
checkAwesomeBox( assert, callback ) {
var awesomebox = this.edit_view_ui_dic['legal_entity_id'];
var val = awesomebox.getValue();
assert.ok( ( val == TTUUID.zero_id ), 'regular - unselection valid' );
var $this = this;
setTimeout( function() {
awesomebox.trigger( 'click' );
TTPromise.wait( null, null, function() {
$this.checkGridWidths( $( '#legal_entity_idADropDown' ), assert );
$( '#legal_entity_idADropDown .unselect-grid-div tbody tr:last td:last' ).trigger( 'click' );
setTimeout( function() {
val = awesomebox.getValue();
awesomebox.setValue( null );
assert.ok( ( TTUUID.isUUID( val ) && val != TTUUID.zero_id ), 'regular - selection valid' );
if ( callback ) {
callback();
}
}, 1000 );
} );
}, 1000 );
}
checkMultiSelectAwesomeBox( assert, callback ) {
var awesomebox = this.edit_view_ui_dic['company_id'];
awesomebox.trigger( 'click' );
var visible_awesomebox = $( '#company_ida_dropdown_div' );
var $this = this;
TTPromise.wait( 'AComboBox', 'init', function() {
visible_awesomebox.find( '.unselect-grid-div tbody tr:last td:last' ).trigger( 'click' );
visible_awesomebox.find( '.a-grid-right-arrow' ).trigger( 'click' );
visible_awesomebox.find( '#select_grid_close_btn' ).trigger( 'click' );
var val = awesomebox.getValue();
assert.ok( ( TTUUID.isUUID( val ) && val != TTUUID.zero_id ), 'multiselect - selection valid' );
setTimeout( function() {
awesomebox.trigger( 'click' );
TTPromise.wait( 'AComboBox', 'init', function() {
var visible_awesomebox = $( '#company_ida_dropdown_div' );
visible_awesomebox.find( '.select-grid-div tbody tr:last td:last' ).trigger( 'click' );
visible_awesomebox.find( '.a-grid-left-arrow' ).trigger( 'click' );
$this.checkGridWidths( visible_awesomebox, assert );
visible_awesomebox.find( '#select_grid_close_btn' ).trigger( 'click' );
val = awesomebox.getValue();
awesomebox.trigger( 'click' );
assert.ok( ( val == TTUUID.zero_id ), 'multiselect - unselection valid' );
TTPromise.wait( null, null, function() {
if ( callback ) {
callback();
}
} );
} );
}, 2000 );
} );
}
checkOpenAwesomeBox( box, assert, callback ) {
var selected_id = box.find( '.unselect-grid-div tbody tr:last' ).attr( 'id' );
box.find( '.unselect-grid-div tbody tr:last td:last' ).trigger( 'click' );
box.find( '.a-grid-right-arrow' ).trigger( 'click' );
var val = box.getValue();
assert.ok( ( TTUUID.isUUID( val[0].id ) && val[0].id == selected_id ), 'splayed - selection valid' );
var $this = this;
TTPromise.wait( 'AComboBox', 'init', function() {
box.find( '.select-grid-div tbody tr:last td:last' ).trigger( 'click' );
box.find( '.a-grid-left-arrow' ).trigger( 'click' );
assert.ok( ( val.length === 0 ), 'splayed - unselection valid' );
$this.checkGridWidths( box, assert );
if ( callback ) {
TTPromise.wait( null, null, function() {
callback();
} );
}
} );
}
checkGridWidths( box, assert ) {
var unselect_grid_container_width = box.find( '.unselect-grid-border-div' ).width();
var unselect_grid_width = box.find( '.ui-jqgrid' ).width();
var unselect_grid_diff = unselect_grid_container_width - unselect_grid_width;
assert.ok( ( unselect_grid_diff <= 2 ), 'unselect grid width diff <= 2: ' + unselect_grid_diff );
if ( box.find( '.select-grid-border-div' ).is( ':visible' ) > 0 ) {
var select_grid_container_width = box.find( '.select-grid-border-div' ).width();
var select_grid_width = box.find( '.ui-jqgrid' ).width();
var select_grid_diff = Math.abs( select_grid_container_width - select_grid_width );
assert.ok( ( select_grid_diff <= 2 ), 'select grid width diff <= 2: ' + select_grid_diff );
}
}
checkClearSearch( box, assert, callback ) {
// open
var $this = this;
box.trigger( 'click' );
TTPromise.wait( null, null, function() {
var dropdown = $( '#user_id2ADropDown' );
var checkboxes = dropdown.find( '.unselect-grid-div .ui-jqgrid input[type="checkbox"]' );
var expected_ids = [];
// select a couple records
$( checkboxes[1] ).trigger( 'click' );
$( checkboxes[3] ).trigger( 'click' );
$( checkboxes[6] ).trigger( 'click' );
$( checkboxes[7] ).trigger( 'click' );
//note selected ids
expected_ids.push( getRowId( $( checkboxes[1] ) ) );
expected_ids.push( getRowId( $( checkboxes[3] ) ) );
expected_ids.push( getRowId( $( checkboxes[6] ) ) );
expected_ids.push( getRowId( $( checkboxes[7] ) ) );
// click move button
dropdown.find( '.a-grid-right-arrow' ).trigger( 'click' );
// check that visible values contain expected ids
assert.ok( expectedInGrid( 'select_grid', dropdown, expected_ids ), 'all expected records are in selected grid' );
// search to filter
var select_grid_text_inputs = dropdown.find( '.select-grid-div input[type="text"].search-input' );
// set up grid search prerequisites
$( select_grid_text_inputs[0] ).trigger( 'focus' );
$( select_grid_text_inputs[0] ).val( 'mr' );
LocalCacheData.openAwesomeBox.focus_in_select_grid = true;
var e = $.Event( "keydown", { keyCode: 77, which: 77 } );
LocalCacheData.openAwesomeBox.selectNextItem( e );
var e = $.Event( "keydown", { keyCode: 82, which: 82 } );
LocalCacheData.openAwesomeBox.selectNextItem( e );
// trigger search
$( select_grid_text_inputs[0] ).trigger( 'searchEnter', ['mr', 'first_name'] );
TTPromise.wait( null, null, function() {
// check that VISIBLE values contain expected ids
assert.ok( ( dropdown.find( '.select-grid tr' ).length == 2 ), 'only .sizetr and mr admin shows after filter (only works with demo data)' );
// move first record back ( note id )
var first_row = $( dropdown.find( '.select-grid tr' )[dropdown.find( '.select-grid tr' ).length - 1] );
first_row.find( 'input[type="checkbox"]' ).click();
var ondblClickRowHandler = dropdown.find( '.select-grid' ).jqGrid( 'getGridParam', 'ondblClickRow' );
ondblClickRowHandler.call( dropdown.find( '.select-grid' )[0], first_row.prop( 'id' ) );
// check that selected values contain expected ids
assert.ok( $( dropdown.find( '.select-grid tr' ).length == 1 ), 'removed record is in not in selectgrid' ); //1 because of sizetr
assert.ok( expectedInGrid( 'unselect_grid', dropdown, [getRowId( first_row )] ), 'removed record is in unselectgrid' );
// clear search
dropdown.find( '.select-grid-search-div .close-btn' ).trigger( 'click' );
TTPromise.wait( null, null, function() {
expected_ids.splice( 0, 1 ); // remove moved record from expected_ids
// check that selected values contain expected ids
assert.ok( ( expected_ids.length == 3 ), 'correct number of expected records' );
assert.ok( ( dropdown.find( '.select-grid tr' ).length == 4 ), 'correct number of selected rows' );
assert.ok( expectedInGrid( 'select_grid', dropdown, expected_ids ), 'all expected records are in selected grid' );
dropdown.find( '#select_grid_close_btn' ).click();
box.setValue( [] );
if ( callback ) {
callback();
}
} );
} );
} );
//strip out jqgrid stuff and get row id
function getRowId( row ) {
if ( !row || !row.prop ) {
return false;
}
if ( row.prop( 'id' ).indexOf( '_' ) == -1 ) {
return row.prop( 'id' );
}
var id_array = $( row ).prop( 'id' ).split( '_' );
return id_array[id_array.length - 1];
}
function expectedInGrid( target_grid_name, dropdown, expected_ids ) {
var selected_rows = null;
if ( target_grid_name == 'select_grid' ) {
selected_rows = dropdown.find( '.select-grid tr' );
} else {
selected_rows = dropdown.find( '.unselect-grid tr' );
}
var all_found = true;
for ( var n = 0; n < expected_ids.length; n++ ) {
var is_found = false;
for ( var i = 0; i < selected_rows.length; i++ ) {
if ( expected_ids[n] == getRowId( $( selected_rows[i] ) ) ) {
is_found = true;
break;
}
}
if ( !is_found ) {
all_found = false;
break;
}
}
return all_found;
}
}
checkMoveAllScenario( box, assert, callback ) {
// open
var $this = this;
box.trigger( 'click' );
TTPromise.wait( 'AComboBox', 'init', function() {
var dropdown = $( '#user_id2ADropDown' );
if ( dropdown.length == 0 ) {
//wait until combobox is visible ( sometimes takes longer than promise )
setTimeout( function() {
$this.checkMoveAllScenario( box, assert, callback );
}, 1000 );
return;
}
var checkboxes = dropdown.find( '.unselect-grid-div .ui-jqgrid input[type="checkbox"]' );
var expected_ids = [];
// select a couple records
$( checkboxes[1] ).trigger( 'click' );
$( checkboxes[3] ).trigger( 'click' );
$( checkboxes[6] ).trigger( 'click' );
$( checkboxes[7] ).trigger( 'click' );
//note selected ids
expected_ids.push( getRowId( $( checkboxes[1] ) ) );
expected_ids.push( getRowId( $( checkboxes[3] ) ) );
expected_ids.push( getRowId( $( checkboxes[6] ) ) );
expected_ids.push( getRowId( $( checkboxes[7] ) ) );
// click move button
dropdown.find( '.a-grid-right-arrow' ).trigger( 'click' );
// check that visible values contain expected ids
assert.ok( expectedInGrid( 'select_grid', dropdown, expected_ids ), 'all expected records are in selected grid' );
//click "move all" button to remove all selected records
dropdown.find( '.select-grid-title-bar #clear_btn' ).trigger( 'click' );
TTPromise.wait( null, null, function() {
expected_ids = [];
// check that selected values contain expected ids
assert.ok( ( expected_ids.length == 0 ), 'correct number of expected records' );
assert.ok( ( dropdown.find( '.select-grid tr' ).length == 1 ), 'correct number of selected rows ( zero )' ); // the 1 is sizetr
assert.ok( expectedInGrid( 'select_grid', dropdown, expected_ids ), 'zero records are in selected grid' );
dropdown.find( '#select_grid_close_btn' ).click();
box.setValue( [] );
if ( callback ) {
callback();
}
} );
} );
function getRowId( row ) {
if ( !row || !row.prop ) {
return false;
}
if ( row.prop( 'id' ).indexOf( '_' ) == -1 ) {
return row.prop( 'id' );
}
var id_array = $( row ).prop( 'id' ).split( '_' );
return id_array[id_array.length - 1];
}
function expectedInGrid( target_grid_name, dropdown, expected_ids ) {
var selected_rows = null;
if ( target_grid_name == 'select_grid' ) {
selected_rows = dropdown.find( '.select-grid tr' );
} else {
selected_rows = dropdown.find( '.unselect-grid tr' );
}
var all_found = true;
for ( var n = 0; n < expected_ids.length; n++ ) {
var is_found = false;
for ( var i = 0; i < selected_rows.length; i++ ) {
if ( expected_ids[n] == getRowId( $( selected_rows[i] ) ) ) {
is_found = true;
break;
}
}
if ( !is_found ) {
all_found = false;
break;
}
}
return all_found;
}
}
}