Added more tests for object manager.

This commit is contained in:
Martin Edenhofer 2016-05-29 00:04:26 +02:00
parent da754d5d25
commit eede1267b0
6 changed files with 387 additions and 38 deletions

View file

@ -4,5 +4,5 @@ class App.UiElement.integer
attribute.type = 'number' attribute.type = 'number'
attribute.step = '1' attribute.step = '1'
item = $( App.view('generic/input')(attribute: attribute) ) item = $( App.view('generic/input')(attribute: attribute) )
item.find('select').data('field-type', 'integer') item.data('field-type', 'integer')
item item

View file

@ -110,8 +110,22 @@ class ObjectManagerAttributesController < ApplicationController
private private
def check_params def check_params
if params[:data_type] =~ /^(boolean)$/
if params[:data_option][:options]
if params[:data_option][:options][:false]
params[:data_option][:options][false] = params[:data_option][:options][:false]
params[:data_option][:options].delete(:false)
end
if params[:data_option][:options][:true]
params[:data_option][:options][true] = params[:data_option][:options][:true]
params[:data_option][:options].delete(:true)
end
end
end
if params[:data_option] && !params[:data_option].key?(:default) if params[:data_option] && !params[:data_option].key?(:default)
params[:data_option][:default] = '' params[:data_option][:default] = if params[:data_type] =~ /^(input|select)$/
''
end
end end
return if !params[:data_option][:null].nil? return if !params[:data_option][:null].nil?
params[:data_option][:null] = true params[:data_option][:null] = true

View file

