sauce_bindings 1.1.1 → 1.3.0

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.
@@ -0,0 +1,59 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+
5
+ module SauceBindings
6
+ describe Session do
7
+ describe 'gets accessibility results' do
8
+ before { WebMock.allow_net_connect! }
9
+
10
+ it 'with nested iframes' do
11
+ @session = Session.new
12
+ driver = @session.start
13
+
14
+ driver.get('http://watir.com/examples/nested_iframes.html')
15
+
16
+ results = @session.accessibility_results
17
+
18
+ problems = results['violations'].map { |v| v['nodes'].size }.inject(0, :+)
19
+ expect(problems).to eq 16
20
+ end
21
+
22
+ it 'with nested frames' do
23
+ @session = Session.new
24
+ driver = @session.start
25
+
26
+ driver.get('http://watir.com/examples/nested_frames.html')
27
+
28
+ results = @session.accessibility_results
29
+
30
+ problems = results['violations'].map { |v| v['nodes'].size }.inject(0, :+)
31
+ expect(problems).to eq 14
32
+ end
33
+
34
+ it 'with nested iframes and frames turned off' do
35
+ @session = Session.new
36
+ driver = @session.start
37
+
38
+ driver.get('http://watir.com/examples/nested_iframes.html')
39
+
40
+ results = @session.accessibility_results(frames: false)
41
+
42
+ problems = results['violations'].map { |v| v['nodes'].size }.inject(0, :+)
43
+ expect(problems).to eq 7
44
+ end
45
+
46
+ it 'with nested frames and frames turned off' do
47
+ @session = Session.new
48
+ driver = @session.start
49
+
50
+ driver.get('http://watir.com/examples/nested_frames.html')
51
+
52
+ results = @session.accessibility_results(frames: false)
53
+
54
+ problems = results['violations'].map { |v| v['nodes'].size }.inject(0, :+)
55
+ expect(problems).to eq 6
56
+ end
57
+ end
58
+ end
59
+ end
@@ -4,9 +4,9 @@ require 'spec_helper'
4
4
 
5
5
  module SauceBindings
6
6
  describe Session do
7
- describe 'starts with data center' do
8
- before { WebMock.allow_net_connect! }
7
+ before { WebMock.allow_net_connect! }
9
8
 
9
+ describe '#data_center=' do
10
10
  it 'defaults to US West' do
11
11
  @session = Session.new
12
12
  driver = @session.start
@@ -17,7 +17,8 @@ module SauceBindings
17
17
 
18
18
  it 'executes on US East' do
19
19
  options = Options.chrome(platform_name: 'Linux')
20
- @session = Session.new(options, data_center: :US_EAST)
20
+ @session = Session.new(options)
21
+ @session.data_center = :US_EAST
21
22
  driver = @session.start
22
23
 
23
24
  expect(driver).not_to be_nil
@@ -25,12 +26,40 @@ module SauceBindings
25
26
  end
26
27
 
27
28
  it 'executes on EU Central' do
28
- @session = Session.new(data_center: :EU_CENTRAL)
29
+ @session = Session.new
30
+ @session.data_center = :EU_CENTRAL
29
31
  driver = @session.start
30
32
 
31
33
  expect(driver).not_to be_nil
32
34
  expect(@session.url).to include('eu-central-1')
33
35
  end
36
+
37
+ it 'executes on APAC' do
38
+ pending 'Adding Data Center to Sauce Whisk'
39
+ @session = Session.new
40
+ @session.data_center = :APAC_SOUTHEAST
41
+ driver = @session.start
42
+
43
+ expect(driver).not_to be_nil
44
+ expect(@session.url).to include('apac-southeast-1')
45
+ end
46
+ end
47
+
48
+ describe '#stop_network' do
49
+ it 'stops and starts the network' do
50
+ @session = Session.new(Options.safari)
51
+ driver = @session.start
52
+
53
+ @session.stop_network
54
+ driver.get('https://www.saucedemo.com')
55
+
56
+ expect(driver.title).to eq 'Failed to open page'
57
+
58
+ @session.start_network
59
+ driver.get('https://www.saucedemo.com')
60
+
61
+ expect(driver.title).to eq 'Swag Labs'
62
+ end
34
63
  end
35
64
  end
36
65
  end
data/spec/spec_helper.rb CHANGED
@@ -3,13 +3,51 @@
3
3
  require 'sauce_bindings'
4
4
  require 'rspec'
5
5
  require 'webmock/rspec'
6
+ require 'climate_control'
6
7
 
7
8
  RSpec.configure do |config|
8
9
  config.expect_with :rspec do |c|
9
10
  c.syntax = :expect
10
11
  end
11
12
 
