diff --git a/app/assets/javascripts/app/controllers/_application_controller_form.coffee b/app/assets/javascripts/app/controllers/_application_controller_form.coffee index 9083d24db..9afbad5a1 100644 --- a/app/assets/javascripts/app/controllers/_application_controller_form.coffee +++ b/app/assets/javascripts/app/controllers/_application_controller_form.coffee @@ -507,7 +507,7 @@ class App.ControllerForm extends App.Controller param[newKey] = "invalid #{param[key]}" console.log('ERR', err) else - param[newKey] = undefined + param[newKey] = null delete param[key] # get {datetime} @@ -525,7 +525,7 @@ class App.ControllerForm extends App.Controller param[newKey] = "invalid #{param[key]}" console.log('ERR', err) else - param[newKey] = undefined + param[newKey] = null delete param[key] # split :: fields, build objects diff --git a/app/assets/javascripts/app/models/_application_model.coffee b/app/assets/javascripts/app/models/_application_model.coffee index 25e7cb4aa..b0f1315db 100644 --- a/app/assets/javascripts/app/models/_application_model.coffee +++ b/app/assets/javascripts/app/models/_application_model.coffee @@ -124,13 +124,13 @@ class App.Model extends Spine.Model if parts[0] && !parts[1] # key exists not in hash || value is '' || value is undefined - if !( attributeName of data['params'] ) || data['params'][attributeName] is '' || data['params'][attributeName] is undefined + if !( attributeName of data['params'] ) || data['params'][attributeName] is '' || data['params'][attributeName] is undefined || data['params'][attributeName] is null errors[attributeName] = 'is required' else if parts[0] && parts[1] && !parts[2] # key exists not in hash || value is '' || value is undefined - if !data.params[parts[0]] || !( parts[1] of data.params[parts[0]] ) || data.params[parts[0]][parts[1]] is '' || data.params[parts[0]][parts[1]] is undefined + if !data.params[parts[0]] || !( parts[1] of data.params[parts[0]] ) || data.params[parts[0]][parts[1]] is '' || data.params[parts[0]][parts[1]] is undefined || data.params[parts[0]][parts[1]] is null errors[attributeName] = 'is required' else diff --git a/public/assets/tests/form.js b/public/assets/tests/form.js index 46d22e110..895c433b2 100644 --- a/public/assets/tests/form.js +++ b/public/assets/tests/form.js @@ -281,13 +281,13 @@ test("form params check", function() { richtext7: '', richtext8: '
lalu b lalu
', datetime1: '2015-01-11T12:40:00.000Z', - datetime2: undefined, + datetime2: null, datetime3: '2015-01-11T12:40:00.000Z', - datetime4: undefined, + datetime4: null, date1: '2015-01-11', - date2: undefined, + date2: null, date3: '2015-01-11', - date4: undefined, + date4: null, active1: true, active2: false, checkbox1: [], @@ -518,13 +518,13 @@ test("form dependend fields check", function() { selectmulti2: [ "true", "false" ], selectmultioption1: "false", datetime1: '2015-01-11T12:40:00.000Z', - datetime2: undefined, + datetime2: null, datetime3: '2015-01-11T12:40:00.000Z', - datetime4: undefined, + datetime4: null, date1: '2015-01-11', - date2: undefined, + date2: null, date3: '2015-01-11', - date4: undefined, + date4: null, } deepEqual(params, test_params, 'form param check') @@ -547,13 +547,13 @@ test("form dependend fields check", function() { selectmulti2: [ "true", "false" ], selectmultioption1: "false", datetime1: null, - datetime2: undefined, + datetime2: null, datetime3: '2015-01-11T12:40:00.000Z', - datetime4: undefined, + datetime4: null, date1: '2015-01-11', - date2: undefined, + date2: null, date3: '2015-01-11', - date4: undefined, + date4: null, } deepEqual(params, test_params, 'form param check') }); diff --git a/public/assets/tests/form_validation.js b/public/assets/tests/form_validation.js index c0e00ac9d..1a4291130 100644 --- a/public/assets/tests/form_validation.js +++ b/public/assets/tests/form_validation.js @@ -111,7 +111,7 @@ test('datetime validation check', function() { // check params params = App.ControllerForm.params(el) test_params = { - datetime1: undefined, + datetime1: null, } deepEqual(params, test_params, 'params check') @@ -191,7 +191,7 @@ test('date validation check', function() { // check params params = App.ControllerForm.params(el) test_params = { - date2: undefined, + date2: null, } deepEqual(params, test_params, 'params check') @@ -234,7 +234,7 @@ test('date validation check', function() { // check params params = App.ControllerForm.params(el) test_params = { - date2: undefined, + date2: null, } deepEqual(params, test_params, 'params check') @@ -269,7 +269,7 @@ test( "datetime selector check", function() { // check params params = App.ControllerForm.params(el) test_params = { - datetime1: undefined, + datetime1: null, } deepEqual(params, test_params, 'params check') @@ -330,7 +330,7 @@ test( "date selector check", function() { // check params params = App.ControllerForm.params(el) test_params = { - date3: undefined, + date3: null, } deepEqual(params, test_params, 'params check') diff --git a/script/build/test_slice_tests.sh b/script/build/test_slice_tests.sh index af19f1fc3..e23cd0df7 100755 --- a/script/build/test_slice_tests.sh +++ b/script/build/test_slice_tests.sh @@ -38,6 +38,7 @@ if [ "$LEVEL" == '1' ]; then rm test/browser/agent_ticket_update1_test.rb rm test/browser/agent_ticket_update2_test.rb rm test/browser/agent_ticket_update3_test.rb + rm test/browser/agent_ticket_update4_test.rb rm test/browser/agent_ticket_update_and_reload_test.rb rm test/browser/agent_user_manage_test.rb rm test/browser/agent_user_profile_test.rb @@ -100,6 +101,7 @@ elif [ "$LEVEL" == '2' ]; then # test/browser/agent_ticket_update1_test.rb # test/browser/agent_ticket_update2_test.rb # test/browser/agent_ticket_update3_test.rb + # test/browser/agent_ticket_update4_test.rb # test/browser/agent_ticket_update_and_reload_test.rb rm test/browser/agent_user_manage_test.rb rm test/browser/agent_user_profile_test.rb @@ -162,6 +164,7 @@ elif [ "$LEVEL" == '3' ]; then rm test/browser/agent_ticket_update1_test.rb rm test/browser/agent_ticket_update2_test.rb rm test/browser/agent_ticket_update3_test.rb + rm test/browser/agent_ticket_update4_test.rb rm test/browser/agent_ticket_update_and_reload_test.rb rm test/browser/agent_user_manage_test.rb rm test/browser/agent_user_profile_test.rb @@ -224,6 +227,7 @@ elif [ "$LEVEL" == '4' ]; then rm test/browser/agent_ticket_update1_test.rb rm test/browser/agent_ticket_update2_test.rb rm test/browser/agent_ticket_update3_test.rb + rm test/browser/agent_ticket_update4_test.rb rm test/browser/agent_ticket_update_and_reload_test.rb rm test/browser/agent_user_manage_test.rb rm test/browser/agent_user_profile_test.rb @@ -285,6 +289,7 @@ elif [ "$LEVEL" == '5' ]; then rm test/browser/agent_ticket_update1_test.rb rm test/browser/agent_ticket_update2_test.rb rm test/browser/agent_ticket_update3_test.rb + rm test/browser/agent_ticket_update4_test.rb rm test/browser/agent_ticket_update_and_reload_test.rb # test/browser/agent_user_manage_test.rb # test/browser/agent_user_profile_test.rb @@ -349,6 +354,7 @@ elif [ "$LEVEL" == '6' ]; then rm test/browser/agent_ticket_update1_test.rb rm test/browser/agent_ticket_update2_test.rb rm test/browser/agent_ticket_update3_test.rb + rm test/browser/agent_ticket_update4_test.rb rm test/browser/agent_ticket_update_and_reload_test.rb rm test/browser/agent_user_manage_test.rb rm test/browser/agent_user_profile_test.rb diff --git a/test/browser/agent_ticket_update4_test.rb b/test/browser/agent_ticket_update4_test.rb new file mode 100644 index 000000000..79df969db --- /dev/null +++ b/test/browser/agent_ticket_update4_test.rb @@ -0,0 +1,77 @@ +require 'browser_test_helper' + +class AgentTicketUpdate4Test < TestCase + + def test_update_date_object_for_ticket + + @browser = browser_instance + login( + username: 'master@example.com', + password: 'test', + url: browser_url, + ) + tasks_close_all() + + # date object + object_manager_attribute_create( + data: { + name: 'date1', + display: "Date-#{rand(999_999)}", + data_type: 'Date', + }, + ) + + watch_for( + css: '.content.active', + value: 'Database Update required', + ) + + click(css: '.content.active .tab-pane.active div.js-execute') + watch_for( + css: '.modal', + value: 'restart', + ) + watch_for_disappear( + css: '.modal', + timeout: 120, + ) + sleep 5 + watch_for( + css: '.content.active', + ) + + # create new ticket + ticket = ticket_create( + data: { + customer: 'nico', + group: 'Users', + priority: '2 normal', + state: 'open', + title: 'ticket attribute test #1', + body: 'ticket attribute test #1', + }, + custom_data_date: { + date1: '02/28/2018', + }, + disable_group_check: true, + ) + + ticket_open_by_search( + browser: @browser, + number: ticket[:number], + ) + + ticket_update( + data: {}, + custom_data_date: { + date1: '', + }, + ) + click(css: '.content.active .js-submit') + + match_not( + css: '.active .sidebar div[data-name="date1"] input[data-item="date"]', + value: '02/28/2018', + ) + end +end diff --git a/test/browser_test_helper.rb b/test/browser_test_helper.rb index a6c3744eb..ccbdec8f4 100644 --- a/test/browser_test_helper.rb +++ b/test/browser_test_helper.rb @@ -1832,6 +1832,9 @@ wait untill text in selector disabppears custom_data_input: { key1: 'some value', }, + custom_data_date: { + key!: '02/28/2018', + } disable_group_check: true, ) @@ -1984,6 +1987,14 @@ wait untill text in selector disabppears clear: true, ) end + params[:custom_data_date]&.each do |local_key, local_value| + set( + browser: instance, + css: ".content.active .newTicket div[data-name=\"#{local_key}\"] input[data-item=\"date\"]", + value: local_value, + clear: true, + ) + end if data[:attachment] file_upload( @@ -2064,6 +2075,9 @@ wait untill text in selector disabppears custom_data_input: { key1: 'some value', }, + custom_data_date: { + key1: '02/21/2018', + }, do_not_submit: true, task_type: 'stayOnTab', # default: stayOnTab / possible: closeTab, closeNextInOverview, stayOnTab ) @@ -2214,6 +2228,26 @@ wait untill text in selector disabppears clear: true, ) end + params[:custom_data_date]&.each do |local_key, local_value| + click( + browser: instance, + css: ".active .sidebar div[data-name=\"#{local_key}\"] input[data-item=\"date\"]", + mute_log: true, + ) + # weird bug where you cannot "clear" for date/time input + # this is specific chrome problem, chrome bug report: https://bugs.chromium.org/p/chromedriver/issues/detail?id=1319#c2 + # indirect issue: https://github.com/angular/protractor/issues/562#issuecomment-47745263 + 11.times do + sendkey( + value: :backspace, + ) + end + set( + browser: instance, + css: ".active .sidebar div[data-name=\"#{local_key}\"] input[data-item=\"date\"]", + value: local_value, + ) + end if data[:state] || data[:group] || data[:body] || params[:custom_data_select].present? || params[:custom_data_input].present? found = nil