percy-capybara 1.2.0 → 2.0.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 700625bc07e0be50c30a6e9838280e5b642395dc
4
- data.tar.gz: f56557aaa8909e676cfbd638655ea506bcd99867
3
+ metadata.gz: 5c84f5ed6c72de98416d621dfd3ab46867ea78d2
4
+ data.tar.gz: 7977a4ed7022626bbdb14ca3323b6def95c5e9d8
5
5
  SHA512:
6
- metadata.gz: ee826f8bab3a6f19233b7a85acade3509e62cf65fccfb82c21332eca520908b0579a3c03e099202cfeea0a700e7d21e001a2b0cdc70aef8efce8c10292dcf331
7
- data.tar.gz: 340ddc44575e7bc6ceaed558494b94cef8e8cf2a4c7bf3e5e0499fe6d77047821d4cc25b91b8c7a0c433ebf0a729e19f57baef951fd2ad28d13fdd433209646b
6
+ metadata.gz: 3958fb07643023624bd6e38a6541b806e80355c749245b5c8c4d0b76944b9c8e66985428ad80e386224da8886f68c9cd2a18fa107a7faf354e4771422a92cd4f
7
+ data.tar.gz: 6ac2f13f3775fc18fe1289ce982fb1758e774b4cc5522161e40f4faf82f493704c4e2fe4b2435c51f7aac7051f93ddf7cb633252a98b33ebea5271e3a9be8b48
@@ -1,7 +1,11 @@
1
1
  language: ruby
2
+ sudo: false
3
+ cache: bundler
2
4
  rvm:
3
5
  - 1.9.3
4
6
  - 2.1.1
5
7
  - 2.2.2
6
8
  - ruby-head
7
- script: xvfb-run rspec
9
+ before_install:
10
+ - gem update bundler
11
+ script: xvfb-run bundle exec rspec
@@ -42,8 +42,9 @@ module Percy
42
42
  raise ArgumentError.new('block is requried') if !block_given?
43
43
  begin
44
44
  block.call
45
- rescue Percy::Client::HttpError,
46
- Percy::Client::ConnectionFailed,
45
+ rescue Percy::Client::ServerError, # Rescue server errors.
46
+ Percy::Client::PaymentRequiredError, # Rescue quota exceeded errors.
47
+ Percy::Client::ConnectionFailed, # Rescue some networking errors.
47
48
  Percy::Client::TimeoutError => e
48
49
  Percy.logger.error(e)
49
50
  @enabled = false
@@ -1,10 +1,4 @@
1
- require 'set'
2
- require 'faraday'
3
- require 'httpclient'
4
- require 'digest'
5
- require 'uri'
6
1
  require 'time'
7
- require 'pathname'
8
2
 
9
3
  module Percy
10
4
  module Capybara
@@ -21,31 +15,10 @@ module Percy
21
15
  return if !enabled? # Silently skip if the client is disabled.
22
16
 
23
17
  name = options[:name]
18
+ widths = options[:widths]
24
19
  loader = initialize_loader(page: page)
25
20
 
26
21
  Percy.logger.debug { "Snapshot started (name: #{name.inspect})" }
27
-
28
- # If this is the first snapshot, create the build and upload build resources.
29
- # DEPRECATED: this flow is for the pre-parallel world.
30
- if !build_initialized?
31
- Percy.logger.warn do
32
- "DEPRECATED: percy-capybara will remove implicitly created builds. You should " +
33
- "update your usage to call initialize_build explicitly at the start of a test " +
34
- "suite, or to use the Percy RSpec setup to do it for you."
35
- end
36
-
37
- start = Time.now
38
- build_resources = loader.build_resources
39
- if Percy.config.debug
40
- build_resources.each do |build_resource|
41
- Percy.logger.debug { "Build resource: #{build_resource.resource_url}" }
42
- end
43
- end
44
- Percy.logger.debug { "All build resources loaded (#{Time.now - start}s)" }
45
- initialize_build(resources: build_resources)
46
- _upload_missing_build_resources(build_resources)
47
- end
48
-
49
22
  start = Time.now
50
23
  current_build_id = current_build['data']['id']
51
24
  resources = loader.snapshot_resources
@@ -59,7 +32,12 @@ module Percy
59
32
  # Create the snapshot and upload any missing snapshot resources.
60
33
  start = Time.now
61
34
  rescue_connection_failures do
62
- snapshot = client.create_snapshot(current_build_id, resources, name: name)
35
+ snapshot = client.create_snapshot(
36
+ current_build_id,
37
+ resources,
38
+ name: name,
39
+ widths: widths,
40
+ )
63
41
  snapshot['data']['relationships']['missing-resources']['data'].each do |missing_resource|
