From 97377bf138c4b8283e5d9ae35d677448313c97e0 Mon Sep 17 00:00:00 2001 From: Martin Edenhofer Date: Fri, 22 Feb 2013 11:36:00 +0100 Subject: [PATCH] Moved to css selectors for browser tests. Fixed setting widget. --- .../app/controllers/_settings/area.js.coffee | 10 +- .../app/views/getting_started.jst.eco | 4 +- .../app/views/settings/item.jst.eco | 2 +- test/browser/aaa_getting_started.rb | 83 +++++++++ test/browser/{auth.rb => auth_customer.rb} | 35 ++-- test/browser/auth_master.rb | 85 ++++++++++ test/browser/chat.rb | 25 +-- test/browser/customer_ticket_create.rb | 34 ++-- test/browser/prefereces.rb | 31 ++-- test/browser/setting.rb | 159 ++++++++++++++++++ test/browser_test_helper.rb | 99 +++++------ 11 files changed, 424 insertions(+), 143 deletions(-) create mode 100644 test/browser/aaa_getting_started.rb rename test/browser/{auth.rb => auth_customer.rb} (70%) create mode 100644 test/browser/auth_master.rb create mode 100644 test/browser/setting.rb diff --git a/app/assets/javascripts/app/controllers/_settings/area.js.coffee b/app/assets/javascripts/app/controllers/_settings/area.js.coffee index 4b8c9d0b3..1eee559b2 100644 --- a/app/assets/javascripts/app/controllers/_settings/area.js.coffee +++ b/app/assets/javascripts/app/controllers/_settings/area.js.coffee @@ -31,13 +31,11 @@ class App.SettingsAreaItem extends App.Controller # defaults directValue = 0 - directData = undefined for item in @setting.options['form'] - directValue = +1 - directData = @setting.state.value[item.name] - + directValue += 1 if directValue > 1 - item['default'] = directData + for item in @setting.options['form'] + item['default'] = @setting.state.value[item.name] else item['default'] = @setting.state.value @@ -62,7 +60,7 @@ class App.SettingsAreaItem extends App.Controller directValue = 0 directData = undefined for item in @setting.options['form'] - directValue = +1 + directValue += 1 directData = params[item.name] if directValue > 1 diff --git a/app/assets/javascripts/app/views/getting_started.jst.eco b/app/assets/javascripts/app/views/getting_started.jst.eco index 7f5482bae..1895a2620 100644 --- a/app/assets/javascripts/app/views/getting_started.jst.eco +++ b/app/assets/javascripts/app/views/getting_started.jst.eco @@ -15,14 +15,14 @@

<%- @T( 'Master Agent' ) %>

- +
<% end %>

<%- @T( 'Invite Agents' ) %>

- +
diff --git a/app/assets/javascripts/app/views/settings/item.jst.eco b/app/assets/javascripts/app/views/settings/item.jst.eco index 1168b4880..a37f7f80d 100644 --- a/app/assets/javascripts/app/views/settings/item.jst.eco +++ b/app/assets/javascripts/app/views/settings/item.jst.eco @@ -1,4 +1,4 @@ -
+

<%- @T( @setting.title ) %>

<%- @T( @setting.description ) %>