@ -23,7 +23,7 @@ list of all attributes
=end =end
def self.list_full def self.list_full
result = ObjectManager::Attribute.all result = ObjectManager::Attribute.all.order('position ASC, name ASC')
attributes = [] attributes = []
assets = {} assets = {}
result.each {|item| result.each {|item|
@ -354,7 +354,7 @@ returns:
active: true, active: true,
to_create: false, to_create: false,
to_delete: false, to_delete: false,
).order('position ASC') ).order('position ASC, name ASC')
attributes = [] attributes = []
result.each {|item| result.each {|item|
data = { data = {
@ -534,7 +534,7 @@ to send no browser reload event, pass false
attribute.name, attribute.name,
data_type, data_type,
default: attribute.data_option[:default], default: attribute.data_option[:default],
null: false null: true
) )
else else
raise "Unknown attribute.data_type '#{attribute.data_type}', can't update attribute" raise "Unknown attribute.data_type '#{attribute.data_type}', can't update attribute"
@ -571,7 +571,7 @@ to send no browser reload event, pass false
attribute.name, attribute.name,
data_type, data_type,
default: attribute.data_option[:default], default: attribute.data_option[:default],
null: false null: true
) )
elsif attribute.data_type =~ /^datetime|date$/ elsif attribute.data_type =~ /^datetime|date$/
ActiveRecord::Migration.add_column( ActiveRecord::Migration.add_column(
@ -623,7 +623,7 @@ to send no browser reload event, pass false
raise 'Only letters from a-z, numbers from 0-9, and _ are allowed' raise 'Only letters from a-z, numbers from 0-9, and _ are allowed'
elsif name !~ /[a-z]/ elsif name !~ /[a-z]/
raise 'At least one letters is needed' raise 'At least one letters is needed'
elsif name =~ /^(destroy|true|false|integer|select|drop|create|alter|index|table)$/ elsif name =~ /^(destroy|true|false|integer|select|drop|create|alter|index|table|varchar|blob|date|datetime|timestamp)$/
raise "#{name} is a reserved word, please choose a different one" raise "#{name} is a reserved word, please choose a different one"
end end
true true
@ -665,7 +665,7 @@ to send no browser reload event, pass false
end end
if data_type == 'select' || data_type == 'checkbox' if data_type == 'select' || data_type == 'checkbox'
raise 'Need data_option[:default] param' if data_option[:default].nil? raise 'Need data_option[:default] param' if !data_option.key?(:default)
raise 'Invalid data_option[:options] or data_option[:relation] param' if data_option[:options].nil? && data_option[:relation].nil? raise 'Invalid data_option[:options] or data_option[:relation] param' if data_option[:options].nil? && data_option[:relation].nil?
if !data_option.key?(:nulloption) if !data_option.key?(:nulloption)
data_option[:nulloption] = true data_option[:nulloption] = true
@ -673,7 +673,7 @@ to send no browser reload event, pass false
end end
if data_type == 'boolean' if data_type == 'boolean'
raise 'Need data_option[:default] param true|false' if data_option[:default].nil? raise 'Need data_option[:default] param true|false|undefined' if !data_option.key?(:default)
raise 'Invalid data_option[:options] param' if data_option[:options].nil? raise 'Invalid data_option[:options] param' if data_option[:options].nil?
end end

View file

@ -176,15 +176,213 @@ class AdminObjectManagerTest < TestCase
}, },
) )
sleep 10
object_manager_attribute_discard_changes object_manager_attribute_discard_changes
#object_manager_attribute_delete( sleep 4
# data: {
# name: 'browser_test2', object_manager_attribute_create(
# }, data: {
#) name: 'browser_test2',
display: 'Browser Test 2',
data_type: 'Text',
#data_option: {
# default: 'xxx',
#},
},
)
object_manager_attribute_create(
data: {
name: 'browser_test3',
display: 'Browser Test 3',
data_type: 'Select',
data_option: {
options: {
'aa' => 'AA',
'bb' => 'BB',
'cc' => 'CC',
},
},
},
)
object_manager_attribute_create(
data: {
name: 'browser_test4',
display: 'Browser Test 4',
data_type: 'Integer',
#data_option: {
# default: 'xxx',
# min: 15,
# max: 99,
#},
},
)
object_manager_attribute_create(
data: {
name: 'browser_test5',
display: 'Browser Test 5',
data_type: 'Datetime',
#data_option: {
# future: true,
# past: true,
# diff: 24
#},
},
)
object_manager_attribute_create(
data: {
name: 'browser_test6',
display: 'Browser Test 6',
data_type: 'Date',
#data_option: {
# future: true,
# past: true,
# diff: 24
#},
},
)
object_manager_attribute_create(
data: {
name: 'browser_test7',
display: 'Browser Test 7',
data_type: 'Boolean',
data_option: {
options: {
true: 'YES',
false: 'NO',
},
# default: true,
},
},
)
watch_for(
css: '#content',
value: 'Database Update required',
)
click(css: '#content .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',
)
# create new ticket
ticket = ticket_create(
data: {
customer: 'nico',
group: 'Users',
priority: '2 normal',
state: 'open',
title: 'ticket attribute test all #1',
body: 'ticket attribute test all #1',
},
custom_data_select: {
browser_test3: 'CC',
browser_test7: 'NO',
},
custom_data_input: {
browser_test2: 'some value öäüß',
browser_test4: '25',
},
disable_group_check: true,
)
ticket_verify(
data: {
title: 'ticket attribute test all #1',
custom_data_select: {
browser_test3: 'CC',
browser_test7: 'NO',
},
custom_data_input: {
browser_test2: 'some value öäüß',
browser_test4: '25',
},
},
)
object_manager_attribute_delete(
data: {
name: 'browser_test2',
},
)
object_manager_attribute_delete(
data: {
name: 'browser_test3',
},
)
object_manager_attribute_delete(
data: {
name: 'browser_test4',
},
)
object_manager_attribute_delete(
data: {
name: 'browser_test5',
},
)
object_manager_attribute_delete(
data: {
name: 'browser_test6',
},
)
object_manager_attribute_delete(
data: {
name: 'browser_test7',
},
)
click(css: '#content .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',
)
match_not(
css: '#content',
value: 'Database Update required',
)
match_not(
css: '#content table',
value: 'browser_test2',
)
match_not(
css: '#content table',
value: 'browser_test3',
)
match_not(
css: '#content table',
value: 'browser_test4',
)
match_not(
css: '#content table',
value: 'browser_test5',
)
match_not(
css: '#content table',
value: 'browser_test6',
)
match_not(
css: '#content table',
value: 'browser_test7',
)
end end
end end

View file