64
42
  sha = missing_resource['id']
65
43
  client.upload_resource(current_build_id, resource_map[sha].content)
@@ -79,7 +79,7 @@ module Percy
79
79
  end
80
80
 
81
81
  def _rails
82
- return Rails if defined?(Rails)
82
+ Rails if defined?(Rails)
83
83
  end
84
84
 
85
85
  def _asset_logical_paths
@@ -1,5 +1,5 @@
1
1
  module Percy
2
2
  module Capybara
3
- VERSION = '1.2.0'
3
+ VERSION = '2.0.0'
4
4
  end
5
5
  end
@@ -18,7 +18,7 @@ Gem::Specification.new do |spec|
18
18
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
19
  spec.require_paths = ['lib']
20
20
 
21
- spec.add_dependency 'percy-client', '>= 1.3.0'
21
+ spec.add_dependency 'percy-client', '~> 1.4'
22
22
 
23
23
  spec.add_development_dependency 'bundler', '~> 1.7'
24
24
  spec.add_development_dependency 'rake', '~> 10.0'
@@ -27,6 +27,7 @@ Gem::Specification.new do |spec|
27
27
  spec.add_development_dependency 'capybara-webkit', '>= 1.6'
28
28
  spec.add_development_dependency 'selenium-webdriver'
29
29
  spec.add_development_dependency 'webmock', '~> 1'
30
+ spec.add_development_dependency 'mime-types', '< 3' # For Ruby 1.9 testing support.
30
31
  spec.add_development_dependency 'faraday', '>= 0.8'
31
32
  spec.add_development_dependency 'sprockets', '>= 3.2.0'
32
33
  end
@@ -9,35 +9,23 @@ RSpec.describe Percy::Capybara::Client::Snapshots, type: :feature do
9
9
  describe '#snapshot', type: :feature, js: true do
10
10
  context 'simple page with no resources' do
11
11
  before(:each) { setup_sprockets(capybara_client) }
