simple_sauce 1.0.0.pre.alpha → 1.0.0.pre.alpha.1

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b6cabcc9d048c033cb89c6eb328e364c7a1f047c202453c89f5685e84e2a91f8
4
- data.tar.gz: cb3e8f3fcca010f06dfbb09a576b71e1ed90a92305adda8fac58138ba530d942
3
+ metadata.gz: d98345f5b70308f983dab7666e42db6f6038925507c8381000e2725ed0de5729
4
+ data.tar.gz: db5446374cc476310258535e7f425f6ee8717ed107abf1acf5fff9873f248ba0
5
5
  SHA512:
6
- metadata.gz: e86505a7b8ad04a1e6e0f3627f1e94082be58e09a01ff035177fcfd60cebf85cd6610424ca7b257b8ef103750dbb32dae30973cb1c82a2feb20b05173c864af1
7
- data.tar.gz: 962d17eaba87c010b65308ddce0e7ad9f9d336074d752a2be97e1482a2e9abbd7cf9cb62b2ca65dc518c55d6bd1223a5f0a0e599348e433ebf27ee43e16328f0
6
+ metadata.gz: 9feeb9962ffe488da37b9f61de2de7d08d6c9785ef56285651c9412ee9af75002e4fc0af4d32d85247948321e09365cb41079063e534dcc9e6efc75d07d6c3c9
7
+ data.tar.gz: b4d3294c5c1ec85b36998dbb478989db8c96a1ba747b34f2ca37ca559cb79cb60fe6f2e805629abd4e20e04f5675d402991eafe487743e476df403e809eda187
@@ -0,0 +1,33 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'simple_sauce'
4
+ require 'capybara'
5
+
6
+ module SimpleSauce
7
+ class CapybaraSession < Session
8
+ def initialize(*)
9
+ super
10
+
11
+ Capybara.register_driver :sauce do |app|
12
+ Capybara::Selenium::Driver.new(app, **{browser: :remote}.merge(to_selenium))
13
+ end
14
+ Capybara.current_driver = :sauce
15
+ end
16
+
17
+ def start
18
+ raise ArgumentError, "needs username; use `ENV['SAUCE_USERNAME']` or `Session#username=`" unless @username
19
+ raise ArgumentError, "needs access_key; use `ENV['SAUCE_ACCESS_KEY']` or `Session#access_key=`" unless @access_key
20
+
21
+ @capybara_driver = Capybara.current_session.driver
22
+ @driver = @capybara_driver.browser
23
+ end
24
+
25
+ def stop(result)
26
+ return if @driver.nil?
27
+
28
+ SauceWhisk::Jobs.change_status(@driver.session_id, result)
29
+
30
+ Capybara.current_session.quit
31
+ end
32
+ end
33
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module SimpleSauce
4
- VERSION = '1.0.0.pre.alpha'
4
+ VERSION = '1.0.0.pre.alpha.1'
5
5
  end
data/simple_sauce.gemspec CHANGED
@@ -20,6 +20,7 @@ Gem::Specification.new do |spec|
20
20
  spec.require_paths = ['lib']
21
21
 
22
22
  spec.add_development_dependency 'bundler', '~> 2.0'
23
+ spec.add_development_dependency 'capybara', '~> 3.16'
23
24
  spec.add_development_dependency 'rake', '~> 10.0'
24
25
  spec.add_development_dependency 'rspec', '~> 3.0'
25
26
  spec.add_development_dependency 'rubocop', '~>0.66'
