2018-10-02 14:31:39 -04:00
# frozen_string_literal: true
require 'capybara/dsl'
2020-09-24 23:09:30 -04:00
RSpec . describe QA :: Support :: Page :: Logging do
2019-01-24 08:43:02 -05:00
let ( :page ) { double . as_null_object }
2022-03-15 17:07:57 -04:00
let ( :logger ) { Gitlab :: QA :: TestLogger . logger ( level : :: Logger :: DEBUG , source : 'QA Tests' ) }
2018-10-02 14:31:39 -04:00
before do
2022-03-15 17:07:57 -04:00
allow ( QA :: Runtime :: Logger ) . to receive ( :logger ) . and_return ( logger )
2018-10-25 11:49:33 -04:00
2018-10-02 14:31:39 -04:00
allow ( Capybara ) . to receive ( :current_session ) . and_return ( page )
2021-07-26 14:09:51 -04:00
allow ( page ) . to receive ( :find ) . and_return ( page )
2018-10-02 14:31:39 -04:00
allow ( page ) . to receive ( :current_url ) . and_return ( 'http://current-url' )
allow ( page ) . to receive ( :has_css? ) . with ( any_args ) . and_return ( true )
2022-01-14 10:16:52 -05:00
allow ( QA :: Support :: PageErrorChecker ) . to receive ( :check_page_for_error_code ) . and_return ( 0 )
2018-10-02 14:31:39 -04:00
end
subject do
Class . new ( QA :: Page :: Base ) do
prepend QA :: Support :: Page :: Logging
end . new
end
it 'logs refresh' do
expect { subject . refresh }
. to output ( %r{ refreshing http://current-url } ) . to_stdout_from_any_process
end
it 'logs scroll_to' do
expect { subject . scroll_to ( :element ) }
. to output ( / scrolling to :element / ) . to_stdout_from_any_process
end
it 'logs asset_exists?' do
expect { subject . asset_exists? ( 'http://asset-url' ) }
. to output ( %r{ asset_exists \ ? http://asset-url returned false } ) . to_stdout_from_any_process
end
it 'logs find_element' do
expect { subject . find_element ( :element ) }
2018-12-28 12:39:07 -05:00
. to output ( / finding :element / ) . to_stdout_from_any_process
expect { subject . find_element ( :element ) }
. to output ( / found :element / ) . to_stdout_from_any_process
end
2019-02-25 08:37:27 -05:00
it 'logs find_element with text' do
expect { subject . find_element ( :element , text : 'foo' ) }
2019-06-05 04:46:30 -04:00
. to output ( / finding :element with args {:text=>"foo"} / ) . to_stdout_from_any_process
2019-02-25 08:37:27 -05:00
expect { subject . find_element ( :element , text : 'foo' ) }
2018-10-02 14:31:39 -04:00
. to output ( / found :element / ) . to_stdout_from_any_process
end
2019-06-05 04:46:30 -04:00
it 'logs find_element with wait' do
expect { subject . find_element ( :element , wait : 0 ) }
. to output ( / finding :element with args {:wait=>0} / ) . to_stdout_from_any_process
end
it 'logs find_element with class' do
expect { subject . find_element ( :element , class : 'active' ) }
2022-03-15 17:07:57 -04:00
. to output ( / finding :element with args {:class=>"active"} / ) . to_stdout_from_any_process
2019-06-05 04:46:30 -04:00
end
2018-10-02 14:31:39 -04:00
it 'logs click_element' do
expect { subject . click_element ( :element ) }
. to output ( / clicking :element / ) . to_stdout_from_any_process
end
it 'logs fill_element' do
expect { subject . fill_element ( :element , 'foo' ) }
. to output ( / filling :element with "foo" / ) . to_stdout_from_any_process
end
it 'logs has_element?' do
expect { subject . has_element? ( :element ) }
2022-03-15 17:07:57 -04:00
. to output ( / has_element \ ? :element \ (wait: #{ QA :: Runtime :: Browser :: CAPYBARA_MAX_WAIT_TIME } \ ) returned: true /o ) . to_stdout_from_any_process
2019-02-25 08:37:27 -05:00
end
it 'logs has_element? with text' do
expect { subject . has_element? ( :element , text : " some text " ) }
2022-03-15 17:07:57 -04:00
. to output ( / has_element \ ? :element with text "some text" \ (wait: #{ QA :: Runtime :: Browser :: CAPYBARA_MAX_WAIT_TIME } \ ) returned: true /o ) . to_stdout_from_any_process
2018-12-20 08:27:08 -05:00
end
2019-01-07 13:57:05 -05:00
it 'logs has_no_element?' do
allow ( page ) . to receive ( :has_no_css? ) . and_return ( true )
expect { subject . has_no_element? ( :element ) }
2022-03-15 17:07:57 -04:00
. to output ( / has_no_element \ ? :element \ (wait: #{ QA :: Runtime :: Browser :: CAPYBARA_MAX_WAIT_TIME } \ ) returned: true /o ) . to_stdout_from_any_process
2019-05-06 22:43:10 -04:00
end
it 'logs has_no_element? with text' do
allow ( page ) . to receive ( :has_no_css? ) . and_return ( true )
expect { subject . has_no_element? ( :element , text : " more text " ) }
2022-03-15 17:07:57 -04:00
. to output ( / has_no_element \ ? :element with text "more text" \ (wait: #{ QA :: Runtime :: Browser :: CAPYBARA_MAX_WAIT_TIME } \ ) returned: true /o ) . to_stdout_from_any_process
2019-01-07 13:57:05 -05:00
end
it 'logs has_text?' do
allow ( page ) . to receive ( :has_text? ) . and_return ( true )
expect { subject . has_text? 'foo' }
2022-03-15 17:07:57 -04:00
. to output ( / has_text \ ? \ ('foo', wait: #{ QA :: Runtime :: Browser :: CAPYBARA_MAX_WAIT_TIME } \ ) returned true /o ) . to_stdout_from_any_process
2019-01-07 13:57:05 -05:00
end
2018-12-20 08:27:08 -05:00
it 'logs has_no_text?' do
2020-01-15 07:08:34 -05:00
allow ( page ) . to receive ( :has_no_text? ) . with ( 'foo' , any_args ) . and_return ( true )
2018-12-20 08:27:08 -05:00
expect { subject . has_no_text? 'foo' }
2022-03-15 17:07:57 -04:00
. to output ( / has_no_text \ ? \ ('foo', wait: #{ QA :: Runtime :: Browser :: CAPYBARA_MAX_WAIT_TIME } \ ) returned true /o ) . to_stdout_from_any_process
2019-01-24 13:11:52 -05:00
end
it 'logs finished_loading?' do
expect { subject . finished_loading? }
. to output ( / waiting for loading to complete \ . \ . \ . / ) . to_stdout_from_any_process
expect { subject . finished_loading? }
. to output ( / loading complete after .* seconds$ / ) . to_stdout_from_any_process
2018-10-02 14:31:39 -04:00
end
it 'logs within_element' do
2019-06-14 01:07:29 -04:00
expect { subject . within_element ( :element , text : nil ) }
2018-10-02 14:31:39 -04:00
. to output ( / within element :element / ) . to_stdout_from_any_process
2019-06-14 01:07:29 -04:00
expect { subject . within_element ( :element , text : nil ) }
2018-10-02 14:31:39 -04:00
. to output ( / end within element :element / ) . to_stdout_from_any_process
end
context 'all_elements' do
it 'logs the number of elements found' do
allow ( page ) . to receive ( :all ) . and_return ( [ 1 , 2 ] )
2020-01-09 19:07:56 -05:00
expect { subject . all_elements ( :element , count : 2 ) }
2018-10-02 14:31:39 -04:00
. to output ( / finding all :element / ) . to_stdout_from_any_process
2020-01-09 19:07:56 -05:00
expect { subject . all_elements ( :element , count : 2 ) }
2018-10-02 14:31:39 -04:00
. to output ( / found 2 :element / ) . to_stdout_from_any_process
end
it 'logs 0 if no elements are found' do
allow ( page ) . to receive ( :all ) . and_return ( [ ] )
2020-01-09 19:07:56 -05:00
expect { subject . all_elements ( :element , count : 1 ) }
2018-10-02 14:31:39 -04:00
. to output ( / finding all :element / ) . to_stdout_from_any_process
2020-01-09 19:07:56 -05:00
expect { subject . all_elements ( :element , count : 1 ) }
2018-10-02 14:31:39 -04:00
. not_to output ( / found 0 :elements / ) . to_stdout_from_any_process
end
end
end