12
-
13
- it 'creates a snapshot and uploads missing build resources and missing snapshot resources' do
14
- visit '/'
15
- loader = capybara_client.initialize_loader(page: page)
16
-
17
- build_resource_sha = loader.build_resources.first.sha
18
- snapshot_resource_sha = loader.snapshot_resources.first.sha
19
-
20
- mock_response = {
12
+ let(:loader) { capybara_client.initialize_loader(page: page) }
13
+ let(:build_resource_sha) { loader.build_resources.first.sha }
14
+ let(:snapshot_resource_sha) { loader.snapshot_resources.first.sha }
15
+ let(:mock_build_response) do
16
+ {
21
17
  'data' => {
22
18
  'id' => '123',
23
19
  'type' => 'builds',
24
20
  'relationships' => {
25
21
  'self' => "/api/v1/snapshots/123",
26
- 'missing-resources' => {
27
- 'data' => [
28
- {
29
- 'type' => 'resources',
30
- 'id' => build_resource_sha,
31
- },
32
- ],
33
- },
22
+ 'missing-resources' => {},
34
23
  },
35
24
  },
36
25
  }
37
- stub_request(:post, 'https://percy.io/api/v1/repos/percy/percy-capybara/builds/')
38
- .to_return(status: 201, body: mock_response.to_json)
39
-
40
- mock_response = {
26
+ end
27
+ let(:mock_snapshot_response) do
28
+ {
41
29
  'data' => {
42
30
  'id' => '256',
43
31
  'type' => 'snapshots',
@@ -54,31 +42,37 @@ RSpec.describe Percy::Capybara::Client::Snapshots, type: :feature do
54
42
  },
55
43
  },
56
44
  }
45
+ end
46
+ before :each do
47
+ visit '/'
48
+ loader # Force evaluation now.
49
+ stub_request(:post, 'https://percy.io/api/v1/repos/percy/percy-capybara/builds/')
50
+ .to_return(status: 201, body: mock_build_response.to_json)
57
51
  stub_request(:post, 'https://percy.io/api/v1/builds/123/snapshots/')
58
- .to_return(status: 201, body: mock_response.to_json)
59
- build_resource_stub = stub_request(:post, "https://percy.io/api/v1/builds/123/resources/")
60
- .with(body: /#{build_resource_sha}/)
61
- .to_return(status: 201, body: {success: true}.to_json)
62
- stub_request(:post, "https://percy.io/api/v1/builds/123/resources/")
63
- .with(body: /#{snapshot_resource_sha}/)
64
- .to_return(status: 201, body: {success: true}.to_json)
52
+ .to_return(status: 201, body: mock_snapshot_response.to_json)
53
+ stub_request(:post, "https://percy.io/api/v1/builds/123/resources/")
54
+ .with(body: /#{snapshot_resource_sha}/)
55
+ .to_return(status: 201, body: {success: true}.to_json)
65
56
  stub_request(:post, "https://percy.io/api/v1/snapshots/256/finalize")
66
- .to_return(status: 200, body: '{"success":true}')
57
+ .to_return(status: 200, body: {success: true}.to_json)
58
+ capybara_client.initialize_build
59
+ end
67
60
 
68
- expect(capybara_client.build_initialized?).to eq(false)
61
+ it 'creates a snapshot' do
62
+ expect(capybara_client.client).to receive(:create_snapshot)
63
+ .with(anything, anything, {name: nil, widths: nil})
64
+ .and_call_original
69
65
  expect(capybara_client.snapshot(page)).to eq(true)
70
- expect(capybara_client.build_initialized?).to eq(true)
66
+ end
67
+ it 'passes through name and width options to the percy client if given' do
68
+ expect(capybara_client.client).to receive(:create_snapshot)
69
+ .with(anything, anything, {name: 'foo', widths: [320, 1024]})
70
+ .and_call_original
71
71
 
72
- # Second time, no build resources are uploaded.
73
- remove_request_stub(build_resource_stub)
74
- expect(capybara_client.snapshot(page)).to eq(true)
72
+ expect(capybara_client.snapshot(page, name: 'foo', widths: [320, 1024])).to eq(true)
73
+ expect(capybara_client.failed?).to eq(false)
75
74
  end
76
75
  it 'safely handles connection errors' do
77
- visit '/'
78
- build_data = {'data' => {'id' => 123}}
79
- expect(capybara_client.client).to receive(:create_build).and_return(build_data)
80
- capybara_client.initialize_build
81
-
82
76
  expect(capybara_client.client).to receive(:create_snapshot)
83
77
  .and_raise(Percy::Client::ConnectionFailed)
84
78
  expect(capybara_client.snapshot(page)).to eq(nil)
@@ -43,9 +43,17 @@ RSpec.describe Percy::Capybara::Client do
43
43
  expect(capybara_client.enabled?).to eq(true)
44
44
  expect(capybara_client.failed?).to eq(false)
45
45
  end
46
- it 'makes block safe from HttpError' do
46
+ it 'makes block safe from server errors' do
47
47
  result = capybara_client.rescue_connection_failures do
48
- raise Percy::Client::HttpError.new(500, 'POST', '', '')
48
+ raise Percy::Client::ServerError.new(500, 'POST', '', '')
49
+ end
50
+ expect(result).to eq(nil)
51
+ expect(capybara_client.enabled?).to eq(false)
52
+ expect(capybara_client.failed?).to eq(true)
53
+ end
54
+ it 'makes block safe from quota exceeded errors' do
55
+ result = capybara_client.rescue_connection_failures do
56
+ raise Percy::Client::PaymentRequiredError.new(409, 'POST', '', '')
49
57
  end
50
58
  expect(result).to eq(nil)
51
59
  expect(capybara_client.enabled?).to eq(false)
metadata CHANGED
@@ -1,29 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: percy-capybara
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.0
4
+ version: 2.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Perceptual Inc.
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-02-10 00:00:00.000000000 Z
11
+ date: 2016-02-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: percy-client
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ">="
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 1.3.0
19
+ version: '1.4'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ">="
24
+ - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: 1.3.0
26
+ version: '1.4'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: bundler
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -122,6 +122,20 @@ dependencies:
122
122
  - - "~>"
123
123
  - !ruby/object:Gem::Version
124
124
  version: '1'
125
+ - !ruby/object:Gem::Dependency
126
+ name: mime-types
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - "<"
130
+ - !ruby/object:Gem::Version
131
+ version: '3'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - "<"
137
+ - !ruby/object:Gem::Version
138
+ version: '3'
125
139
  - !ruby/object:Gem::Dependency
126
140
  name: faraday
127
141
  requirement: !ruby/object:Gem::Requirement
@@ -227,7 +241,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
227
241
  version: '0'
228
242
  requirements: []
229
243
  rubyforge_project:
230
- rubygems_version: 2.4.5
244
+ rubygems_version: 2.2.2
231
245
  signing_key:
232
246
  specification_version: 4
233
247
  summary: Percy::Capybara
@@ -262,4 +276,3 @@ test_files:
262
276
  - spec/lib/percy/capybara_spec.rb
263
277
  - spec/spec_helper.rb
264
278
  - spec/support/test_helpers.rb
265
- has_rdoc: