2016-03-07 19:52:19 -05:00
# frozen_string_literal: true
2018-02-28 19:11:41 -05:00
2018-07-10 17:18:39 -04:00
Capybara :: SpecHelper . spec '#uncheck' do
2012-07-21 16:44:10 -04:00
before do
@session . visit ( '/form' )
end
2009-12-15 14:58:51 -05:00
2018-07-10 17:18:39 -04:00
it 'should uncheck a checkbox by id' do
@session . uncheck ( 'form_pets_hamster' )
2012-07-21 16:44:10 -04:00
@session . click_button ( 'awesome' )
2013-11-14 12:43:36 -05:00
expect ( extract_results ( @session ) [ 'pets' ] ) . to include ( 'dog' )
expect ( extract_results ( @session ) [ 'pets' ] ) . not_to include ( 'hamster' )
2012-07-21 16:44:10 -04:00
end
2009-12-15 14:58:51 -05:00
2018-07-10 17:18:39 -04:00
it 'should uncheck a checkbox by label' do
@session . uncheck ( 'Hamster' )
2012-07-21 16:44:10 -04:00
@session . click_button ( 'awesome' )
2013-11-14 12:43:36 -05:00
expect ( extract_results ( @session ) [ 'pets' ] ) . to include ( 'dog' )
expect ( extract_results ( @session ) [ 'pets' ] ) . not_to include ( 'hamster' )
2009-12-15 14:58:51 -05:00
end
2012-09-06 03:33:43 -04:00
2018-07-10 17:18:39 -04:00
it 'should work without a locator string' do
@session . uncheck ( id : 'form_pets_hamster' )
2018-04-27 12:39:34 -04:00
@session . click_button ( 'awesome' )
expect ( extract_results ( @session ) [ 'pets' ] ) . to include ( 'dog' )
expect ( extract_results ( @session ) [ 'pets' ] ) . not_to include ( 'hamster' )
end
2018-08-31 13:01:40 -04:00
it 'should be able to uncheck itself if no locator specified' do
cb = @session . find ( :id , 'form_pets_hamster' )
cb . uncheck
@session . click_button ( 'awesome' )
expect ( extract_results ( @session ) [ 'pets' ] ) . to include ( 'dog' )
expect ( extract_results ( @session ) [ 'pets' ] ) . not_to include ( 'hamster' )
end
2018-07-10 17:18:39 -04:00
it 'casts to string' do
2018-02-28 19:11:41 -05:00
@session . uncheck ( :form_pets_hamster )
2012-09-06 03:33:43 -04:00
@session . click_button ( 'awesome' )
2013-11-14 12:43:36 -05:00
expect ( extract_results ( @session ) [ 'pets' ] ) . to include ( 'dog' )
expect ( extract_results ( @session ) [ 'pets' ] ) . not_to include ( 'hamster' )
2012-09-06 03:33:43 -04:00
end
2013-02-24 10:48:33 -05:00
2018-07-10 17:18:39 -04:00
context 'with :exact option' do
it 'should accept partial matches when false' do
2016-10-04 14:10:29 -04:00
@session . uncheck ( 'Ham' , exact : false )
2013-02-24 10:48:33 -05:00
@session . click_button ( 'awesome' )
2013-11-14 12:43:36 -05:00
expect ( extract_results ( @session ) [ 'pets' ] ) . not_to include ( 'hamster' )
2013-02-24 10:48:33 -05:00
end
2018-07-10 17:18:39 -04:00
it 'should not accept partial matches when true' do
2013-02-24 10:48:33 -05:00
expect do
2016-10-04 14:10:29 -04:00
@session . uncheck ( 'Ham' , exact : true )
2013-02-24 10:48:33 -05:00
end . to raise_error ( Capybara :: ElementNotFound )
end
end
2016-04-21 17:25:14 -04:00
2018-07-10 17:18:39 -04:00
context 'when checkbox hidden' do
context 'with Capybara.automatic_label_click == true' do
2016-08-01 17:14:10 -04:00
around do | spec |
old_click_label , Capybara . automatic_label_click = Capybara . automatic_label_click , true
spec . run
Capybara . automatic_label_click = old_click_label
end
2016-04-21 17:25:14 -04:00
2018-07-10 17:18:39 -04:00
it 'should uncheck via clicking the label with :for attribute if possible' do
2018-04-27 14:01:47 -04:00
expect ( @session . find ( :checkbox , 'form_cars_jaguar' , checked : true , visible : :hidden ) ) . to be_truthy
2016-08-01 17:14:10 -04:00
@session . uncheck ( 'form_cars_jaguar' )
@session . click_button ( 'awesome' )
expect ( extract_results ( @session ) [ 'cars' ] ) . not_to include ( 'jaguar' )
end
2016-04-21 17:25:14 -04:00
2018-07-10 17:18:39 -04:00
it 'should uncheck via clicking the wrapping label if possible' do
2018-04-27 14:01:47 -04:00
expect ( @session . find ( :checkbox , 'form_cars_koenigsegg' , checked : true , visible : :hidden ) ) . to be_truthy
2016-08-01 17:14:10 -04:00
@session . uncheck ( 'form_cars_koenigsegg' )
@session . click_button ( 'awesome' )
expect ( extract_results ( @session ) [ 'cars' ] ) . not_to include ( 'koenigsegg' )
end
2016-04-21 17:25:14 -04:00
2018-07-10 17:18:39 -04:00
it 'should not click the label if unneeded' do
2018-04-27 14:01:47 -04:00
expect ( @session . find ( :checkbox , 'form_cars_tesla' , unchecked : true , visible : :hidden ) ) . to be_truthy
2016-08-01 17:14:10 -04:00
@session . uncheck ( 'form_cars_tesla' )
@session . click_button ( 'awesome' )
expect ( extract_results ( @session ) [ 'cars' ] ) . not_to include ( 'tesla' )
end
2018-07-10 17:18:39 -04:00
it 'should raise original error when no label available' do
2018-07-12 15:32:41 -04:00
expect { @session . uncheck ( 'form_cars_porsche' ) } . to raise_error ( Capybara :: ElementNotFound , 'Unable to find visible checkbox "form_cars_porsche"' )
2016-08-01 17:14:10 -04:00
end
2016-04-22 13:11:19 -04:00
2018-07-10 17:18:39 -04:00
it 'should raise error if not allowed to click label' do
2018-07-12 15:32:41 -04:00
expect { @session . uncheck ( 'form_cars_jaguar' , allow_label_click : false ) } . to raise_error ( Capybara :: ElementNotFound , 'Unable to find visible checkbox "form_cars_jaguar"' )
end
2018-07-10 17:18:39 -04:00
it 'should include node filter description in error if necessary' do
2018-07-12 15:32:41 -04:00
expect { @session . uncheck ( 'form_cars_maserati' , allow_label_click : false ) } . to raise_error ( Capybara :: ElementNotFound , 'Unable to find visible checkbox "form_cars_maserati" that is not disabled' )
2016-08-01 17:14:10 -04:00
end
2016-04-22 13:11:19 -04:00
end
2016-04-21 17:25:14 -04:00
end
2010-01-18 14:33:22 -05:00
end