@ -30,11 +30,11 @@ class SettingTest < TestCase
# set yes # set yes
select( select(
css: '#auth_facebook select[name="{boolean}auth_facebook"]', css: '#auth_facebook select[name="auth_facebook"]',
value: 'yes', value: 'yes',
) )
match( match(
css: '#auth_facebook select[name="{boolean}auth_facebook"]', css: '#auth_facebook select[name="auth_facebook"]',
value: 'yes', value: 'yes',
) )
click( css: '#auth_facebook button[type=submit]' ) click( css: '#auth_facebook button[type=submit]' )
@ -44,17 +44,17 @@ class SettingTest < TestCase
) )
sleep 4 sleep 4
match( match(
css: '#auth_facebook select[name="{boolean}auth_facebook"]', css: '#auth_facebook select[name="auth_facebook"]',
value: 'yes', value: 'yes',
) )
match_not( match_not(
css: '#auth_facebook select[name="{boolean}auth_facebook"]', css: '#auth_facebook select[name="auth_facebook"]',
value: 'no', value: 'no',
) )
# set no # set no
select( select(
css: '#auth_facebook select[name="{boolean}auth_facebook"]', css: '#auth_facebook select[name="auth_facebook"]',
value: 'no', value: 'no',
) )
click( css: '#auth_facebook button[type=submit]' ) click( css: '#auth_facebook button[type=submit]' )
@ -64,11 +64,11 @@ class SettingTest < TestCase
) )
sleep 4 sleep 4
match( match(
css: '#auth_facebook select[name="{boolean}auth_facebook"]', css: '#auth_facebook select[name="auth_facebook"]',
value: 'no', value: 'no',
) )
match_not( match_not(
css: '#auth_facebook select[name="{boolean}auth_facebook"]', css: '#auth_facebook select[name="auth_facebook"]',
value: 'yes', value: 'yes',
) )

View file