13
+ config.before(:suite) do
14
+ BUILD_ENV = {BUILD_TAG: '', BUILD_NAME: 'TEMP BUILD', BUILD_NUMBER: '11'}.freeze
15
+ SAUCE_ACCESS = {SAUCE_USERNAME: 'foo', SAUCE_ACCESS_KEY: '123'}.freeze
16
+ end
17
+
12
18
  config.after do |example|
13
- @session&.stop(!example.exception)
19
+ @session&.stop(!example.exception) if @session&.session_id != '0'
20
+ end
21
+ end
22
+
23
+ DEPRECATION_WARNINGS = %i[options_init timeouts].freeze
24
+
25
+ DEPRECATION_WARNINGS.each do |deprecation|
26
+ RSpec::Matchers.define "have_deprecated_#{deprecation}" do
27
+ match do |actual|
28
+ return actual.call if ENV['IGNORE_DEPRECATIONS']
29
+
30
+ warning = /\[DEPRECATION\] \[:#{deprecation}/
31
+ expect {
32
+ actual.call
33
+ @stdout_message = File.read $stdout if $stdout.is_a?(File)
34
+ }.to output(warning).to_stdout_from_any_process
35
+ end
36
+
37
+ failure_message do |_actual|
38
+ return 'unexpected exception in the custom matcher block' unless @stdout_message
39
+
40
+ deprecations_found = @stdout_message[/WARN Watir \[DEPRECATION\] ([^.*\ ]*)/, 1]
41
+ but_message = if deprecations_found.nil?
42
+ 'no Warnings were found'
43
+ else
44
+ "deprecation Warning of #{deprecations_found} was found instead"
45
+ end
46
+ "expected Warning message of \"#{deprecation}\" being deprecated, but #{but_message}"
47
+ end
48
+
49
+ def supports_block_expectations?
50
+ true
51
+ end
14
52
  end
15
53
  end
@@ -14,36 +14,23 @@ module SauceBindings
14
14
  {browserName: 'chrome',
15
15
  browserVersion: 'latest',
16
16
  platformName: 'Windows 10',
17
- 'sauce:options': {build: 'TEMP BUILD: 11'}}
17
+ 'sauce:options': {username: 'foo',
18
+ accessKey: '123',
19
+ build: 'TEMP BUILD: 11'}}
18
20
  end
19
21
 
20
22
  def expect_request
21
- se3 = {desiredCapabilities: default_capabilities,
22
- capabilities: {firstMatch: [default_capabilities]}}.to_json
23
- se4 = {capabilities: {alwaysMatch: default_capabilities}}.to_json
24
-
25
- body = Selenium::WebDriver::VERSION[0] == '3' ? se3 : se4
23
+ body = {capabilities: {alwaysMatch: default_capabilities}}.to_json
26
24
 
27
25
  endpoint = 'https://ondemand.us-west-1.saucelabs.com/wd/hub/session'
28
26
  stub_request(:post, endpoint).with(body: body).to_return(valid_response)
29
27
  end
30
28
 
31
- before do
32
- allow_any_instance_of(Net::HTTP).to receive(:proxy_uri)
33
- allow_any_instance_of(Selenium::WebDriver::Remote::Http::Default).to receive(:use_proxy?).and_return(false)
34
- allow(ENV).to receive(:[]).with('DISABLE_CAPYBARA_SELENIUM_OPTIMIZATIONS')
35
- allow(ENV).to receive(:[]).with('BUILD_TAG').and_return('')
36
- allow(ENV).to receive(:[]).with('BUILD_NAME').and_return('TEMP BUILD')
37
- allow(ENV).to receive(:[]).with('BUILD_NUMBER').and_return('11')
38
- allow(ENV).to receive(:[]).with('SAUCE_USERNAME').and_return('foo')
39
- allow(ENV).to receive(:[]).with('SAUCE_ACCESS_KEY').and_return('123')
40
- end
41
-
42
29
  describe '#new' do
43
30
  it 'registers a Capybara Driver' do
44
31
  CapybaraSession.new
45
32
 
46
- expect(Capybara.drivers).to include(:sauce)
33
+ expect(Capybara.drivers.names).to include(:sauce)
47
34
  expect(Capybara.current_driver).to eq :sauce
48
35
  end
49
36
  end
@@ -52,8 +39,11 @@ module SauceBindings
52
39
  it 'starts the session with Capybara driver' do
53
40
  expect_request
54
41
 
55
- driver = CapybaraSession.new.start
56
- expect(driver).to eq Capybara.current_session.driver.browser
42
+ ClimateControl.modify(**SAUCE_ACCESS, **BUILD_ENV) do
43
+ @driver = CapybaraSession.new.start
44
+ end
45
+
46
+ expect(@driver).to eq Capybara.current_session.driver.browser
57
47
 
58
48
  Capybara.current_session.driver.instance_variable_set('@browser', nil)
59
49
  end