diff --git a/test/browser/aaa_getting_started.rb b/test/browser/aaa_getting_started.rb new file mode 100644 index 000000000..2f3d5cf3e --- /dev/null +++ b/test/browser/aaa_getting_started.rb @@ -0,0 +1,83 @@ +# encoding: utf-8 +require 'browser_test_helper' + +class AaaGettingStarted < ActiveSupport::TestCase + test 'getting started' do + tests = [ + { + :name => 'start', + :instance => Watir::Browser.new, + :url => 'http://localhost:3000/#getting_started', + :action => [ + { + :execute => 'wait', + :value => 6, + }, + { + :execute => 'check', + :css => '#form-master', + :result => true, + }, + ], + }, + { + :name => 'getting started', + :action => [ + { + :execute => 'set', + :css => 'input[name="firstname"]', + :value => 'Test Master', + }, + { + :execute => 'set', + :css => 'input[name="lastname"]', + :value => 'Agent', + }, + { + :execute => 'set', + :css => 'input[name="email"]', + :value => 'master@example.com', + }, + { + :execute => 'set', + :element => :text_field, + :css => 'input[name="password"]', + :value => 'test1234äöüß', + }, + { + :execute => 'set', + :css => 'input[name="password_confirm"]', + :value => 'test1234äöüß', + }, + { + :execute => 'click', + :css => '#form-master button[type="submit"]', + }, + { + :execute => 'wait', + :value => 5, + }, + { + :execute => 'check', + :css => '#login', + :result => false, + }, + { + :execute => 'check', + :element => :url, + :result => '#getting_started', + }, + + # check action + { + :execute => 'match', + :css => 'body', + :value => 'Invite Agents', + :match_result => true, + }, + ], + }, + ] + browser_single_test(tests) + end +end diff --git a/test/browser/auth.rb b/test/browser/auth_customer.rb similarity index 70% rename from test/browser/auth.rb rename to test/browser/auth_customer.rb index 424a5404c..aae172a50 100644 --- a/test/browser/auth.rb +++ b/test/browser/auth_customer.rb @@ -11,20 +11,17 @@ class Auth < ActiveSupport::TestCase :action => [ { :execute => 'check', - :element => :form, - :id => 'login', + :css => '#login', :result => true, }, { :execute => 'check', - :element => :button, - :type => 'submit', + :css => '#login button', :result => true, }, { :execute => 'click', - :element => :button, - :type => 'submit', + :css => '#login button', }, { :execute => 'wait', @@ -32,8 +29,7 @@ class Auth < ActiveSupport::TestCase }, { :execute => 'check', - :element => :form, - :id => 'login', + :css => '#login', :result => true, }, ], @@ -47,37 +43,40 @@ class Auth < ActiveSupport::TestCase }, { :execute => 'check', - :element => :form, - :id => 'login', + :css => '#login', :result => true, }, { :execute => 'set', - :element => :text_field, - :name => 'username', + :css => 'input[name="username"]', :value => 'nicole.braun@zammad.org', }, { :execute => 'set', - :element => :text_field, - :name => 'password', + :css => 'input[name="password"]', :value => 'test' }, { :execute => 'click', - :element => :button, - :type => 'submit', + :css => '#login button', }, { :execute => 'wait', :value => 3, }, + + # check action { :execute => 'check', - :element => :form, - :id => 'login', + :css => '#login', :result => false, }, + { + :execute => 'match', + :css => 'body', + :value => 'nicole.braun@zammad.org', + :match_result => true, + }, ], }, ] diff --git a/test/browser/auth_master.rb b/test/browser/auth_master.rb new file mode 100644 index 000000000..ade58d33e --- /dev/null +++ b/test/browser/auth_master.rb @@ -0,0 +1,85 @@ +# encoding: utf-8 +require 'browser_test_helper' + +class AuthMaster < ActiveSupport::TestCase + test 'authentication' do + tests = [ + { + :name => 'start', + :instance => Watir::Browser.new, + :url => 'http://localhost:3000', + :action => [ + { + :execute => 'check', + :css => '#login', + :result => true, + }, + { + :execute => 'check', + :css => '#login button', + :result => true, + }, + { + :execute => 'click', + :css => '#login button', + }, + { + :execute => 'wait', + :value => 3, + }, + { + :execute => 'check', + :css => '#login', + :result => true, + }, + ], + }, + { + :name => 'login', + :action => [ + { + :execute => 'wait', + :value => 2, + }, + { + :execute => 'check', + :css => '#login', + :result => true, + }, + { + :execute => 'set', + :css => 'input[name="username"]', + :value => 'master@example.com', + }, + { + :execute => 'set', + :css => 'input[name="password"]', + :value => 'test1234äöüß' + }, + { + :execute => 'click', + :css => '#login button', + }, + { + :execute => 'wait', + :value => 3, + }, + + # check action + { + :execute => 'check', + :css => '#login', + :result => false, + }, + { + :execute => 'match', + :css => 'body', + :value => 'master@example', + :match_result => true, + }, + ], + }, + ] + browser_single_test(tests) + end +end \ No newline at end of file diff --git a/test/browser/chat.rb b/test/browser/chat.rb index 540dd91d8..09e7dab85 100644 --- a/test/browser/chat.rb +++ b/test/browser/chat.rb @@ -9,45 +9,40 @@ class Chat < ActiveSupport::TestCase :name => 'start', :instance1 => Watir::Browser.new, :instance2 => Watir::Browser.new, - :instance1_username => 'm@edenhofer.de', + :instance1_username => 'master@example.com', :instance1_password => 'test', - :instance2_username => 'm@edenhofer.de', + :instance2_username => 'master@example.com', :instance2_password => 'test', :url => 'http://localhost:3000', :action => [ { :where => :instance1, :execute => 'check', - :element => :form, - :id => 'login', + :css => '#login', :result => false, }, { :where => :instance2, :execute => 'check', - :element => :form, - :id => 'login', + :css => '#login', :result => false, }, { :where => :instance1, :execute => 'click', - :element => :a, - :id => 'chat_toogle', + :css => '#chat_toogle', }, { :where => :instance1, :execute => 'set', - :element => :text_field, - :name => 'chat_message', + :css => 'input[name="chat_message"]', :value => message, }, { :where => :instance1, :execute => 'send_key', - :element => :text_field, - :name => 'chat_message', + :css => 'input[name="chat_message"]', :value => :enter, }, { @@ -57,16 +52,14 @@ class Chat < ActiveSupport::TestCase { :where => :instance1, :execute => 'match', - :element => :div, - :id => 'chat_log_container', + :css => '#chat_log_container', :value => message, :match_result => true, }, { :where => :instance2, :execute => 'match', - :element => :div, - :id => 'chat_log_container', + :css => '#chat_log_container', :value => message, :match_result => true, }, diff --git a/test/browser/customer_ticket_create.rb b/test/browser/customer_ticket_create.rb index ceb8d2cc0..2329fa60b 100644 --- a/test/browser/customer_ticket_create.rb +++ b/test/browser/customer_ticket_create.rb @@ -9,8 +9,7 @@ class CustomerTicketCreate < ActiveSupport::TestCase :action => [ { :execute => 'click', - :element => :link, - :href => '#customer_ticket_new', + :css => 'a[href="#customer_ticket_new"]', }, { :execute => 'wait', @@ -18,8 +17,7 @@ class CustomerTicketCreate < ActiveSupport::TestCase }, { :execute => 'check', - :element => :div, - :id => 'form_create', + :css => '#form_create', :result => true, }, { @@ -28,26 +26,22 @@ class CustomerTicketCreate < ActiveSupport::TestCase }, { :execute => 'select', - :element => :select_list, - :name => 'group_id', + :css => '#form_create select[name="group_id"]', :value => 'Users', }, { :execute => 'set', - :element => :text_field, - :name => 'subject', + :css => '#form_create input[name="subject"]', :value => 'some subject 123äöü', }, { :execute => 'set', - :element => :text_field, - :name => 'body', + :css => '#form_create textarea[name="body"]', :value => 'some body 123äöü', }, { :execute => 'click', - :element => :button, - :type => 'submit', + :css => 'button[type="submit"]', }, { :execute => 'wait', @@ -55,8 +49,7 @@ class CustomerTicketCreate < ActiveSupport::TestCase }, { :execute => 'check', - :element => :form, - :id => 'login', + :css => '#login', :result => false, }, { @@ -68,8 +61,7 @@ class CustomerTicketCreate < ActiveSupport::TestCase # check ticket { :execute => 'match', - :element => :div, - :class => 'article', + :css => 'div.article', :value => 'some body 123äöü', :match_result => true, }, @@ -77,19 +69,17 @@ class CustomerTicketCreate < ActiveSupport::TestCase # update ticket { :execute => 'check', - :element => :text_field, - :name => 'body', + :css => 'textarea[name="body"]', :result => true, }, { :execute => 'set', - :element => :text_field, - :name => 'body', + :css => 'textarea[name="body"]', :value => 'some body 1234 äöüß', }, { :execute => 'click', - :element => :button, + :css => 'button', :type => 'submit', }, { @@ -98,7 +88,7 @@ class CustomerTicketCreate < ActiveSupport::TestCase }, { :execute => 'match', - :element => :body, + :css => 'body', :value => 'some body 1234 äöüß', :match_result => true, }, diff --git a/test/browser/prefereces.rb b/test/browser/prefereces.rb index d57bf6ad5..ce474ffcf 100644 --- a/test/browser/prefereces.rb +++ b/test/browser/prefereces.rb @@ -9,13 +9,11 @@ class Preferences < ActiveSupport::TestCase :action => [ { :execute => 'click', - :element => :link, - :href => '#current_user', + :css => 'a[href="#current_user"]', }, { :execute => 'click', - :element => :link, - :href => '#profile', + :css => 'a[href="#profile"]', }, { :execute => 'wait', @@ -23,8 +21,7 @@ class Preferences < ActiveSupport::TestCase }, { :execute => 'click', - :element => :link, - :href => '#profile/language', + :css => 'a[href="#profile/language"]', }, { :execute => 'wait', @@ -32,8 +29,7 @@ class Preferences < ActiveSupport::TestCase }, { :execute => 'check', - :element => :div, - :id => 'language', + :css => '#language', :result => true, }, { @@ -42,14 +38,12 @@ class Preferences < ActiveSupport::TestCase }, { :execute => 'select', - :element => :select_list, - :name => 'locale', + :css => '#language select[name="locale"]', :value => 'Deutsch', }, { :execute => 'click', - :element => :button, - :type => 'submit', + :css => '#language button', }, { :execute => 'wait', @@ -57,26 +51,23 @@ class Preferences < ActiveSupport::TestCase }, { :execute => 'check', - :element => :form, - :id => 'login', + :css => '#login', :result => false, }, { :execute => 'match', - :element => :body, + :css => 'body', :value => 'Sprache', :match_result => true, }, { :execute => 'select', - :element => :select_list, - :name => 'locale', + :css => '#language select[name="locale"]', :value => 'English (United States)', }, { :execute => 'click', - :element => :button, - :type => 'submit', + :css => '#language button', }, { :execute => 'wait', @@ -84,7 +75,7 @@ class Preferences < ActiveSupport::TestCase }, { :execute => 'match', - :element => :body, + :css => 'body', :value => 'Language', :match_result => true, }, diff --git a/test/browser/setting.rb b/test/browser/setting.rb new file mode 100644 index 000000000..0dc8ee064 --- /dev/null +++ b/test/browser/setting.rb @@ -0,0 +1,159 @@ +# encoding: utf-8 +require 'browser_test_helper' + +class TestSetting < ActiveSupport::TestCase + test 'setting' do + tests = [ + { + :name => 'setting', + :action => [ + { + :execute => 'click', + :css => 'a[href="#settings"]', + }, + { + :execute => 'click', + :css => 'a[href="#settings/security"]', + }, + { + :execute => 'click', + :css => 'a[href="#settings/security/third_party_auth"]', + }, + { + :execute => 'wait', + :value => 2, + }, + { + :execute => 'check', + :css => '#auth_facebook select[name="auth_facebook"]', + :result => true, + }, + + # set yes + { + :execute => 'select', + :css => '#auth_facebook select[name="auth_facebook"]', + :value => 'yes', + }, + { + :execute => 'click', + :css => '#auth_facebook button[type=submit]', + }, + { + :execute => 'wait', + :value => 2, + }, + { + :execute => 'match', + :css => '#auth_facebook select[name="auth_facebook"]', + :value => 'yes', + :match_result => true, + }, + { + :execute => 'match', + :css => '#auth_facebook select[name="auth_facebook"]', + :value => 'no', + :match_result => false, + }, + { + :execute => 'wait', + :value => 2, + }, + + # set no + { + :execute => 'select', + :css => '#auth_facebook select[name="auth_facebook"]', + :value => 'no', + }, + { + :execute => 'click', + :css => '#auth_facebook button[type=submit]', + }, + { + :execute => 'wait', + :value => 2, + }, + { + :execute => 'match', + :css => '#auth_facebook select[name="auth_facebook"]', + :value => 'yes', + :match_result => false, + }, + { + :execute => 'match', + :css => '#auth_facebook select[name="auth_facebook"]', + :value => 'no', + :match_result => true, + }, + + # set key and secret + { + :execute => 'set', + :css => '#auth_facebook_credentials input[name=app_id]', + :value => 'id_test1234äöüß', + }, + { + :execute => 'set', + :css => '#auth_facebook_credentials input[name=app_secret]', + :value => 'secret_test1234äöüß', + }, + { + :execute => 'click', + :css => '#auth_facebook_credentials button[type=submit]', + }, + { + :execute => 'wait', + :value => 2, + }, + { + :execute => 'match', + :css => '#auth_facebook_credentials input[name=app_id]', + :value => 'id_test1234äöüß', + :match_result => true, + }, + { + :execute => 'match', + :css => '#auth_facebook_credentials input[name=app_secret]', + :value => 'secret_test1234äöüß', + :match_result => true, + }, + + # set key and secret again + { + :execute => 'set', + :css => '#auth_facebook_credentials input[name=app_id]', + :value => '---', + }, + { + :execute => 'set', + :css => '#auth_facebook_credentials input[name=app_secret]', + :value => '---', + }, + { + :execute => 'click', + :css => '#auth_facebook_credentials button[type=submit]', + }, + { + :execute => 'wait', + :value => 2, + }, + { + :execute => 'match', + :css => '#auth_facebook_credentials input[name=app_id]', + :value => '---', + :match_result => true, + }, + { + :execute => 'match', + :css => '#auth_facebook_credentials input[name=app_secret]', + :value => '---', + :match_result => true, + }, + + ], + }, + ] + browser_signle_test_with_login(tests, { :username => 'master@example.com' }) + end +end diff --git a/test/browser_test_helper.rb b/test/browser_test_helper.rb index 3c7ffff5a..3f65148df 100644 --- a/test/browser_test_helper.rb +++ b/test/browser_test_helper.rb @@ -19,26 +19,22 @@ class ActiveSupport::TestCase }, { :execute => 'check', - :element => :form, - :id => 'login', + :css => '#login', :result => true, }, { :execute => 'set', - :element => :text_field, - :name => 'username', + :css => 'input[name="username"]', :value => data[:username] || 'nicole.braun@zammad.org', }, { :execute => 'set', - :element => :text_field, - :name => 'password', + :css => 'input[name="password"]', :value => data[:password] || 'test' }, { :execute => 'click', - :element => :button, - :type => 'submit', + :css => '#login button', }, { :execute => 'wait', @@ -46,8 +42,7 @@ class ActiveSupport::TestCase }, { :execute => 'check', - :element => :form, - :id => 'login', + :css => '#login', :result => false, }, ], @@ -56,8 +51,8 @@ class ActiveSupport::TestCase return all_tests end - def browser_signle_test_with_login(tests) - all_tests = browser_login( {} ) + def browser_signle_test_with_login(tests, login = {}) + all_tests = browser_login( login ) all_tests = all_tests.concat( tests ) browser_single_test(all_tests) end @@ -123,44 +118,12 @@ class ActiveSupport::TestCase end def browser_element_action(test, action, instance) - if action[:id] - element = instance.send( action[:element], { :id => action[:id] } ) + if action[:css] + element = instance.element( { :css => action[:css] } ) if action[:result] == false - assert( !element.exists?, "(#{test[:name]}) Element #{action[:element]} with id #{action[:id]} exists" ) + assert( !element.exists?, "(#{test[:name]}) Element with css '#{action[:css]}' exists" ) else - assert( element.exists?, "(#{test[:name]}) Element #{action[:element]} with id #{action[:id]} doesn't exist" ) - end - elsif action[:type] - if action[:result] == false - element = instance.send( action[:element], { :type => action[:type] } ) - assert( !element.exists?, "(#{test[:name]}) Element #{action[:element]} with type #{action[:type]} exists" ) - else - element = instance.send( action[:element], { :type => action[:type] } ) - assert( element.exists?, "(#{test[:name]}) Element #{action[:element]} with type #{action[:type]} doesn't exist" ) - end - elsif action[:class] - if action[:result] == false - element = instance.send( action[:element], { :class => action[:class] } ) - assert( !element.exists?, "(#{test[:name]}) Element #{action[:element]} with class #{action[:class]} exists" ) - else - element = instance.send( action[:element], { :class => action[:class] } ) - assert( element.exists?, "(#{test[:name]}) Element #{action[:element]} with class #{action[:class]} doesn't exist" ) - end - elsif action[:name] - if action[:result] == false - element = instance.send( action[:element], { :name => action[:name] } ) - assert( !element.exists?, "(#{test[:name]}) Element #{action[:element]} with name #{action[:name]} exists" ) - else - element = instance.send( action[:element], { :name => action[:name] } ) - assert( element.exists?, "(#{test[:name]}) Element #{action[:element]} with name #{action[:name]} doesn't exist" ) - end - elsif action[:href] - if action[:result] == false - element = instance.send( action[:element], { :href => action[:href] } ) - assert( !element.exists?, "(#{test[:name]}) Element #{action[:element]} with href #{action[:href]} exists" ) - else - element = instance.send( action[:element], { :href => action[:href] } ) - assert( element.exists?, "(#{test[:name]}) Element #{action[:element]} with href #{action[:href]} doesn't exist" ) + assert( element.exists?, "(#{test[:name]}) Element with css '#{action[:css]}' doesn't exist" ) end elsif action[:element] == :url if instance.url =~ /#{Regexp.quote(action[:result])}/ @@ -168,31 +131,51 @@ class ActiveSupport::TestCase else assert( false, "(#{test[:name]}) url #{instance.url} is not matching #{action[:result]}" ) end - elsif action[:element] == :body - element = instance.send( action[:element] ) else assert( false, "(#{test[:name]}) unknow selector for '#{action[:element]}'" ) end if action[:execute] == 'set' - element.set( action[:value] ) + element.to_subtype.set( action[:value] ) elsif action[:execute] == 'select' - element.select( action[:value] ) + element.to_subtype.select( action[:value] ) elsif action[:execute] == 'click' element.click elsif action[:execute] == 'send_key' element.send_keys action[:value] elsif action[:execute] == 'match' - if element.text =~ /#{Regexp.quote(action[:value])}/ + if action[:css] =~ /select/ + success = element.to_subtype.selected?(action[:value]) if action[:match_result] - assert( true, "(#{test[:name]}) matching '#{action[:value]}' in content '#{element.text}'" ) + if success + assert( true, "(#{test[:name]}) matching '#{action[:value]}' in select list" ) + else + assert( false, "(#{test[:name]}) not matching '#{action[:value]}' in select list" ) + end else - assert( false, "(#{test[:name]}) matching '#{action[:value]}' in content '#{element.text}' but should not!" ) + if success + assert( false, "(#{test[:name]}) not matching '#{action[:value]}' in select list" ) + else + assert( true, "(#{test[:name]}) matching '#{action[:value]}' in select list" ) + end end else - if !action[:match_result] - assert( true, "(#{test[:name]}) not matching '#{action[:value]}' in content '#{element.text}'" ) + if action[:css] =~ /input|textarea/i + text = element.to_subtype.value else - assert( false, "(#{test[:name]}) not matching '#{action[:value]}' in content '#{element.text}' but should not!" ) + text = element.text + end + if text =~ /#{Regexp.quote(action[:value])}/ + if action[:match_result] + assert( true, "(#{test[:name]}) matching '#{action[:value]}' in content '#{text}'" ) + else + assert( false, "(#{test[:name]}) matching '#{action[:value]}' in content '#{text}' but should not!" ) + end + else + if !action[:match_result] + assert( true, "(#{test[:name]}) not matching '#{action[:value]}' in content '#{text}'" ) + else + assert( false, "(#{test[:name]}) not matching '#{action[:value]}' in content '#{text}' but should not!" ) + end end end elsif action[:execute] == 'check'