@ -1779,7 +1779,7 @@ wait untill text in selector disabppears
browser: instance, browser: instance,
css: ".active .newTicket select[name=\"#{local_key}\"]", css: ".active .newTicket select[name=\"#{local_key}\"]",
value: local_value, value: local_value,
mute_log: true, #mute_log: true,
) )
} }
end end
@ -1790,7 +1790,7 @@ wait untill text in selector disabppears
css: ".active .newTicket input[name=\"#{local_key}\"]", css: ".active .newTicket input[name=\"#{local_key}\"]",
value: local_value, value: local_value,
clear: true, clear: true,
mute_log: true, #mute_log: true,
) )
} }
end end
@ -2018,7 +2018,7 @@ wait untill text in selector disabppears
browser: instance, browser: instance,
css: ".active .sidebar select[name=\"#{local_key}\"]", css: ".active .sidebar select[name=\"#{local_key}\"]",
value: local_value, value: local_value,
mute_log: true, #mute_log: true,
) )
} }
end end
@ -2029,7 +2029,7 @@ wait untill text in selector disabppears
css: ".active .sidebar input[name=\"#{local_key}\"]", css: ".active .sidebar input[name=\"#{local_key}\"]",
value: local_value, value: local_value,
clear: true, clear: true,
mute_log: true, #mute_log: true,
) )
} }
end end
@ -2095,6 +2095,12 @@ wait untill text in selector disabppears
body: 'some body', body: 'some body',
## group: 'some group', ## group: 'some group',
## state: 'closed', ## state: 'closed',
custom_data_select: {
key1: 'some value',
},
custom_data_input: {
key1: 'some value',
},
}, },
) )
@ -2108,7 +2114,7 @@ wait untill text in selector disabppears
data = params[:data] data = params[:data]
if data[:title] if data[:title]
title = instance.find_elements(css: '.content.active .ticketZoom-header .js-objectTitle')[0].text.strip title = instance.find_elements(css: '.content.active .ticketZoom-header .js-objectTitle').first.text.strip
if title =~ /#{data[:title]}/i if title =~ /#{data[:title]}/i
assert(true, "matching '#{data[:title]}' in title '#{title}'") assert(true, "matching '#{data[:title]}' in title '#{title}'")
else else
@ -2117,13 +2123,37 @@ wait untill text in selector disabppears
end end
if data[:body] if data[:body]
body = instance.find_elements(css: '.content.active [data-name="body"]')[0].text.strip body = instance.find_elements(css: '.content.active [data-name="body"]').first.text.strip
if body =~ /#{data[:body]}/i if body =~ /#{data[:body]}/i
assert(true, "matching '#{data[:body]}' in body '#{body}'") assert(true, "matching '#{data[:body]}' in body '#{body}'")
else else
raise "not matching '#{data[:body]}' in body '#{body}'" raise "not matching '#{data[:body]}' in body '#{body}'"
end end
end end
if params[:custom_data_select]
params[:custom_data_select].each {|local_key, local_value|
element = instance.find_elements(css: ".active .sidebar select[name=\"#{local_key}\"] option[selected]").first
value = element.text.strip
if value =~ /#{local_value}/i
assert(true, "matching '#{value}' in #{local_key} '#{local_value}'")
else
raise "not matching '#{value}' in #{local_key} '#{local_value}'"
end
}
end
if params[:custom_data_input]
params[:custom_data_input].each {|local_key, local_value|
element = instance.find_elements(css: ".active .sidebar input[name=\"#{local_key}\"]").first
value = element.text.strip
if value =~ /#{local_value}/i
assert(true, "matching '#{value}' in #{local_key} '#{local_value}'")
else
raise "not matching '#{value}' in #{local_key} '#{local_value}'"
end
}
end
true true
end end
@ -2717,12 +2747,89 @@ wait untill text in selector disabppears
data: { data: {
name: 'field_name' + random, name: 'field_name' + random,
display: 'Display Name of Field', display: 'Display Name of Field',
data_type: 'Text', # Text|Select|... data_type: 'Select',
data_option: { data_option: {
options: { options: {
'aa' => 'AA', 'aa' => 'AA',
'bb' => 'BB', 'bb' => 'BB',
}, },
default: 'abc',
},
},
error: 'already exists'
)
object_manager_attribute_create(
browser: browser2,
data: {
name: 'field_name' + random,
display: 'Display Name of Field',
data_type: 'Text',
data_option: {
default: 'abc',
},
},
error: 'already exists'
)
object_manager_attribute_create(
browser: browser2,
data: {
name: 'field_name' + random,
display: 'Display Name of Field',
data_type: 'Integer',
data_option: {
default: '15',
min: 1,
max: 999999,
},
},
error: 'already exists'
)
object_manager_attribute_create(
browser: browser2,
data: {
name: 'field_name' + random,
display: 'Display Name of Field',
data_type: 'Datetime',
data_option: {
future: true,
past: true,
diff: 24,
},
},
error: 'already exists'
)
object_manager_attribute_create(
browser: browser2,
data: {
name: 'field_name' + random,
display: 'Display Name of Field',
data_type: 'Date',
data_option: {
future: true,
past: true,
diff: 24,
},
},
error: 'already exists'
)
object_manager_attribute_create(
browser: browser2,
data: {
name: 'field_name' + random,
display: 'Display Name of Field',
data_type: 'Boolean',
data_option: {
options: {
true: 'YES',
false: 'NO',
}
default: undefined,
}, },
}, },
error: 'already exists' error: 'already exists'
@ -2768,6 +2875,14 @@ wait untill text in selector disabppears
) )
if data[:data_option] if data[:data_option]
if data[:data_option][:options] if data[:data_option][:options]
if data[:data_type] == 'Boolean'
element = instance.find_elements(css: '.modal .js-valueTrue').first
element.clear
element.send_keys(data[:data_option][:options][:true])
element = instance.find_elements(css: '.modal .js-valueFalse').first
element.clear
element.send_keys(data[:data_option][:options][:false])
else
data[:data_option][:options].each {|key, value| data[:data_option][:options].each {|key, value|
element = instance.find_elements(css: '.modal .js-Table .js-key').last element = instance.find_elements(css: '.modal .js-Table .js-key').last
element.clear element.clear
@ -2780,6 +2895,25 @@ wait untill text in selector disabppears
} }
end end
end end
[:default, :min, :max, :diff].each {|key|
next if !data[:data_option].key?(key)
element = instance.find_elements(css: ".modal [name=\"data_option::#{key}\"]").first
element.clear
element.send_keys(data[:data_option][key])
}
[:future, :past].each {|key|
next if !data[:data_option].key?(key)
select(
browser: instance,
css: ".modal select[name=\"data_option::#{key}\"]",
value: data[:data_option][key],
mute_log: true,
)
}
end
instance.find_elements(css: '.modal button.js-submit')[0].click instance.find_elements(css: '.modal button.js-submit')[0].click
if params[:error] if params[:error]
sleep 4 sleep 4
@ -2824,6 +2958,9 @@ wait untill text in selector disabppears
switch_window_focus(params) switch_window_focus(params)
log('object_manager_attribute_delete', params) log('object_manager_attribute_delete', params)
instance = params[:browser] || @browser
data = params[:data]
click( click(
browser: instance, browser: instance,
css: 'a[href="#manage"]', css: 'a[href="#manage"]',