capybara-screenshot 1.0.12 → 1.0.13
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/CHANGELOG.md +5 -0
- data/README.md +25 -0
- data/capybara-screenshot.gemspec +1 -0
- data/lib/capybara-screenshot.rb +23 -4
- data/lib/capybara-screenshot/cucumber.rb +1 -2
- data/lib/capybara-screenshot/minitest.rb +3 -3
- data/lib/capybara-screenshot/rspec.rb +3 -1
- data/lib/capybara-screenshot/rspec/json_reporter.rb +19 -0
- data/lib/capybara-screenshot/s3_saver.rb +64 -0
- data/lib/capybara-screenshot/spinach.rb +1 -1
- data/lib/capybara-screenshot/testunit.rb +1 -1
- data/lib/capybara-screenshot/version.rb +1 -1
- data/spec/feature/minitest_spec.rb +3 -30
- data/spec/rspec/rspec_spec.rb +2 -1
- data/spec/unit/capybara-screenshot_spec.rb +26 -0
- data/spec/unit/s3_saver_spec.rb +132 -0
- metadata +20 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a2c4277a621182718153bba9b9bae60234ddfd17
|
4
|
+
data.tar.gz: 6af401d8ae56c2849916c0145f0f0ce928cc92ac
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0696563bcf86da3827f2d8392f2555c56e2f830b0ff6c76bad72d5ac2c1b8ddb37730fee26c51924dbd0f4edc4cf8054949adac7506bf01b45cd955fc200c676
|
7
|
+
data.tar.gz: 55ebe3341f404a7c57d5265ca6478127e3b3b4f277a0f2d130f87d5724b0d38d6d441fed4488ab13d0194826432ad0491f6a52b754dc19e578f6f33f61be1a83
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,8 @@
|
|
1
|
+
23 May 2016 - 1.0.12 -> 1.0.13
|
2
|
+
|
3
|
+
* Fixes [mkmf bug 162](https://github.com/mattheworiordan/capybara-screenshot/issues/162) and [mkmf bug 174](https://github.com/mattheworiordan/capybara-screenshot/issues/174)
|
4
|
+
* Fix for `Capybara.save_path` method existence assumption
|
5
|
+
|
1
6
|
29 March 2016 - 1.0.11 -> 1.0.12
|
2
7
|
|
3
8
|
* [Aruba upgrade - passing CI](https://github.com/mattheworiordan/capybara-screenshot/pull/156)
|
data/README.md
CHANGED
@@ -174,6 +174,31 @@ Capybara.save_and_open_page_path = "/file/path"
|
|
174
174
|
```
|
175
175
|
|
176
176
|
|
177
|
+
Uploading screenshots to S3
|
178
|
+
--------------------------
|
179
|
+
You can configure capybara-screenshot to automatically save your screenshots to an AWS S3 bucket.
|
180
|
+
|
181
|
+
First, install the `aws-sdk` gem or add it to your Gemfile
|
182
|
+
|
183
|
+
```ruby
|
184
|
+
gem 'capybara-screenshot', :group => :test
|
185
|
+
gem 'aws-sdk', :group => :test
|
186
|
+
```
|
187
|
+
|
188
|
+
Next, configure capybara-screenshot with your S3 credentials, the bucket to save to, and an optional region (default: `us-east-1`).
|
189
|
+
|
190
|
+
```ruby
|
191
|
+
Capybara::Screenshot.s3_configuration = {
|
192
|
+
s3_client_credentials: {
|
193
|
+
access_key_id: "my_access_key_id",
|
194
|
+
secret_access_key: "my_secret_access_key",
|
195
|
+
region: "eu-central-1"
|
196
|
+
},
|
197
|
+
bucket_name: "my_screenshots"
|
198
|
+
}
|
199
|
+
```
|
200
|
+
|
201
|
+
|
177
202
|
Pruning old screenshots automatically
|
178
203
|
--------------------------
|
179
204
|
By default screenshots are saved indefinitely, if you want them to be automatically pruned on a new failure, then you can specify one of the following prune strategies as follows:
|
data/capybara-screenshot.gemspec
CHANGED
@@ -30,6 +30,7 @@ Gem::Specification.new do |s|
|
|
30
30
|
s.add_development_dependency 'test-unit'
|
31
31
|
s.add_development_dependency 'spinach'
|
32
32
|
s.add_development_dependency 'minitest'
|
33
|
+
s.add_development_dependency 'aws-sdk'
|
33
34
|
|
34
35
|
s.files = `git ls-files`.split("\n")
|
35
36
|
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
data/lib/capybara-screenshot.rb
CHANGED
@@ -9,6 +9,7 @@ module Capybara
|
|
9
9
|
attr_accessor :webkit_options
|
10
10
|
attr_writer :final_session_name
|
11
11
|
attr_accessor :prune_strategy
|
12
|
+
attr_accessor :s3_configuration
|
12
13
|
end
|
13
14
|
|
14
15
|
self.autosave_on_failure = true
|
@@ -18,6 +19,7 @@ module Capybara
|
|
18
19
|
self.append_random = false
|
19
20
|
self.webkit_options = {}
|
20
21
|
self.prune_strategy = :keep_all
|
22
|
+
self.s3_configuration = {}
|
21
23
|
|
22
24
|
def self.append_screenshot_path=(value)
|
23
25
|
$stderr.puts "WARNING: Capybara::Screenshot.append_screenshot_path is deprecated. " +
|
@@ -26,7 +28,7 @@ module Capybara
|
|
26
28
|
end
|
27
29
|
|
28
30
|
def self.screenshot_and_save_page
|
29
|
-
saver =
|
31
|
+
saver = new_saver(Capybara, Capybara.page)
|
30
32
|
if saver.save
|
31
33
|
{:html => saver.html_path, :image => saver.screenshot_path}
|
32
34
|
end
|
@@ -35,7 +37,7 @@ module Capybara
|
|
35
37
|
def self.screenshot_and_open_image
|
36
38
|
require "launchy"
|
37
39
|
|
38
|
-
saver =
|
40
|
+
saver = new_saver(Capybara, Capybara.page, false)
|
39
41
|
if saver.save
|
40
42
|
Launchy.open saver.screenshot_path
|
41
43
|
{:html => nil, :image => saver.screenshot_path}
|
@@ -54,7 +56,7 @@ module Capybara
|
|
54
56
|
end
|
55
57
|
|
56
58
|
def self.capybara_root
|
57
|
-
@capybara_root ||= if defined?(::Rails) && Rails.root.present?
|
59
|
+
@capybara_root ||= if defined?(::Rails) && ::Rails.root.present?
|
58
60
|
::Rails.root.join capybara_tmp_path
|
59
61
|
elsif defined?(Padrino)
|
60
62
|
File.expand_path(capybara_tmp_path, Padrino.root)
|
@@ -90,11 +92,28 @@ module Capybara
|
|
90
92
|
@pruned_previous_screenshots = nil
|
91
93
|
end
|
92
94
|
|
95
|
+
def self.new_saver(*args)
|
96
|
+
saver = Saver.new(*args)
|
97
|
+
|
98
|
+
unless s3_configuration.empty?
|
99
|
+
require 'capybara-screenshot/s3_saver'
|
100
|
+
saver = S3Saver.new_with_configuration(saver, s3_configuration)
|
101
|
+
end
|
102
|
+
|
103
|
+
return saver
|
104
|
+
end
|
105
|
+
|
93
106
|
private
|
94
107
|
|
95
108
|
# If the path isn't set, default to the current directory
|
96
109
|
def self.capybara_tmp_path
|
97
|
-
|
110
|
+
# `#save_and_open_page_path` is deprecated
|
111
|
+
# https://github.com/jnicklas/capybara/blob/48ab1ede946dec2250a2d1d8cbb3313f25096456/History.md#L37
|
112
|
+
if Capybara.respond_to?(:save_path)
|
113
|
+
Capybara.save_path
|
114
|
+
else
|
115
|
+
Capybara.save_and_open_page_path
|
116
|
+
end || '.'
|
98
117
|
end
|
99
118
|
end
|
100
119
|
end
|
@@ -1,5 +1,4 @@
|
|
1
1
|
require "capybara-screenshot"
|
2
|
-
require 'mkmf'
|
3
2
|
|
4
3
|
Before do |scenario|
|
5
4
|
Capybara::Screenshot.final_session_name = nil
|
@@ -10,7 +9,7 @@ After do |scenario|
|
|
10
9
|
Capybara.using_session(Capybara::Screenshot.final_session_name) do
|
11
10
|
filename_prefix = Capybara::Screenshot.filename_prefix_for(:cucumber, scenario)
|
12
11
|
|
13
|
-
saver = Capybara::Screenshot
|
12
|
+
saver = Capybara::Screenshot.new_saver(Capybara, Capybara.page, true, filename_prefix)
|
14
13
|
saver.save
|
15
14
|
saver.output_screenshot_path
|
16
15
|
|
@@ -6,14 +6,14 @@ module Capybara::Screenshot::MiniTestPlugin
|
|
6
6
|
Capybara::Screenshot.final_session_name = nil
|
7
7
|
end
|
8
8
|
|
9
|
-
def
|
9
|
+
def before_teardown
|
10
10
|
super
|
11
|
-
if self.class.ancestors.map(&:to_s).include?('
|
11
|
+
if self.class.ancestors.map(&:to_s).include?('Capybara::DSL')
|
12
12
|
if Capybara::Screenshot.autosave_on_failure && !passed? && !skipped?
|
13
13
|
Capybara.using_session(Capybara::Screenshot.final_session_name) do
|
14
14
|
filename_prefix = Capybara::Screenshot.filename_prefix_for(:minitest, self)
|
15
15
|
|
16
|
-
saver = Capybara::Screenshot
|
16
|
+
saver = Capybara::Screenshot.new_saver(Capybara, Capybara.page, true, filename_prefix)
|
17
17
|
saver.save
|
18
18
|
saver.output_screenshot_path
|
19
19
|
end
|
@@ -3,6 +3,7 @@ require "capybara-screenshot"
|
|
3
3
|
require "capybara-screenshot/rspec/text_reporter"
|
4
4
|
require "capybara-screenshot/rspec/html_link_reporter"
|
5
5
|
require "capybara-screenshot/rspec/html_embed_reporter"
|
6
|
+
require "capybara-screenshot/rspec/json_reporter"
|
6
7
|
require "capybara-screenshot/rspec/textmate_link_reporter"
|
7
8
|
|
8
9
|
module Capybara
|
@@ -39,6 +40,7 @@ module Capybara
|
|
39
40
|
"RSpec::Core::Formatters::ProgressFormatter" => Capybara::Screenshot::RSpec::TextReporter,
|
40
41
|
"RSpec::Core::Formatters::DocumentationFormatter" => Capybara::Screenshot::RSpec::TextReporter,
|
41
42
|
"RSpec::Core::Formatters::HtmlFormatter" => Capybara::Screenshot::RSpec::HtmlLinkReporter,
|
43
|
+
"RSpec::Core::Formatters::JsonFormatter" => Capybara::Screenshot::RSpec::JsonReporter,
|
42
44
|
"RSpec::Core::Formatters::TextMateFormatter" => Capybara::Screenshot::RSpec::TextMateLinkReporter, # RSpec 2
|
43
45
|
"RSpec::Mate::Formatters::TextMateFormatter" => Capybara::Screenshot::RSpec::TextMateLinkReporter, # RSpec 3
|
44
46
|
"Fuubar" => Capybara::Screenshot::RSpec::TextReporter
|
@@ -53,7 +55,7 @@ module Capybara
|
|
53
55
|
if Capybara.page.current_url != '' && Capybara::Screenshot.autosave_on_failure && example.exception
|
54
56
|
filename_prefix = Capybara::Screenshot.filename_prefix_for(:rspec, example)
|
55
57
|
|
56
|
-
saver = Capybara::Screenshot
|
58
|
+
saver = Capybara::Screenshot.new_saver(Capybara, Capybara.page, true, filename_prefix)
|
57
59
|
saver.save
|
58
60
|
|
59
61
|
example.metadata[:screenshot] = {}
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require 'capybara-screenshot/rspec/base_reporter'
|
2
|
+
|
3
|
+
module Capybara
|
4
|
+
module Screenshot
|
5
|
+
module RSpec
|
6
|
+
module JsonReporter
|
7
|
+
extend BaseReporter
|
8
|
+
|
9
|
+
enhance_with_screenshot :format_example
|
10
|
+
|
11
|
+
def format_example_with_screenshot(example)
|
12
|
+
format_example_without_screenshot(example).merge({
|
13
|
+
screenshot: example.metadata[:screenshot]
|
14
|
+
})
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,64 @@
|
|
1
|
+
require 'aws-sdk'
|
2
|
+
|
3
|
+
module Capybara
|
4
|
+
module Screenshot
|
5
|
+
class S3Saver
|
6
|
+
DEFAULT_REGION = 'us-east-1'
|
7
|
+
|
8
|
+
def initialize(saver, s3_client, bucket_name)
|
9
|
+
@saver = saver
|
10
|
+
@s3_client = s3_client
|
11
|
+
@bucket_name = bucket_name
|
12
|
+
end
|
13
|
+
|
14
|
+
def self.new_with_configuration(saver, configuration)
|
15
|
+
default_s3_client_credentials = {
|
16
|
+
region: DEFAULT_REGION
|
17
|
+
}
|
18
|
+
|
19
|
+
s3_client_credentials = default_s3_client_credentials.merge(
|
20
|
+
configuration.fetch(:s3_client_credentials)
|
21
|
+
)
|
22
|
+
|
23
|
+
s3_client = Aws::S3::Client.new(s3_client_credentials)
|
24
|
+
bucket_name = configuration.fetch(:bucket_name)
|
25
|
+
|
26
|
+
new(saver, s3_client, bucket_name)
|
27
|
+
rescue KeyError
|
28
|
+
raise "Invalid S3 Configuration #{configuration}. Please refer to the documentation for the necessary configurations."
|
29
|
+
end
|
30
|
+
|
31
|
+
def save_and_upload_screenshot
|
32
|
+
save_and do |local_file_path|
|
33
|
+
File.open(local_file_path) do |file|
|
34
|
+
s3_client.put_object(
|
35
|
+
bucket: bucket_name,
|
36
|
+
key: File.basename(local_file_path),
|
37
|
+
body: file
|
38
|
+
)
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
alias_method :save, :save_and_upload_screenshot
|
43
|
+
|
44
|
+
def method_missing(method, *args)
|
45
|
+
# Need to use @saver instead of S3Saver#saver attr_reader method because
|
46
|
+
# using the method goes into infinite loop. Maybe attr_reader implements
|
47
|
+
# its methods via method_missing?
|
48
|
+
@saver.send(method, *args)
|
49
|
+
end
|
50
|
+
|
51
|
+
private
|
52
|
+
attr_reader :saver,
|
53
|
+
:s3_client,
|
54
|
+
:bucket_name
|
55
|
+
|
56
|
+
def save_and
|
57
|
+
saver.save
|
58
|
+
|
59
|
+
yield(saver.html_path) if block_given? && saver.html_saved?
|
60
|
+
yield(saver.screenshot_path) if block_given? && saver.screenshot_saved?
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
@@ -9,7 +9,7 @@ module Capybara::Screenshot::Spinach
|
|
9
9
|
if Capybara::Screenshot.autosave_on_failure
|
10
10
|
Capybara.using_session(Capybara::Screenshot.final_session_name) do
|
11
11
|
filename_prefix = Capybara::Screenshot.filename_prefix_for(:spinach, step_data)
|
12
|
-
saver = Capybara::Screenshot
|
12
|
+
saver = Capybara::Screenshot.new_saver(Capybara, Capybara.page, true, filename_prefix)
|
13
13
|
saver.save
|
14
14
|
saver.output_screenshot_path
|
15
15
|
end
|
@@ -27,7 +27,7 @@ Test::Unit::TestResult.class_eval do
|
|
27
27
|
Capybara.using_session(Capybara::Screenshot.final_session_name) do
|
28
28
|
filename_prefix = Capybara::Screenshot.filename_prefix_for(:testunit, fault)
|
29
29
|
|
30
|
-
saver = Capybara::Screenshot
|
30
|
+
saver = Capybara::Screenshot.new_saver(Capybara, Capybara.page, true, filename_prefix)
|
31
31
|
saver.save
|
32
32
|
saver.output_screenshot_path
|
33
33
|
end
|
@@ -31,25 +31,6 @@ describe "Using Capybara::Screenshot with MiniTest" do
|
|
31
31
|
end
|
32
32
|
|
33
33
|
it 'saves a screenshot on failure' do
|
34
|
-
run_failing_case <<-RUBY
|
35
|
-
module ActionDispatch
|
36
|
-
class IntegrationTest < Minitest::Unit::TestCase; end
|
37
|
-
end
|
38
|
-
|
39
|
-
class TestFailure < ActionDispatch::IntegrationTest
|
40
|
-
include Capybara::DSL
|
41
|
-
|
42
|
-
def test_failure
|
43
|
-
visit '/'
|
44
|
-
assert(page.body.include?('This is the root page'))
|
45
|
-
click_on "you'll never find me"
|
46
|
-
end
|
47
|
-
end
|
48
|
-
RUBY
|
49
|
-
expect('tmp/my_screenshot.html').to have_file_content('This is the root page')
|
50
|
-
end
|
51
|
-
|
52
|
-
it "does not save a screenshot for tests that don't inherit from ActionDispatch::IntegrationTest" do
|
53
34
|
run_failing_case <<-RUBY
|
54
35
|
class TestFailure < MiniTest::Unit::TestCase
|
55
36
|
include Capybara::DSL
|
@@ -61,16 +42,12 @@ describe "Using Capybara::Screenshot with MiniTest" do
|
|
61
42
|
end
|
62
43
|
end
|
63
44
|
RUBY
|
64
|
-
expect('tmp/my_screenshot.html').
|
45
|
+
expect('tmp/my_screenshot.html').to have_file_content('This is the root page')
|
65
46
|
end
|
66
47
|
|
67
48
|
it 'saves a screenshot for the correct session for failures using_session' do
|
68
49
|
run_failing_case <<-RUBY
|
69
|
-
|
70
|
-
class IntegrationTest < Minitest::Unit::TestCase; end
|
71
|
-
end
|
72
|
-
|
73
|
-
class TestFailure < ActionDispatch::IntegrationTest
|
50
|
+
class TestFailure < Minitest::Unit::TestCase
|
74
51
|
include Capybara::DSL
|
75
52
|
|
76
53
|
def test_failure
|
@@ -91,11 +68,7 @@ describe "Using Capybara::Screenshot with MiniTest" do
|
|
91
68
|
create_screenshot_for_pruning
|
92
69
|
configure_prune_strategy :last_run
|
93
70
|
run_failing_case <<-RUBY
|
94
|
-
|
95
|
-
class IntegrationTest < Minitest::Unit::TestCase; end
|
96
|
-
end
|
97
|
-
|
98
|
-
class TestFailure < ActionDispatch::IntegrationTest
|
71
|
+
class TestFailure < Minitest::Unit::TestCase
|
99
72
|
include Capybara::DSL
|
100
73
|
|
101
74
|
def test_failure
|
data/spec/rspec/rspec_spec.rb
CHANGED
@@ -57,7 +57,8 @@ describe Capybara::Screenshot::RSpec, :type => :aruba do
|
|
57
57
|
formatters = {
|
58
58
|
progress: 'HTML screenshot:',
|
59
59
|
documentation: 'HTML screenshot:',
|
60
|
-
html: %r{<a href="file://\./tmp/screenshot\.html"[^>]*>HTML page</a>}
|
60
|
+
html: %r{<a href="file://\./tmp/screenshot\.html"[^>]*>HTML page</a>},
|
61
|
+
json: '"screenshot":{"'
|
61
62
|
}
|
62
63
|
|
63
64
|
# Textmate formatter is only included in RSpec 2
|
@@ -65,6 +65,32 @@ describe Capybara::Screenshot do
|
|
65
65
|
end
|
66
66
|
end
|
67
67
|
|
68
|
+
describe '.new_saver' do
|
69
|
+
it 'passes through to get a new Saver if the user has not configured s3' do
|
70
|
+
saver_double = double('saver')
|
71
|
+
args = double('args')
|
72
|
+
expect(Capybara::Screenshot::Saver).to receive(:new).with(args).and_return(saver_double)
|
73
|
+
|
74
|
+
expect(Capybara::Screenshot.new_saver(args)).to eq(saver_double)
|
75
|
+
end
|
76
|
+
|
77
|
+
it 'wraps the returned saver in an S3 saver if it has been configured' do
|
78
|
+
require 'capybara-screenshot/s3_saver'
|
79
|
+
|
80
|
+
saver_double = double('saver')
|
81
|
+
args = double('args')
|
82
|
+
s3_saver_double = double('s3_saver')
|
83
|
+
s3_configuration = { hello: 'world' }
|
84
|
+
|
85
|
+
Capybara::Screenshot.s3_configuration = s3_configuration
|
86
|
+
|
87
|
+
expect(Capybara::Screenshot::Saver).to receive(:new).with(args).and_return(saver_double)
|
88
|
+
expect(Capybara::Screenshot::S3Saver).to receive(:new_with_configuration).with(saver_double, s3_configuration).and_return(s3_saver_double)
|
89
|
+
|
90
|
+
expect(Capybara::Screenshot.new_saver(args)).to eq(s3_saver_double)
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
68
94
|
describe '#prune' do
|
69
95
|
before do
|
70
96
|
Capybara::Screenshot.reset_prune_history
|
@@ -0,0 +1,132 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'capybara-screenshot/s3_saver'
|
3
|
+
|
4
|
+
describe Capybara::Screenshot::S3Saver do
|
5
|
+
let(:saver) { double('saver') }
|
6
|
+
let(:bucket_name) { double('bucket_name') }
|
7
|
+
let(:s3_client) { double('s3_client') }
|
8
|
+
|
9
|
+
let(:s3_saver) { Capybara::Screenshot::S3Saver.new(saver, s3_client, bucket_name) }
|
10
|
+
|
11
|
+
describe '.new_with_configuration' do
|
12
|
+
let(:access_key_id) { double('access_key_id') }
|
13
|
+
let(:secret_access_key) { double('secret_access_key') }
|
14
|
+
let(:s3_client_credentials_using_defaults) {
|
15
|
+
{
|
16
|
+
access_key_id: access_key_id,
|
17
|
+
secret_access_key: secret_access_key
|
18
|
+
}
|
19
|
+
}
|
20
|
+
|
21
|
+
let(:region) { double('region') }
|
22
|
+
let(:s3_client_credentials) {
|
23
|
+
s3_client_credentials_using_defaults.merge(region: region)
|
24
|
+
}
|
25
|
+
|
26
|
+
it 'destructures the configuration into its components' do
|
27
|
+
allow(Aws::S3::Client).to receive(:new).and_return(s3_client)
|
28
|
+
allow(Capybara::Screenshot::S3Saver).to receive(:new)
|
29
|
+
|
30
|
+
Capybara::Screenshot::S3Saver.new_with_configuration(saver, {
|
31
|
+
s3_client_credentials: s3_client_credentials,
|
32
|
+
bucket_name: bucket_name
|
33
|
+
})
|
34
|
+
|
35
|
+
expect(Aws::S3::Client).to have_received(:new).with(s3_client_credentials)
|
36
|
+
expect(Capybara::Screenshot::S3Saver).to have_received(:new).with(saver, s3_client, bucket_name)
|
37
|
+
end
|
38
|
+
|
39
|
+
it 'defaults the region to us-east-1' do
|
40
|
+
default_region = 'us-east-1'
|
41
|
+
|
42
|
+
allow(Aws::S3::Client).to receive(:new).and_return(s3_client)
|
43
|
+
allow(Capybara::Screenshot::S3Saver).to receive(:new)
|
44
|
+
|
45
|
+
Capybara::Screenshot::S3Saver.new_with_configuration(saver, {
|
46
|
+
s3_client_credentials: s3_client_credentials_using_defaults,
|
47
|
+
bucket_name: bucket_name
|
48
|
+
})
|
49
|
+
|
50
|
+
expect(Aws::S3::Client).to have_received(:new).with(
|
51
|
+
s3_client_credentials.merge(region: default_region)
|
52
|
+
)
|
53
|
+
|
54
|
+
expect(Capybara::Screenshot::S3Saver).to have_received(:new).with(saver, s3_client, bucket_name)
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
describe '#save' do
|
59
|
+
before do
|
60
|
+
allow(saver).to receive(:html_saved?).and_return(false)
|
61
|
+
allow(saver).to receive(:screenshot_saved?).and_return(false)
|
62
|
+
allow(saver).to receive(:save)
|
63
|
+
end
|
64
|
+
|
65
|
+
it 'calls save on the underlying saver' do
|
66
|
+
expect(saver).to receive(:save)
|
67
|
+
|
68
|
+
s3_saver.save
|
69
|
+
end
|
70
|
+
|
71
|
+
it 'uploads the html' do
|
72
|
+
html_path = '/foo/bar.html'
|
73
|
+
expect(saver).to receive(:html_path).and_return(html_path)
|
74
|
+
expect(saver).to receive(:html_saved?).and_return(true)
|
75
|
+
|
76
|
+
html_file = double('html_file')
|
77
|
+
|
78
|
+
expect(File).to receive(:open).with(html_path).and_yield(html_file)
|
79
|
+
|
80
|
+
expect(s3_client).to receive(:put_object).with(
|
81
|
+
bucket: bucket_name,
|
82
|
+
key: 'bar.html',
|
83
|
+
body: html_file
|
84
|
+
)
|
85
|
+
|
86
|
+
s3_saver.save
|
87
|
+
end
|
88
|
+
|
89
|
+
it 'uploads the screenshot' do
|
90
|
+
screenshot_path = '/baz/bim.jpg'
|
91
|
+
expect(saver).to receive(:screenshot_path).and_return(screenshot_path)
|
92
|
+
expect(saver).to receive(:screenshot_saved?).and_return(true)
|
93
|
+
|
94
|
+
screenshot_file = double('screenshot_file')
|
95
|
+
|
96
|
+
expect(File).to receive(:open).with(screenshot_path).and_yield(screenshot_file)
|
97
|
+
|
98
|
+
expect(s3_client).to receive(:put_object).with(
|
99
|
+
bucket: bucket_name,
|
100
|
+
key: 'bim.jpg',
|
101
|
+
body: screenshot_file
|
102
|
+
)
|
103
|
+
|
104
|
+
s3_saver.save
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
108
|
+
# Needed because we cannot depend on Verifying Doubles
|
109
|
+
# in older RSpec versions
|
110
|
+
describe 'an actual saver' do
|
111
|
+
it 'implements the methods needed by the s3 saver' do
|
112
|
+
instance_methods = Capybara::Screenshot::Saver.instance_methods
|
113
|
+
|
114
|
+
expect(instance_methods).to include(:save)
|
115
|
+
expect(instance_methods).to include(:html_saved?)
|
116
|
+
expect(instance_methods).to include(:html_path)
|
117
|
+
expect(instance_methods).to include(:screenshot_saved?)
|
118
|
+
expect(instance_methods).to include(:screenshot_path)
|
119
|
+
end
|
120
|
+
end
|
121
|
+
|
122
|
+
describe 'any other method' do
|
123
|
+
it 'transparently passes through to the saver' do
|
124
|
+
allow(saver).to receive(:foo_bar)
|
125
|
+
|
126
|
+
args = double('args')
|
127
|
+
s3_saver.foo_bar(*args)
|
128
|
+
|
129
|
+
expect(saver).to have_received(:foo_bar).with(*args)
|
130
|
+
end
|
131
|
+
end
|
132
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: capybara-screenshot
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.13
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Matthew O'Riordan
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-05-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: capybara
|
@@ -156,6 +156,20 @@ dependencies:
|
|
156
156
|
- - ">="
|
157
157
|
- !ruby/object:Gem::Version
|
158
158
|
version: '0'
|
159
|
+
- !ruby/object:Gem::Dependency
|
160
|
+
name: aws-sdk
|
161
|
+
requirement: !ruby/object:Gem::Requirement
|
162
|
+
requirements:
|
163
|
+
- - ">="
|
164
|
+
- !ruby/object:Gem::Version
|
165
|
+
version: '0'
|
166
|
+
type: :development
|
167
|
+
prerelease: false
|
168
|
+
version_requirements: !ruby/object:Gem::Requirement
|
169
|
+
requirements:
|
170
|
+
- - ">="
|
171
|
+
- !ruby/object:Gem::Version
|
172
|
+
version: '0'
|
159
173
|
description: When a Cucumber step fails, it is useful to create a screenshot image
|
160
174
|
and HTML file of the current page
|
161
175
|
email:
|
@@ -192,8 +206,10 @@ files:
|
|
192
206
|
- lib/capybara-screenshot/rspec/base_reporter.rb
|
193
207
|
- lib/capybara-screenshot/rspec/html_embed_reporter.rb
|
194
208
|
- lib/capybara-screenshot/rspec/html_link_reporter.rb
|
209
|
+
- lib/capybara-screenshot/rspec/json_reporter.rb
|
195
210
|
- lib/capybara-screenshot/rspec/text_reporter.rb
|
196
211
|
- lib/capybara-screenshot/rspec/textmate_link_reporter.rb
|
212
|
+
- lib/capybara-screenshot/s3_saver.rb
|
197
213
|
- lib/capybara-screenshot/saver.rb
|
198
214
|
- lib/capybara-screenshot/spinach.rb
|
199
215
|
- lib/capybara-screenshot/testunit.rb
|
@@ -220,6 +236,7 @@ files:
|
|
220
236
|
- spec/unit/rspec_reporters/html_link_reporter_spec.rb
|
221
237
|
- spec/unit/rspec_reporters/text_reporter_spec.rb
|
222
238
|
- spec/unit/rspec_reporters/textmate_link_reporter_spec.rb
|
239
|
+
- spec/unit/s3_saver_spec.rb
|
223
240
|
- spec/unit/saver_spec.rb
|
224
241
|
homepage: http://github.com/mattheworiordan/capybara-screenshot
|
225
242
|
licenses:
|
@@ -269,4 +286,5 @@ test_files:
|
|
269
286
|
- spec/unit/rspec_reporters/html_link_reporter_spec.rb
|
270
287
|
- spec/unit/rspec_reporters/text_reporter_spec.rb
|
271
288
|
- spec/unit/rspec_reporters/textmate_link_reporter_spec.rb
|
289
|
+
- spec/unit/s3_saver_spec.rb
|
272
290
|
- spec/unit/saver_spec.rb
|