effective_test_bot 0.5.2 → 0.5.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
 - data/README.md +17 -1
 - data/lib/effective_test_bot.rb +11 -0
 - data/lib/effective_test_bot/version.rb +1 -1
 - data/lib/generators/templates/effective_test_bot.rb +3 -0
 - data/lib/generators/templates/test_helper.rb +5 -15
 - data/test/concerns/test_botable/crud_dsl.rb +1 -1
 - data/test/concerns/test_botable/devise_dsl.rb +1 -1
 - data/test/concerns/test_botable/member_dsl.rb +1 -1
 - data/test/concerns/test_botable/page_dsl.rb +1 -1
 - data/test/concerns/test_botable/redirect_dsl.rb +1 -1
 - data/test/concerns/test_botable/wizard_dsl.rb +1 -1
 - data/test/fixtures/documents._test +0 -0
 - data/test/fixtures/logo.png +0 -0
 - data/test/support/effective_test_bot_assertions.rb +9 -4
 - data/test/support/effective_test_bot_form_filler.rb +50 -26
 - data/test/support/effective_test_bot_form_helper.rb +2 -2
 - data/test/support/effective_test_bot_screenshots_helper.rb +0 -1
 - data/test/support/effective_test_bot_test_helper.rb +17 -0
 - data/test/test_botable/base_test.rb +14 -7
 - data/test/test_botable/crud_test.rb +4 -8
 - metadata +18 -3
 - data/test/support/important_documents._test +0 -1
 
    
        checksums.yaml
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ---
         
     | 
| 
       2 
2 
     | 
    
         
             
            SHA1:
         
     | 
| 
       3 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       4 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: 8411cc5cae54d4456303dea648f1030f427c134f
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: 971478e8e7a6b523ca81e40152dc6f018023e7a5
         
     | 
| 
       5 
5 
     | 
    
         
             
            SHA512:
         
     | 
| 
       6 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       7 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: 41f82b5ef61e3addd71989a4171772ac0acc98869108eb9c5daf2cbf887271bd00fa69d2d5cbd43c91fffe2e4e9cf4215dd964269e66ed46274e70bb3c86dae3
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: 5c341d462afb03a6b2ecc4e839f0f690217b5160c56eb1bc2c35e09b766254ddb36645c0802d3af348234678ac092fb26e30e6cbf021e28c05ae63caf687ef8f
         
     | 
    
        data/README.md
    CHANGED
    
    | 
         @@ -79,7 +79,11 @@ rake test:load_fixture_seeds 
     | 
|
| 
       79 
79 
     | 
    
         | 
| 
       80 
80 
     | 
    
         
             
            Your initial user may be created by any of the above 3 tasks.
         
     | 
| 
       81 
81 
     | 
    
         | 
| 
       82 
     | 
    
         
            -
            Finally, to test that your testing environment is set up correctly run  
     | 
| 
      
 82 
     | 
    
         
            +
            Finally, to test that your testing environment is set up correctly run and work through any issues with:
         
     | 
| 
      
 83 
     | 
    
         
            +
             
     | 
| 
      
 84 
     | 
    
         
            +
            ```
         
     | 
| 
      
 85 
     | 
    
         
            +
            rake test:bot:environment
         
     | 
| 
      
 86 
     | 
    
         
            +
            ```
         
     | 
| 
       83 
87 
     | 
    
         | 
| 
       84 
88 
     | 
    
         
             
            You now have effective_test_bot configured and you're ready to go.
         
     | 
| 
       85 
89 
     | 
    
         | 
| 
         @@ -570,6 +574,18 @@ rake test:tour 
     | 
|
| 
       570 
574 
     | 
    
         
             
            rake test:tourv
         
     | 
| 
       571 
575 
     | 
    
         
             
            ```
         
     | 
| 
       572 
576 
     | 
    
         | 
| 
      
 577 
     | 
    
         
            +
            ### Fail Fast
         
     | 
| 
      
 578 
     | 
    
         
            +
             
     | 
| 
      
 579 
     | 
    
         
            +
            Set `config.fail_fast = true` to exit immediately if there is a test failure.
         
     | 
| 
      
 580 
     | 
    
         
            +
             
     | 
| 
      
 581 
     | 
    
         
            +
            Or, override the config setting by running the following:
         
     | 
| 
      
 582 
     | 
    
         
            +
             
     | 
| 
      
 583 
     | 
    
         
            +
            ```
         
     | 
| 
      
 584 
     | 
    
         
            +
            rake test:bot FAILFAST=true
         
     | 