@@ -0,0 +1,87 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+ require 'webmock/rspec'
5
+ require 'simple_sauce/capybara_session'
6
+
7
+ module SimpleSauce
8
+ describe CapybaraSession do
9
+ let(:valid_response) do
10
+ {status: 200,
11
+ body: {value: {sessionId: '0', capabilities: Selenium::WebDriver::Remote::Capabilities.chrome}}.to_json,
12
+ headers: {"content_type": 'application/json'}}
13
+ end
14
+ let(:default_capabilities) do
15
+ {browserName: 'chrome',
16
+ browserVersion: 'latest',
17
+ platformName: 'Windows 10',
18
+ 'sauce:options': {build: 'TEMP BUILD: 11'}}
19
+ end
20
+
21
+ def expect_request(body: nil, endpoint: nil)
22
+ body = (body || {desiredCapabilities: default_capabilities,
23
+ capabilities: {firstMatch: [default_capabilities]}}).to_json
24
+ endpoint ||= 'https://ondemand.us-west-1.saucelabs.com/wd/hub/session'
25
+ stub_request(:post, endpoint).with(body: body).to_return(valid_response)
26
+ end
27
+
28
+ before do
29
+ ENV['BUILD_TAG'] = ''
30
+ ENV['BUILD_NAME'] = 'TEMP BUILD'
31
+ ENV['BUILD_NUMBER'] = '11'
32
+ ENV['SAUCE_USERNAME'] = 'foo'
33
+ ENV['SAUCE_ACCESS_KEY'] = '123'
34
+ end
35
+
36
+ after do
37
+ ENV.delete 'BUILD_TAG'
38
+ ENV.delete 'BUILD_NAME'
39
+ ENV.delete 'BUILD_NUMBER'
40
+ ENV.delete 'SAUCE_USERNAME'
41
+ ENV.delete 'SAUCE_ACCESS_KEY'
42
+ end
43
+
44
+ describe '#new' do
45
+ it 'registers a Capybara Driver' do
46
+ CapybaraSession.new
47
+
48
+ expect(Capybara.drivers).to include(:sauce)
49
+ expect(Capybara.current_driver).to eq :sauce
50
+ end
51
+ end
52
+
53
+ describe '#start' do
54
+ it 'starts the session with Capybara driver' do
55
+ expect_request
56
+
57
+ driver = CapybaraSession.new.start
58
+ expect(driver).to eq Capybara.current_session.driver.browser
59
+
60
+ Capybara.current_session.driver.instance_variable_set('@browser', nil)
61
+ end
62
+ end
63
+
64
+ describe '#stop' do
65
+ it 'quits the driver' do
66
+ cappy_driver = instance_double(Capybara::Selenium::Driver)
67
+ driver = instance_double(Selenium::WebDriver::Remote::Driver, session_id: '1234')
68
+ allow(cappy_driver).to receive(:browser).and_return(driver)
69
+
70
+ allow(SauceWhisk::Jobs).to receive(:change_status).with('1234', true)
71
+
72
+ session = CapybaraSession.new
73
+
74
+ allow(Capybara.current_session).to receive(:driver).and_return(cappy_driver)
75
+ allow(Capybara.current_session).to receive(:quit)
76
+
77
+ session.start
78
+ session.stop(true)
79
+
80
+ expect(SauceWhisk::Jobs).to have_received(:change_status).with('1234', true)
81
+ expect(Capybara.current_session).to have_received(:quit)
82
+
83
+ Capybara.current_session.driver.instance_variable_set('@browser', nil)
84
+ end
85
+ end
86
+ end
87
+ end
data/spec/session_spec.rb CHANGED
@@ -7,7 +7,7 @@ module SimpleSauce
7
7
  describe Session do
8
8
  let(:valid_response) do
9
9
  {status: 200,
10
- body: {value: {sessionId: 0, capabilities: Selenium::WebDriver::Remote::Capabilities.chrome}}.to_json,
10
+ body: {value: {sessionId: '0', capabilities: Selenium::WebDriver::Remote::Capabilities.chrome}}.to_json,
11
11
  headers: {"content_type": 'application/json'}}
12
12
  end
13
13
  let(:default_capabilities) do
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: simple_sauce
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0.pre.alpha
4
+ version: 1.0.0.pre.alpha.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Titus Fortner
@@ -24,6 +24,20 @@ dependencies:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: '2.0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: capybara
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '3.16'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '3.16'
27
41
  - !ruby/object:Gem::Dependency
28
42
  name: rake
29
43
  requirement: !ruby/object:Gem::Requirement
@@ -158,10 +172,12 @@ files:
158
172
  - README.md
159
173
  - Rakefile
160
174
  - lib/simple_sauce.rb
175
+ - lib/simple_sauce/capybara_session.rb
161
176
  - lib/simple_sauce/options.rb
162
177
  - lib/simple_sauce/session.rb
163
178
  - lib/simple_sauce/version.rb
164
179
  - simple_sauce.gemspec
180
+ - spec/capybara_session_spec.rb
165
181
  - spec/options.yml
166
182
  - spec/options_spec.rb
167
183
  - spec/session_spec.rb
@@ -190,6 +206,7 @@ signing_key:
190
206
  specification_version: 4
191
207
  summary: Simple interface for interacting with Sauce Labs.
192
208
  test_files:
209
+ - spec/capybara_session_spec.rb
193
210
  - spec/options.yml
194
211
  - spec/options_spec.rb
195
212
  - spec/session_spec.rb