| 
      
 585 
     | 
    
         
            +
            ```
         
     | 
| 
      
 586 
     | 
    
         
            +
             
     | 
| 
      
 587 
     | 
    
         
            +
            This functionality is provided thanks to [minitest-fail-fast](https://github.com/teoljungberg/minitest-fail-fast/)
         
     | 
| 
      
 588 
     | 
    
         
            +
             
     | 
| 
       573 
589 
     | 
    
         
             
            ## License
         
     | 
| 
       574 
590 
     | 
    
         | 
| 
       575 
591 
     | 
    
         
             
            MIT License.  Copyright [Code and Effect Inc.](http://www.codeandeffect.com/)
         
     | 
    
        data/lib/effective_test_bot.rb
    CHANGED
    
    | 
         @@ -5,6 +5,7 @@ require "effective_test_bot/version" 
     | 
|
| 
       5 
5 
     | 
    
         
             
            module EffectiveTestBot
         
     | 
| 
       6 
6 
     | 
    
         
             
              mattr_accessor :except
         
     | 
| 
       7 
7 
     | 
    
         
             
              mattr_accessor :only
         
     | 
| 
      
 8 
     | 
    
         
            +
              mattr_accessor :fail_fast
         
     | 
| 
       8 
9 
     | 
    
         
             
              mattr_accessor :screenshots
         
     | 
| 
       9 
10 
     | 
    
         
             
              mattr_accessor :autosave_animated_gif_on_failure
         
     | 
| 
       10 
11 
     | 
    
         
             
              mattr_accessor :tour_mode
         
     | 
| 
         @@ -55,6 +56,16 @@ module EffectiveTestBot 
     | 
|
| 
       55 
56 
     | 
    
         
             
                screenshots && autosave_animated_gif_on_failure
         
     | 
| 
       56 
57 
     | 
    
         
             
              end
         
     | 
| 
       57 
58 
     | 
    
         | 
| 
      
 59 
     | 
    
         
            +
              def self.fail_fast?
         
     | 
| 
      
 60 
     | 
    
         
            +
                fails = ENV['FAIL_FAST'] || ENV['FAILFAST'] || ENV['FAIL']
         
     | 
| 
      
 61 
     | 
    
         
            +
             
     | 
| 
      
 62 
     | 
    
         
            +
                if fails.present?
         
     | 
| 
      
 63 
     | 
    
         
            +
                  ['true', '1'].include?(fails).to_s.downcase)
         
     | 
| 
      
 64 
     | 
    
         
            +
                else
         
     | 
| 
      
 65 
     | 
    
         
            +
                  fail_fast
         
     | 
| 
      
 66 
     | 
    
         
            +
                end
         
     | 
| 
      
 67 
     | 
    
         
            +
              end
         
     | 
| 
      
 68 
     | 
    
         
            +
             
     | 
| 
       58 
69 
     | 
    
         
             
              def self.tour_mode?
         
     | 
| 
       59 
70 
     | 
    
         
             
                if ENV['TOUR'].present?
         
     | 
| 
       60 
71 
     | 
    
         
             
                  ['true', 'verbose', 'debug'].include?(ENV['TOUR'].to_s.downcase)
         
     | 
| 
         @@ -17,6 +17,9 @@ if Rails.env.test? 
     | 
|
| 
       17 
17 
     | 
    
         
             
                #   'posts', 'events#index'
         
     | 
| 
       18 
18 
     | 
    
         
             
                # ]
         
     | 
| 
       19 
19 
     | 
    
         | 
| 
      
 20 
     | 
    
         
            +
                # Exits immediately if there is a test failure
         
     | 
| 
      
 21 
     | 
    
         
            +
                config.fail_fast = true
         
     | 
| 
      
 22 
     | 
    
         
            +
             
     | 
| 
       20 
23 
     | 
    
         
             
                # Should capybara generate a series of *.png screenshots as it goes through the test?
         
     | 
| 
       21 
24 
     | 
    
         
             
                # Disabling screenshots will also disable animated_gifs and touring
         
     | 
| 
       22 
25 
     | 
    
         
             
                config.screenshots = true
         
     | 
| 
         @@ -16,7 +16,6 @@ require 'capybara/slow_finder_errors' 
     | 
|
| 
       16 
16 
     | 
    
         
             
            class ActiveSupport::TestCase
         
     | 
| 
       17 
17 
     | 
    
         
             
              # Setup all fixtures in test/fixtures/*.yml for all tests in alphabetical order.
         
     | 
| 
       18 
18 
     | 
    
         
             
              fixtures :all
         
     | 
| 
       19 
     | 
    
         
            -
              # Add more helper methods to be used by all tests here...
         
     | 
| 
       20 
19 
     | 
    
         
             
              use_transactional_fixtures = true
         
     | 
| 
       21 
20 
     | 
    
         
             
            end
         
     | 
| 
       22 
21 
     | 
    
         | 
| 
         @@ -26,19 +25,8 @@ class ActionDispatch::IntegrationTest 
     | 
|
| 
       26 
25 
     | 
    
         
             
              include Capybara::Assertions
         
     | 
| 
       27 
26 
     | 
    
         
             
              include Capybara::Screenshot::MiniTestPlugin
         
     | 
| 
       28 
27 
     | 
    
         
             
              include Warden::Test::Helpers if defined?(Devise)
         
     | 
| 
       29 
     | 
    
         
            -
             
     | 
| 
       30 
     | 
    
         
            -
              # def setup # Called before every test
         
     | 
| 
       31 
     | 
    
         
            -
              # end
         
     | 
| 
       32 
     | 
    
         
            -
             
     | 
| 
       33 
     | 
    
         
            -
              # def teardown # Called after every test
         
     | 
| 
       34 
     | 
    
         
            -
              # end
         
     | 
| 
       35 
     | 
    
         
            -
             
     | 
| 
       36 
     | 
    
         
            -
              def after_teardown # I reset sessions here so capybara-screenshot can still make screenshots when tests fail
         
     | 
| 
       37 
     | 
    
         
            -
                super(); Capybara.reset_sessions!
         
     | 
| 
       38 
     | 
    
         
            -
              end
         
     | 
| 
       39 
28 
     | 
    
         
             
            end
         
     | 
| 
       40 
29 
     | 
    
         | 
| 
       41 
     | 
    
         
            -
             
     | 
| 
       42 
30 
     | 
    
         
             
            Capybara.default_driver = :webkit
         
     | 
| 
       43 
31 
     | 
    
         
             
            Capybara.javascript_driver = :webkit
         
     | 
| 
       44 
32 
     | 
    
         
             
            Capybara::Screenshot.autosave_on_failure = true
         
     | 
| 
         @@ -52,9 +40,7 @@ Minitest::Reporters.use! Minitest::Reporters::SpecReporter.new 
     | 
|
| 
       52 
40 
     | 
    
         
             
            Rails.backtrace_cleaner.remove_silencers!
         
     | 
| 
       53 
41 
     | 
    
         
             
            Rails.backtrace_cleaner.add_silencer { |line| line =~ /minitest/ }
         
     | 
| 
       54 
42 
     | 
    
         | 
| 
       55 
     | 
    
         
            -
             
     | 
| 
       56 
     | 
    
         
            -
            ### So this is EffectiveTestBot 'code' here
         
     | 
| 
       57 
     | 
    
         
            -
            ### That gets run just once before the whole test suite loads
         
     | 
| 
      
 43 
     | 
    
         
            +
            ### Effective Test Bot specific stuff below ###
         
     | 
| 
       58 
44 
     | 
    
         | 
| 
       59 
45 
     | 
    
         
             
            # So the very first thing I do is set up a consistent database
         
     | 
| 
       60 
46 
     | 
    
         
             
            silence_stream(STDOUT) do
         
     | 
| 
         @@ -75,6 +61,10 @@ Rake::Task['db:fixtures:load'].invoke # There's just no way to get the seeds fir 
     | 
|
| 
       75 
61 
     | 
    
         
             
            Rake::Task['db:seed'].invoke
         
     | 
| 
       76 
62 
     | 
    
         
             
            Rake::Task['test:load_fixture_seeds'].invoke # This is included by effective_test_bot.  It just runs the app's test/fixtures/seeds.rb if it exists
         
     | 
| 
       77 
63 
     | 
    
         | 
| 
      
 64 
     | 
    
         
            +
            if EffectiveTestBot.fail_fast?
         
     | 
| 
      
 65 
     | 
    
         
            +
              require 'minitest/fail_fast'
         
     | 
| 
      
 66 
     | 
    
         
            +
            end
         
     | 
| 
      
 67 
     | 
    
         
            +
             
     | 
| 
       78 
68 
     | 
    
         
             
            # Make all database transactions use the same thread, otherwise signing up in capybara won't get rolled back
         
     | 
| 
       79 
69 
     | 
    
         
             
            # This must be run after the Rake::Tasks above
         
     | 
| 
       80 
70 
     | 
    
         
             
            class ActiveRecord::Base
         
     | 
| 
         @@ -46,7 +46,7 @@ module TestBotable 
     | 
|
| 
       46 
46 
     | 
    
         | 
| 
       47 
47 
     | 
    
         
             
                      method_name = test_bot_method_name('crud_test', label || options_for_method[:current_test])
         
     | 
| 
       48 
48 
     | 
    
         | 
| 
       49 
     | 
    
         
            -
                      define_method(method_name) { crud_action_test(test: test, resource: resource, user: user,  
     | 
| 
      
 49 
     | 
    
         
            +
                      define_method(method_name) { crud_action_test(test: test, resource: resource, user: user, **options_for_method) }
         
     | 
| 
       50 
50 
     | 
    
         
             
                    end
         
     | 
| 
       51 
51 
     | 
    
         
             
                  end
         
     | 
| 
       52 
52 
     | 
    
         | 
| 
         @@ -23,7 +23,7 @@ module TestBotable 
     | 
|
| 
       23 
23 
     | 
    
         | 
| 
       24 
24 
     | 
    
         
             
                      method_name = test_bot_method_name('devise_test', options[:current_test])
         
     | 
| 
       25 
25 
     | 
    
         | 
| 
       26 
     | 
    
         
            -
                      define_method(method_name) { devise_action_test(test: test, options 
     | 
| 
      
 26 
     | 
    
         
            +
                      define_method(method_name) { devise_action_test(test: test, **options) }
         
     | 
| 
       27 
27 
     | 
    
         
             
                    end
         
     | 
| 
       28 
28 
     | 
    
         
             
                  end
         
     | 
| 
       29 
29 
     | 
    
         | 
| 
         @@ -22,7 +22,7 @@ module TestBotable 
     | 
|
| 
       22 
22 
     | 
    
         | 
| 
       23 
23 
     | 
    
         
             
                    method_name = test_bot_method_name('member_test', options[:current_test])
         
     | 
| 
       24 
24 
     | 
    
         | 
| 
       25 
     | 
    
         
            -
                    define_method(method_name) { member_action_test(controller: controller, action: action, user: user, member: member, options 
     | 
| 
      
 25 
     | 
    
         
            +
                    define_method(method_name) { member_action_test(controller: controller, action: action, user: user, member: member, **options) }
         
     | 
| 
       26 
26 
     | 
    
         
             
                  end
         
     | 
| 
       27 
27 
     | 
    
         | 
| 
       28 
28 
     | 
    
         
             
                end
         
     | 
| 
         @@ -21,7 +21,7 @@ module TestBotable 
     | 
|
| 
       21 
21 
     | 
    
         | 
| 
       22 
22 
     | 
    
         
             
                    method_name = test_bot_method_name('page_test', options[:current_test])
         
     | 
| 
       23 
23 
     | 
    
         | 
| 
       24 
     | 
    
         
            -
                    define_method(method_name) { page_action_test(path: path, user: user, options 
     | 
| 
      
 24 
     | 
    
         
            +
                    define_method(method_name) { page_action_test(path: path, user: user, **options) }
         
     | 
| 
       25 
25 
     | 
    
         
             
                  end
         
     | 
| 
       26 
26 
     | 
    
         | 
| 
       27 
27 
     | 
    
         
             
                end
         
     | 
| 
         @@ -20,7 +20,7 @@ module TestBotable 
     | 
|
| 
       20 
20 
     | 
    
         | 
| 
       21 
21 
     | 
    
         
             
                    method_name = test_bot_method_name('redirect_test', options[:current_test])
         
     | 
| 
       22 
22 
     | 
    
         | 
| 
       23 
     | 
    
         
            -
                    define_method(method_name) { redirect_action_test(from: from, to: to, user: user, options 
     | 
| 
      
 23 
     | 
    
         
            +
                    define_method(method_name) { redirect_action_test(from: from, to: to, user: user, **options) }
         
     | 
| 
       24 
24 
     | 
    
         
             
                  end
         
     | 
| 
       25 
25 
     | 
    
         
             
                end
         
     | 
| 
       26 
26 
     | 
    
         | 
| 
         @@ -31,7 +31,7 @@ module TestBotable 
     | 
|
| 
       31 
31 
     | 
    
         | 
| 
       32 
32 
     | 
    
         
             
                    method_name = test_bot_method_name('wizard_test', options[:current_test])
         
     | 
| 
       33 
33 
     | 
    
         | 
| 
       34 
     | 
    
         
            -
                    define_method(method_name) { wizard_action_test(from: from, to: to, user: user, options 
     | 
| 
      
 34 
     | 
    
         
            +
                    define_method(method_name) { wizard_action_test(from: from, to: to, user: user, **options) }
         
     | 
| 
       35 
35 
     | 
    
         
             
                  end
         
     | 
| 
       36 
36 
     | 
    
         | 
| 
       37 
37 
     | 
    
         
             
                end
         
     | 
| 
         Binary file 
     | 
| 
         Binary file 
     | 
| 
         @@ -30,11 +30,11 @@ module EffectiveTestBotAssertions 
     | 
|
| 
       30 
30 
     | 
    
         
             
              end
         
     | 
| 
       31 
31 
     | 
    
         | 
| 
       32 
32 
     | 
    
         
             
              def assert_jquery_present(message = "Expected jquery ($.fn.jquery) to be present")
         
     | 
| 
       33 
     | 
    
         
            -
                assert((page.evaluate_script('$.fn.jquery') rescue  
     | 
| 
      
 33 
     | 
    
         
            +
                assert((page.evaluate_script('$.fn.jquery') rescue nil).to_s.length > 0, message)
         
     | 
| 
       34 
34 
     | 
    
         
             
              end
         
     | 
| 
       35 
35 
     | 
    
         | 
| 
       36 
36 
     | 
    
         
             
              def assert_jquery_ujs_present(message = "Expected rails' jquery_ujs ($.rails) to be present")
         
     | 
| 
       37 
     | 
    
         
            -
                assert((page.evaluate_script('$.rails') rescue  
     | 
| 
      
 37 
     | 
    
         
            +
                assert((page.evaluate_script('$.rails') rescue nil).to_s.length > 0, message)
         
     | 
| 
       38 
38 
     | 
    
         
             
              end
         
     | 
| 
       39 
39 
     | 
    
         | 
| 
       40 
40 
     | 
    
         
             
              def assert_page_title(title = :any, message = '(page_title) Expected page title to be present')
         
     | 
| 
         @@ -50,8 +50,8 @@ module EffectiveTestBotAssertions 
     | 
|
| 
       50 
50 
     | 
    
         
             
                assert all(selector).present?, message.sub(':selector:', selector)
         
     | 
| 
       51 
51 
     | 
    
         
             
              end
         
     | 
| 
       52 
52 
     | 
    
         | 
| 
       53 
     | 
    
         
            -
              def assert_submit_input(message = "(submit_input) Expected one or more visible input[type='submit'] to be present")
         
     | 
| 
       54 
     | 
    
         
            -
                assert all( 
     | 
| 
      
 53 
     | 
    
         
            +
              def assert_submit_input(message = "(submit_input) Expected one or more visible input[type='submit'] or button[type='submit'] to be present")
         
     | 
| 
      
 54 
     | 
    
         
            +
                assert all("input[type='submit'],button[type='submit']").present?, message
         
     | 
| 
       55 
55 
     | 
    
         
             
              end
         
     | 
| 
       56 
56 
     | 
    
         | 
| 
       57 
57 
     | 
    
         
             
              def assert_page_status(status = 200, message = '(page_status) Expected :status: HTTP status code')
         
     | 
| 
         @@ -73,6 +73,11 @@ module EffectiveTestBotAssertions 
     | 
|
| 
       73 
73 
     | 
    
         
             
                end
         
     | 
| 
       74 
74 
     | 
    
         
             
              end
         
     | 
| 
       75 
75 
     | 
    
         | 
| 
      
 76 
     | 
    
         
            +
              def assert_no_ajax_requests(message = "(no_ajax_requests) :count: Unexpected AJAX requests present")
         
     | 
| 
      
 77 
     | 
    
         
            +
                active = page.evaluate_script('jQuery.active')
         
     | 
| 
      
 78 
     | 
    
         
            +
                assert (active.blank? || active.zero?), message.sub(':count:', active.to_s)
         
     | 
| 
      
 79 
     | 
    
         
            +
              end
         
     | 
| 
      
 80 
     | 
    
         
            +
             
     | 
| 
       76 
81 
     | 
    
         
             
              def assert_no_js_errors(message = nil)
         
     | 
| 
       77 
82 
     | 
    
         
             
                errors = page.driver.error_messages
         
     | 
| 
       78 
83 
     | 
    
         
             
                assert errors.blank?, message || "(no_js_errors) Unexpected javascript error:\n#{errors.first.to_s}"
         
     | 
| 
         @@ -1,4 +1,5 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            require 'timeout'
         
     | 
| 
      
 2 
     | 
    
         
            +
            require 'faker'
         
     | 
| 
       2 
3 
     | 
    
         | 
| 
       3 
4 
     | 
    
         
             
            module EffectiveTestBotFormFiller
         
     | 
| 
       4 
5 
     | 
    
         
             
              DIGITS = ('1'..'9').to_a
         
     | 
| 
         @@ -53,7 +54,7 @@ module EffectiveTestBotFormFiller 
     | 
|
| 
       53 
54 
     | 
    
         
             
                save_test_bot_screenshot
         
     | 
| 
       54 
55 
     | 
    
         | 
| 
       55 
56 
     | 
    
         
             
                # Support for the cocoon gem
         
     | 
| 
       56 
     | 
    
         
            -
                all('a.add_fields[data-association-insertion-template]').each do |field|
         
     | 
| 
      
 57 
     | 
    
         
            +
                all('a.add_fields[data-association-insertion-template],a.has_many_add').each do |field|
         
     | 
| 
       57 
58 
     | 
    
         
             
                  next if skip_form_field?(field)
         
     | 
| 
       58 
59 
     | 
    
         | 
| 
       59 
60 
     | 
    
         
             
                  if EffectiveTestBot.tour_mode_extreme?
         
     | 
| 
         @@ -69,11 +70,11 @@ module EffectiveTestBotFormFiller 
     | 
|
| 
       69 
70 
     | 
    
         
             
                  skip_field_screenshot = false
         
     | 
| 
       70 
71 
     | 
    
         | 
| 
       71 
72 
     | 
    
         
             
                  case [field.tag_name, field['type']].compact.join('_')
         
     | 
| 
       72 
     | 
    
         
            -
                  when 'input_text', 'input_email', 'input_password', 'input_tel', 'input_number', 'input_checkbox', 'input_radio'
         
     | 
| 
      
 73 
     | 
    
         
            +
                  when 'input_text', 'input_email', 'input_password', 'input_tel', 'input_number', 'input_checkbox', 'input_radio', 'input_url'
         
     | 
| 
       73 
74 
     | 
    
         
             
                    field.set(value_for_field(field, fills))
         
     | 
| 
       74 
75 
     | 
    
         
             
                  when 'textarea'
         
     | 
| 
       75 
76 
     | 
    
         
             
                    value = value_for_field(field, fills)
         
     | 
| 
       76 
     | 
    
         
            -
                     
     | 
| 
      
 77 
     | 
    
         
            +
                    ckeditor_text_area?(field) ? fill_ckeditor_text_area(field, value) : field.set(value)
         
     | 
| 
       77 
78 
     | 
    
         
             
                  when 'select'
         
     | 
| 
       78 
79 
     | 
    
         
             
                    if EffectiveTestBot.tour_mode_extreme? && field['class'].to_s.include?('select2') # select2
         
     | 
| 
       79 
80 
     | 
    
         
             
                      page.execute_script("try { $('select##{field['id']}').select2('open'); } catch(e) {};")
         
     | 
| 
         @@ -91,7 +92,7 @@ module EffectiveTestBotFormFiller 
     | 
|
| 
       91 
92 
     | 
    
         
             
                    else
         
     | 
| 
       92 
93 
     | 
    
         
             
                      field.set(value_for_field(field, fills))
         
     | 
| 
       93 
94 
     | 
    
         
             
                    end
         
     | 
| 
       94 
     | 
    
         
            -
                  when 'input_submit', 'input_search'
         
     | 
| 
      
 95 
     | 
    
         
            +
                  when 'input_submit', 'input_search', 'input_button'
         
     | 
| 
       95 
96 
     | 
    
         
             
                    skip_field_screenshot = true
         
     | 
| 
       96 
97 
     | 
    
         
             
                    # Do nothing
         
     | 
| 
       97 
98 
     | 
    
         
             
                  else
         
     | 
| 
         @@ -107,6 +108,7 @@ module EffectiveTestBotFormFiller 
     | 
|
| 
       107 
108 
     | 
    
         
             
                @filled_numeric_fields = nil
         
     | 
| 
       108 
109 
     | 
    
         
             
                @filled_password_fields = nil
         
     | 
| 
       109 
110 
     | 
    
         
             
                @filled_radio_fields = nil
         
     | 
| 
      
 111 
     | 
    
         
            +
                @filled_country_fields = nil
         
     | 
| 
       110 
112 
     | 
    
         | 
| 
       111 
113 
     | 
    
         
             
                save_test_bot_screenshot
         
     | 
| 
       112 
114 
     | 
    
         
             
              end
         
     | 
| 
         @@ -121,7 +123,7 @@ module EffectiveTestBotFormFiller 
     | 
|
| 
       121 
123 
     | 
    
         
             
                attributes = field['name'].to_s.gsub(']', '').split('[') # user[something_attributes][last_name] => ['user', 'something_attributes', 'last_name']
         
     | 
| 
       122 
124 
     | 
    
         
             
                attribute = attributes.last.to_s
         
     | 
| 
       123 
125 
     | 
    
         | 
| 
       124 
     | 
    
         
            -
                fill_value = fill_value_for_field(fills, attributes)
         
     | 
| 
      
 126 
     | 
    
         
            +
                fill_value = fill_value_for_field(fills, attributes, field['value'])
         
     | 
| 
       125 
127 
     | 
    
         | 
| 
       126 
128 
     | 
    
         
             
                # If there is a predefined fill value for this field return it now
         
     | 
| 
       127 
129 
     | 
    
         
             
                # except for select, checkbox and radio fields which we want to match by value or label
         
     | 
| 
         @@ -136,12 +138,16 @@ module EffectiveTestBotFormFiller 
     | 
|
| 
       136 
138 
     | 
    
         
             
                  if classes.include?('date') # Let's assume this is a date input.
         
     | 
| 
       137 
139 
     | 
    
         
             
                    if attribute.include?('end') # Make sure end dates are after start dates
         
     | 
| 
       138 
140 
     | 
    
         
             
                      Faker::Date.forward(365).strftime('%Y-%m-%d')
         
     | 
| 
      
 141 
     | 
    
         
            +
                    elsif attribute.include?('closing')
         
     | 
| 
      
 142 
     | 
    
         
            +
                      Faker::Date.forward(30).strftime('%Y-%m-%d')
         
     | 
| 
       139 
143 
     | 
    
         
             
                    else
         
     | 
| 
       140 
144 
     | 
    
         
             
                      Faker::Date.backward(365).strftime('%Y-%m-%d')
         
     | 
| 
       141 
145 
     | 
    
         
             
                    end
         
     | 
| 
       142 
146 
     | 
    
         
             
                  elsif classes.include?('datetime')
         
     | 
| 
       143 
147 
     | 
    
         
             
                    if attribute.include?('end')
         
     | 
| 
       144 
148 
     | 
    
         
             
                      Faker::Date.forward(365).strftime('%Y-%m-%d %H:%m')
         
     | 
| 
      
 149 
     | 
    
         
            +
                    elsif attribute.include?('closing')
         
     | 
| 
      
 150 
     | 
    
         
            +
                      Faker::Date.forward(30).strftime('%Y-%m-%d %H:%m')
         
     | 
| 
       145 
151 
     | 
    
         
             
                    else
         
     | 
| 
       146 
152 
     | 
    
         
             
                      Faker::Date.backward(365).strftime('%Y-%m-%d %H:%m')
         
     | 
| 
       147 
153 
     | 
    
         
             
                    end
         
     | 
| 
         @@ -170,6 +176,12 @@ module EffectiveTestBotFormFiller 
     | 
|
| 
       170 
176 
     | 
    
         
             
                    Faker::Address.street_address
         
     | 
| 
       171 
177 
     | 
    
         
             
                  elsif attribute.include?('name')
         
     | 
| 
       172 
178 
     | 
    
         
             
                    Faker::Name.name
         
     | 
| 
      
 179 
     | 
    
         
            +
                  elsif attribute.include?('postal_code')
         
     | 
| 
      
 180 
     | 
    
         
            +
                    if @filled_country_fields == 'US'
         
     | 
| 
      
 181 
     | 
    
         
            +
                      DIGITS.sample + DIGITS.sample + DIGITS.sample + DIGITS.sample + DIGITS.sample
         
     | 
| 
      
 182 
     | 
    
         
            +
                    else
         
     | 
| 
      
 183 
     | 
    
         
            +
                      LETTERS.sample + DIGITS.sample + LETTERS.sample + ' ' + DIGITS.sample + LETTERS.sample + DIGITS.sample
         
     | 
| 
      
 184 
     | 
    
         
            +
                    end
         
     | 
| 
       173 
185 
     | 
    
         
             
                  elsif attribute.include?('postal') # Make a Canadian postal code
         
     | 
| 
       174 
186 
     | 
    
         
             
                    LETTERS.sample + DIGITS.sample + LETTERS.sample + ' ' + DIGITS.sample + LETTERS.sample + DIGITS.sample
         
     | 
| 
       175 
187 
     | 
    
         
             
                  elsif attribute.include?('zip') && attribute.include?('code') # Make a US zip code
         
     | 
| 
         @@ -187,8 +199,11 @@ module EffectiveTestBotFormFiller 
     | 
|
| 
       187 
199 
     | 
    
         
             
                  Faker::Internet.email
         
     | 
| 
       188 
200 
     | 
    
         | 
| 
       189 
201 
     | 
    
         
             
                when 'input_file'
         
     | 
| 
       190 
     | 
    
         
            -
                   
     | 
| 
       191 
     | 
    
         
            -
             
     | 
| 
      
 202 
     | 
    
         
            +
                  if field['class'].to_s.include?('asset-box-uploader-fileinput')
         
     | 
| 
      
 203 
     | 
    
         
            +
                    "#{File.dirname(__FILE__)}/../fixtures/documents._test"
         
     | 
| 
      
 204 
     | 
    
         
            +
                  else
         
     | 
| 
      
 205 
     | 
    
         
            +
                    "#{File.dirname(__FILE__)}/../fixtures/logo.png"
         
     | 
| 
      
 206 
     | 
    
         
            +
                  end
         
     | 
| 
       192 
207 
     | 
    
         
             
                when 'input_number'
         
     | 
| 
       193 
208 
     | 
    
         
             
                  value_for_input_numeric_field(field, "input[type='number'][name$='[#{attribute}]']")
         
     | 
| 
       194 
209 
     | 
    
         | 
| 
         @@ -202,16 +217,25 @@ module EffectiveTestBotFormFiller 
     | 
|
| 
       202 
217 
     | 
    
         
             
                when 'select'
         
     | 
| 
       203 
218 
     | 
    
         
             
                  if fill_value.present? # accept a value or text
         
     | 
| 
       204 
219 
     | 
    
         
             
                    field.all('option:enabled').each do |option|
         
     | 
| 
       205 
     | 
    
         
            -
                       
     | 
| 
      
 220 
     | 
    
         
            +
                      if (option.text == fill_value || option.value.to_s == fill_value)
         
     | 
| 
      
 221 
     | 
    
         
            +
                        @filled_country_fields = option.value if attribute == 'country_code'
         
     | 
| 
      
 222 
     | 
    
         
            +
                        return option.text
         
     | 
| 
      
 223 
     | 
    
         
            +
                      end
         
     | 
| 
       206 
224 
     | 
    
         
             
                    end
         
     | 
| 
       207 
225 
     | 
    
         
             
                  end
         
     | 
| 
       208 
226 
     | 
    
         | 
| 
       209 
     | 
    
         
            -
                  field.all('option:enabled').select { |option| option.value.present? }.sample 
     | 
| 
      
 227 
     | 
    
         
            +
                  option = field.all('option:enabled').select { |option| option.value.present? }.sample
         
     | 
| 
       210 
228 
     | 
    
         | 
| 
      
 229 
     | 
    
         
            +
                  @filled_country_fields = option.try(:value) if attribute == 'country_code' # So Postal Code can be set to a valid one
         
     | 
| 
      
 230 
     | 
    
         
            +
             
     | 
| 
      
 231 
     | 
    
         
            +
                  option.try(:text) || ''
         
     | 
| 
       211 
232 
     | 
    
         
             
                when 'input_tel'
         
     | 
| 
       212 
233 
     | 
    
         
             
                  d = 10.times.map { DIGITS.sample }
         
     | 
| 
       213 
234 
     | 
    
         
             
                  d[0] + d[1] + d[2] + '-' + d[3] + d[4] + d[5] + '-' + d[6] + d[7] + d[8] + d[9]
         
     | 
| 
       214 
235 
     | 
    
         | 
| 
      
 236 
     | 
    
         
            +
                when 'input_url'
         
     | 
| 
      
 237 
     | 
    
         
            +
                  Faker::Internet.url
         
     | 
| 
      
 238 
     | 
    
         
            +
             
     | 
| 
       215 
239 
     | 
    
         
             
                when 'textarea'
         
     | 
| 
       216 
240 
     | 
    
         
             
                  Faker::Lorem.paragraph
         
     | 
| 
       217 
241 
     | 
    
         | 
| 
         @@ -221,24 +245,19 @@ module EffectiveTestBotFormFiller 
     | 
|
| 
       221 
245 
     | 
    
         
             
              end
         
     | 
| 
       222 
246 
     | 
    
         | 
| 
       223 
247 
     | 
    
         
             
              def value_for_input_checkbox_field(field, fill_value)
         
     | 
| 
       224 
     | 
    
         
            -
                if  
     | 
| 
      
 248 
     | 
    
         
            +
                if ::ActiveRecord::ConnectionAdapters::Column::TRUE_VALUES.include?(fill_value)
         
     | 
| 
      
 249 
     | 
    
         
            +
                  true
         
     | 
| 
      
 250 
     | 
    
         
            +
                elsif ::ActiveRecord::ConnectionAdapters::Column::FALSE_VALUES.include?(fill_value)
         
     | 
| 
      
 251 
     | 
    
         
            +
                  false
         
     | 
| 
      
 252 
     | 
    
         
            +
                elsif fill_value.present?
         
     | 
| 
       225 
253 
     | 
    
         
             
                  fill_values = Array(fill_value)  # Allow an array of fill values to be passed
         
     | 
| 
       226 
     | 
    
         
            -
             
     | 
| 
       227 
     | 
    
         
            -
                  if ::ActiveRecord::ConnectionAdapters::Column::TRUE_VALUES.include?(fill_value)
         
     | 
| 
       228 
     | 
    
         
            -
                    fill_values = ::ActiveRecord::ConnectionAdapters::Column::TRUE_VALUES.to_a
         
     | 
| 
       229 
     | 
    
         
            -
                  end
         
     | 
| 
       230 
     | 
    
         
            -
             
     | 
| 
       231 
     | 
    
         
            -
                  if ::ActiveRecord::ConnectionAdapters::Column::FALSE_VALUES.include?(fill_value)
         
     | 
| 
       232 
     | 
    
         
            -
                    fill_values = ::ActiveRecord::ConnectionAdapters::Column::FALSE_VALUES.to_a
         
     | 
| 
       233 
     | 
    
         
            -
                  end
         
     | 
| 
       234 
     | 
    
         
            -
             
     | 
| 
       235 
254 
     | 
    
         
             
                  (fill_values.include?(field['value']) || fill_values.include?(field.find(:xpath, '..').text))
         
     | 
| 
      
 255 
     | 
    
         
            +
                elsif field['required'].present?
         
     | 
| 
      
 256 
     | 
    
         
            +
                  true
         
     | 
| 
       236 
257 
     | 
    
         
             
                elsif field['value'] == 'true'
         
     | 
| 
       237 
258 
     | 
    
         
             
                  true
         
     | 
| 
       238 
259 
     | 
    
         
             
                elsif field['value'] == 'false'
         
     | 
| 
       239 
260 
     | 
    
         
             
                  false
         
     | 
| 
       240 
     | 
    
         
            -
                elsif field['required'].present?
         
     | 
| 
       241 
     | 
    
         
            -
                  true
         
     | 
| 
       242 
261 
     | 
    
         
             
                else
         
     | 
| 
       243 
262 
     | 
    
         
             
                  [true, false].sample
         
     | 
| 
       244 
263 
     | 
    
         
             
                end
         
     | 
| 
         @@ -337,8 +356,8 @@ module EffectiveTestBotFormFiller 
     | 
|
| 
       337 
356 
     | 
    
         | 
| 
       338 
357 
     | 
    
         
             
              private
         
     | 
| 
       339 
358 
     | 
    
         | 
| 
       340 
     | 
    
         
            -
              def fill_value_for_field(fills, attributes)
         
     | 
| 
       341 
     | 
    
         
            -
                return if fills.blank? || attributes.blank?
         
     | 
| 
      
 359 
     | 
    
         
            +
              def fill_value_for_field(fills, attributes, value)
         
     | 
| 
      
 360 
     | 
    
         
            +
                return if fills.blank? || (attributes.blank? && value.blank?)
         
     | 
| 
       342 
361 
     | 
    
         | 
| 
       343 
362 
     | 
    
         
             
                key = nil
         
     | 
| 
       344 
363 
     | 
    
         
             
                attributes.reverse_each do |name|  # match last_name, then something_attributes.last_name, then user.something_attributes.last_name
         
     | 
| 
         @@ -346,6 +365,8 @@ module EffectiveTestBotFormFiller 
     | 
|
| 
       346 
365 
     | 
    
         
             
                  return fills[key].to_s if fills.key?(key)
         
     | 
| 
       347 
366 
     | 
    
         
             
                end
         
     | 
| 
       348 
367 
     | 
    
         | 
| 
      
 368 
     | 
    
         
            +
                return fills[value] if fills.key?(value)
         
     | 
| 
      
 369 
     | 
    
         
            +
             
     | 
| 
       349 
370 
     | 
    
         
             
                nil
         
     | 
| 
       350 
371 
     | 
    
         
             
              end
         
     | 
| 
       351 
372 
     | 
    
         | 
| 
         @@ -356,12 +377,15 @@ module EffectiveTestBotFormFiller 
     | 
|
| 
       356 
377 
     | 
    
         
             
                @test_bot_excluded_fields_xpath = nil
         
     | 
| 
       357 
378 
     | 
    
         
             
              end
         
     | 
| 
       358 
379 
     | 
    
         | 
| 
      
 380 
     | 
    
         
            +
              def ckeditor_text_area?(field)
         
     | 
| 
      
 381 
     | 
    
         
            +
                return false unless field.tag_name == 'textarea'
         
     | 
| 
      
 382 
     | 
    
         
            +
                (field['class'].to_s.include?('ckeditor') || all("span[id='cke_#{field['id']}']").present?)
         
     | 
| 
      
 383 
     | 
    
         
            +
              end
         
     | 
| 
      
 384 
     | 
    
         
            +
             
     | 
| 
       359 
385 
     | 
    
         
             
              def skip_form_field?(field)
         
     | 
| 
       360 
386 
     | 
    
         
             
                field.reload # Handle a field changing visibility/disabled state from previous form field manipulations
         
     | 
| 
       361 
387 
     | 
    
         | 
| 
       362 
     | 
    
         
            -
                 
     | 
| 
       363 
     | 
    
         
            -
             
     | 
| 
       364 
     | 
    
         
            -
                (field.visible? == false && !ckeditor) ||
         
     | 
| 
      
 388 
     | 
    
         
            +
                (field.visible? == false && !ckeditor_text_area?(field)) ||
         
     | 
| 
       365 
389 
     | 
    
         
             
                field.disabled? ||
         
     | 
| 
       366 
390 
     | 
    
         
             
                ['true', true, 1].include?(field['data-test-bot-skip']) ||
         
     | 
| 
       367 
391 
     | 
    
         
             
                (@test_bot_excluded_fields_xpath.present? && field.path.include?(@test_bot_excluded_fields_xpath))
         
     | 
| 
         @@ -68,8 +68,8 @@ module EffectiveTestBotFormHelper 
     | 
|
| 
       68 
68 
     | 
    
         
             
                  submit = find(:link_or_button, label)
         
     | 
| 
       69 
69 
     | 
    
         
             
                  assert submit.present?, "TestBotError: Unable to find a visible submit link or button on #{page.current_path} with the label #{label}"
         
     | 
| 
       70 
70 
     | 
    
         
             
                else
         
     | 
| 
       71 
     | 
    
         
            -
                  submit = first(:css, "input[type='submit']")
         
     | 
| 
       72 
     | 
    
         
            -
                  assert submit.present?, "TestBotError: Unable to find a visible input[type='submit'] on #{page.current_path}"
         
     | 
| 
      
 71 
     | 
    
         
            +
                  submit = first(:css, "input[type='submit'],button[type='submit']")
         
     | 
| 
      
 72 
     | 
    
         
            +
                  assert submit.present?, "TestBotError: Unable to find a visible input[type='submit'] or button[type='submit'] on #{page.current_path}"
         
     | 
| 
       73 
73 
     | 
    
         
             
                end
         
     | 
| 
       74 
74 
     | 
    
         | 
| 
       75 
75 
     | 
    
         
             
                if EffectiveTestBot.screenshots?
         
     | 
| 
         @@ -15,7 +15,6 @@ module EffectiveTestBotScreenshotsHelper 
     | 
|
| 
       15 
15 
     | 
    
         | 
| 
       16 
16 
     | 
    
         
             
              # This gets called after every test.  Minitest hook for plugin developers
         
     | 
| 
       17 
17 
     | 
    
         
             
              def after_teardown
         
     | 
| 
       18 
     | 
    
         
            -
                super
         
     | 
| 
       19 
18 
     | 
    
         
             
                return unless EffectiveTestBot.screenshots? && (@test_bot_screenshot_id || 0) > 0
         
     | 
| 
       20 
19 
     | 
    
         | 
| 
       21 
20 
     | 
    
         
             
                if !passed? && EffectiveTestBot.autosave_animated_gif_on_failure?
         
     | 
| 
         @@ -2,6 +2,23 @@ module EffectiveTestBotTestHelper 
     | 
|
| 
       2 
2 
     | 
    
         
             
              # This makes sure capybara is done, and breaks out of any 'within' blocks
         
     | 
| 
       3 
3 
     | 
    
         
             
              def synchronize!
         
     | 
| 
       4 
4 
     | 
    
         
             
                page.document.find('html')
         
     | 
| 
      
 5 
     | 
    
         
            +
                wait_for_ajax
         
     | 
| 
      
 6 
     | 
    
         
            +
              end
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
              # https://gist.github.com/josevalim/470808#gistcomment-1268491
         
     | 
| 
      
 9 
     | 
    
         
            +
              def wait_for_ajax
         
     | 
| 
      
 10 
     | 
    
         
            +
                begin
         
     | 
| 
      
 11 
     | 
    
         
            +
                  Timeout.timeout(Capybara.default_max_wait_time) do
         
     | 
| 
      
 12 
     | 
    
         
            +
                    loop until finished_all_ajax_requests?
         
     | 
| 
      
 13 
     | 
    
         
            +
                  end
         
     | 
| 
      
 14 
     | 
    
         
            +
                rescue => e
         
     | 
| 
      
 15 
     | 
    
         
            +
                  assert_no_ajax_requests
         
     | 
| 
      
 16 
     | 
    
         
            +
                end
         
     | 
| 
      
 17 
     | 
    
         
            +
              end
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
              def finished_all_ajax_requests?
         
     | 
| 
      
 20 
     | 
    
         
            +
                ajax_request_count = page.evaluate_script('jQuery.active')
         
     | 
| 
      
 21 
     | 
    
         
            +
                ajax_request_count.blank? || ajax_request_count.zero?
         
     | 
| 
       5 
22 
     | 
    
         
             
              end
         
     | 
| 
       6 
23 
     | 
    
         | 
| 
       7 
24 
     | 
    
         
             
              # Because capybara-webkit can't make delete requests, we need to use rack_test
         
     | 
| 
         @@ -36,13 +36,20 @@ module BaseTest 
     | 
|
| 
       36 
36 
     | 
    
         
             
                obj = resource_class.last
         
     | 
| 
       37 
37 
     | 
    
         
             
                return obj if obj.present? && !obj.kind_of?(User)
         
     | 
| 
       38 
38 
     | 
    
         | 
| 
       39 
     | 
    
         
            -
                hint = "Unable to find_or_create_resource!\nEither fixture/seed an instance of #{resource_class} or ensure that submitting form#new_#{resource_name} on #{(new_resource_path rescue nil) || 'the resource new page'} creates a new #{resource_name}"
         
     | 
| 
       40 
     | 
    
         
            -
             
     | 
| 
       41 
39 
     | 
    
         
             
                # It doesn't exist, so lets go to the new page and submit a form to build one
         
     | 
| 
       42 
40 
     | 
    
         
             
                without_screenshots do
         
     | 
| 
       43 
     | 
    
         
            -
                   
     | 
| 
      
 41 
     | 
    
         
            +
                  new_resource_paths = [  # TODO: enumerate all controller namespaces instead of just admin
         
     | 
| 
      
 42 
     | 
    
         
            +
                    (new_resource_path rescue nil),
         
     | 
| 
      
 43 
     | 
    
         
            +
                    (new_polymorphic_path(resource) rescue nil),
         
     | 
| 
      
 44 
     | 
    
         
            +
                    (new_polymorphic_path([:admin, resource]) rescue nil),
         
     | 
| 
      
 45 
     | 
    
         
            +
                    (new_polymorphic_path([:members, resource]) rescue nil)
         
     | 
| 
      
 46 
     | 
    
         
            +
                  ].compact
         
     | 
| 
      
 47 
     | 
    
         
            +
             
     | 
| 
      
 48 
     | 
    
         
            +
                  hint = "Unable to find_or_create_resource!\nEither fixture/seed an instance of #{resource_class} or ensure that submitting form#new_#{resource_name} on #{(new_resource_paths.first rescue nil) || 'the resource new page'} creates a new #{resource_name}"
         
     | 
| 
      
 49 
     | 
    
         
            +
             
     | 
| 
      
 50 
     | 
    
         
            +
                  assert(new_resource_paths.present?, "TestBotError: Generated polymorphic route new_#{[*controller_namespace, resource_name].compact.join('_')}_path is undefined. #{hint}")
         
     | 
| 
       44 
51 
     | 
    
         | 
| 
       45 
     | 
    
         
            -
                  visit( 
     | 
| 
      
 52 
     | 
    
         
            +
                  visit(new_resource_paths.first)
         
     | 
| 
       46 
53 
     | 
    
         | 
| 
       47 
54 
     | 
    
         
             
                  assert_form("form#new_#{resource_name}", "TestBotError: Failed to find form#new_#{resource_name}. #{hint}") unless test_bot_skip?(:form)
         
     | 
| 
       48 
55 
     | 
    
         | 
| 
         @@ -52,10 +59,10 @@ module BaseTest 
     | 
|
| 
       52 
59 
     | 
    
         
             
                    assert_submit_input "TestBotError: Failed to find a visible input[type='submit'] on #{page.current_path}. #{hint}"
         
     | 
| 
       53 
60 
     | 
    
         
             
                    submit_novalidate_form
         
     | 
| 
       54 
61 
     | 
    
         
             
                  end
         
     | 
| 
       55 
     | 
    
         
            -
                end
         
     | 
| 
       56 
62 
     | 
    
         | 
| 
       57 
     | 
    
         
            -
             
     | 
| 
       58 
     | 
    
         
            -
             
     | 
| 
      
 63 
     | 
    
         
            +
                  obj = resource_class.last
         
     | 
| 
      
 64 
     | 
    
         
            +
                  assert obj.present?, "TestBotError: Failed to create a resource after submitting form. Errors: #{(assigns[resource_name] || {})['errors']}\n#{hint}."
         
     | 
| 
      
 65 
     | 
    
         
            +
                end
         
     | 
| 
       59 
66 
     | 
    
         | 
| 
       60 
67 
     | 
    
         
             
                obj
         
     | 
| 
       61 
68 
     | 
    
         
             
              end
         
     | 
| 
         @@ -118,9 +118,9 @@ module CrudTest 
     | 
|
| 
       118 
118 
     | 
    
         | 
| 
       119 
119 
     | 
    
         
             
                assert_page_normal
         
     | 
| 
       120 
120 
     | 
    
         
             
                assert_assigns(resource_name) # unskippable
         
     | 
| 
       121 
     | 
    
         
            -
                assert_form("form 
     | 
| 
      
 121 
     | 
    
         
            +
                assert_form("form[id^='edit_#{resource_name}']") unless test_bot_skip?(:form)
         
     | 
| 
       122 
122 
     | 
    
         | 
| 
       123 
     | 
    
         
            -
                within_if("form 
     | 
| 
      
 123 
     | 
    
         
            +
                within_if("form[id^='edit_#{resource_name}']", !test_bot_skip?(:form)) do
         
     | 
| 
       124 
124 
     | 
    
         
             
                  assert_submit_input unless test_bot_skip?(:submit_input)
         
     | 
| 
       125 
125 
     | 
    
         
             
                  assert_jquery_ujs_disable_with unless test_bot_skip?(:jquery_ujs_disable_with)
         
     | 
| 
       126 
126 
     | 
    
         
             
                end
         
     | 
| 
         @@ -134,9 +134,7 @@ module CrudTest 
     | 
|
| 
       134 
134 
     | 
    
         | 
| 
       135 
135 
     | 
    
         
             
                before = { count: resource_class.count, updated_at: (resource.updated_at rescue nil) }
         
     | 
| 
       136 
136 
     | 
    
         | 
| 
       137 
     | 
    
         
            -
                 
     | 
| 
       138 
     | 
    
         
            -
             
     | 
| 
       139 
     | 
    
         
            -
                within_if("form#edit_#{resource_name}_#{resource.id}", !test_bot_skip?(:form)) do
         
     | 
| 
      
 137 
     | 
    
         
            +
                within_if("form[id^='edit_#{resource_name}']", !test_bot_skip?(:form)) do
         
     | 
| 
       140 
138 
     | 
    
         
             
                  clear_form
         
     | 
| 
       141 
139 
     | 
    
         
             
                  submit_novalidate_form
         
     | 
| 
       142 
140 
     | 
    
         
             
                end
         
     | 
| 
         @@ -169,9 +167,7 @@ module CrudTest 
     | 
|
| 
       169 
167 
     | 
    
         | 
| 
       170 
168 
     | 
    
         
             
                before = { count: resource_class.count, updated_at: (resource.updated_at rescue nil) }
         
     | 
| 
       171 
169 
     | 
    
         | 
| 
       172 
     | 
    
         
            -
                 
     | 
| 
       173 
     | 
    
         
            -
             
     | 
| 
       174 
     | 
    
         
            -
                within_if("form#edit_#{resource_name}_#{resource.id}", !test_bot_skip?(:form)) do
         
     | 
| 
      
 170 
     | 
    
         
            +
                within_if("form[id^='edit_#{resource_name}']", !test_bot_skip?(:form)) do
         
     | 
| 
       175 
171 
     | 
    
         
             
                  fill_form(resource_attributes)
         
     | 
| 
       176 
172 
     | 
    
         
             
                  submit_form
         
     | 
| 
       177 
173 
     | 
    
         
             
                end
         
     | 
    
        metadata
    CHANGED
    
    | 
         @@ -1,14 +1,14 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            --- !ruby/object:Gem::Specification
         
     | 
| 
       2 
2 
     | 
    
         
             
            name: effective_test_bot
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version
         
     | 
| 
       4 
     | 
    
         
            -
              version: 0.5. 
     | 
| 
      
 4 
     | 
    
         
            +
              version: 0.5.3
         
     | 
| 
       5 
5 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       6 
6 
     | 
    
         
             
            authors:
         
     | 
| 
       7 
7 
     | 
    
         
             
            - Code and Effect
         
     | 
| 
       8 
8 
     | 
    
         
             
            autorequire: 
         
     | 
| 
       9 
9 
     | 
    
         
             
            bindir: bin
         
     | 
| 
       10 
10 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       11 
     | 
    
         
            -
            date: 2016- 
     | 
| 
      
 11 
     | 
    
         
            +
            date: 2016-05-03 00:00:00.000000000 Z
         
     | 
| 
       12 
12 
     | 
    
         
             
            dependencies:
         
     | 
| 
       13 
13 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       14 
14 
     | 
    
         
             
              name: rails
         
     | 
| 
         @@ -66,6 +66,20 @@ dependencies: 
     | 
|
| 
       66 
66 
     | 
    
         
             
                - - ">="
         
     | 
| 
       67 
67 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       68 
68 
     | 
    
         
             
                    version: '0'
         
     | 
| 
      
 69 
     | 
    
         
            +
            - !ruby/object:Gem::Dependency
         
     | 
| 
      
 70 
     | 
    
         
            +
              name: minitest-fail-fast
         
     | 
| 
      
 71 
     | 
    
         
            +
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
      
 72 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 73 
     | 
    
         
            +
                - - ">="
         
     | 
| 
      
 74 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 75 
     | 
    
         
            +
                    version: '0'
         
     | 
| 
      
 76 
     | 
    
         
            +
              type: :runtime
         
     | 
| 
      
 77 
     | 
    
         
            +
              prerelease: false
         
     | 
| 
      
 78 
     | 
    
         
            +
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
      
 79 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 80 
     | 
    
         
            +
                - - ">="
         
     | 
| 
      
 81 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 82 
     | 
    
         
            +
                    version: '0'
         
     | 
| 
       69 
83 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       70 
84 
     | 
    
         
             
              name: minitest-rails-capybara
         
     | 
| 
       71 
85 
     | 
    
         
             
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
         @@ -233,13 +247,14 @@ files: 
     | 
|
| 
       233 
247 
     | 
    
         
             
            - test/concerns/test_botable/page_dsl.rb
         
     | 
| 
       234 
248 
     | 
    
         
             
            - test/concerns/test_botable/redirect_dsl.rb
         
     | 
| 
       235 
249 
     | 
    
         
             
            - test/concerns/test_botable/wizard_dsl.rb
         
     | 
| 
      
 250 
     | 
    
         
            +
            - test/fixtures/documents._test
         
     | 
| 
      
 251 
     | 
    
         
            +
            - test/fixtures/logo.png
         
     | 
| 
       236 
252 
     | 
    
         
             
            - test/support/effective_test_bot_assertions.rb
         
     | 
| 
       237 
253 
     | 
    
         
             
            - test/support/effective_test_bot_form_filler.rb
         
     | 
| 
       238 
254 
     | 
    
         
             
            - test/support/effective_test_bot_form_helper.rb
         
     | 
| 
       239 
255 
     | 
    
         
             
            - test/support/effective_test_bot_login_helper.rb
         
     | 
| 
       240 
256 
     | 
    
         
             
            - test/support/effective_test_bot_screenshots_helper.rb
         
     | 
| 
       241 
257 
     | 
    
         
             
            - test/support/effective_test_bot_test_helper.rb
         
     | 
| 
       242 
     | 
    
         
            -
            - test/support/important_documents._test
         
     | 
| 
       243 
258 
     | 
    
         
             
            - test/test_bot/integration/application_test.rb
         
     | 
| 
       244 
259 
     | 
    
         
             
            - test/test_bot/integration/environment_test.rb
         
     | 
| 
       245 
260 
     | 
    
         
             
            - test/test_botable/base_test.rb
         
     | 
| 
         @@ -1 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            This is a file that the EffectiveAssets file uploader will accept regardless of any :file_types passed
         
     |