percy-capybara 4.2.0 → 5.0.0.pre.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.
@@ -0,0 +1 @@
1
+ <html><head><title>I am a page</title></head><body>Snapshot me</body></html>
@@ -0,0 +1,103 @@
1
+ LABEL = PercyCapybara::PERCY_LABEL
2
+
3
+ RSpec.describe PercyCapybara, type: :feature do
4
+ before(:each) do
5
+ WebMock.disable_net_connect!(allow: '127.0.0.1', disallow: 'localhost')
6
+ page.__percy_clear_cache!
7
+ end
8
+
9
+ describe 'snapshot', type: :feature do
10
+ it 'disables when healthcheck version is incorrect' do
11
+ stub_request(:get, "#{PercyCapybara::PERCY_SERVER_ADDRESS}/percy/healthcheck")
12
+ .to_return(status: 200, body: '', headers: {'x-percy-core-version': '0.1.0'})
13
+
14
+ expect { page.percy_snapshot('Name') }
15
+ .to output("#{LABEL} Unsupported Percy CLI version, 0.1.0\n").to_stdout
16
+ end
17
+
18
+ it 'disables when healthcheck version is missing' do
19
+ stub_request(:get, "#{PercyCapybara::PERCY_SERVER_ADDRESS}/percy/healthcheck")
20
+ .to_return(status: 200, body: '', headers: {})
21
+
22
+ expect { page.percy_snapshot('Name') }
23
+ .to output(
24
+ "#{LABEL} You may be using @percy/agent which" \
25
+ ' is no longer supported by this SDK. Please uninstall' \
26
+ ' @percy/agent and install @percy/cli instead.' \
27
+ " https://docs.percy.io/docs/migrating-to-percy-cli\n",
28
+ ).to_stdout
29
+ end
30
+
31
+ it 'disables when healthcheck fails' do
32
+ stub_request(:get, "#{PercyCapybara::PERCY_SERVER_ADDRESS}/percy/healthcheck")
33
+ .to_return(status: 500, body: '', headers: {})
34
+
35
+ expect { page.percy_snapshot('Name') }
36
+ .to output("#{LABEL} Percy is not running, disabling snapshots\n").to_stdout
37
+ end
38
+
39
+ it 'disables when healthcheck fails to connect' do
40
+ stub_request(:get, "#{PercyCapybara::PERCY_SERVER_ADDRESS}/percy/healthcheck")
41
+ .to_raise(StandardError)
42
+
43
+ expect { page.percy_snapshot('Name') }
44
+ .to output("#{LABEL} Percy is not running, disabling snapshots\n").to_stdout
45
+ end
46
+
47
+ it 'throws an error when name is not provided' do
48
+ stub_request(:get, "#{PercyCapybara::PERCY_SERVER_ADDRESS}/percy/healthcheck")
49
+ .to_return(status: 500, body: '', headers: {})
50
+
51
+ expect { page.percy_snapshot }.to raise_error(ArgumentError)
52
+ end
53
+
54
+ it 'logs an error when sending a snapshot fails' do
55
+ stub_request(:get, "#{PercyCapybara::PERCY_SERVER_ADDRESS}/percy/healthcheck")
56
+ .to_return(status: 200, body: '', headers: {'x-percy-core-version': '1.0.0'})
57
+
58
+ stub_request(:get, "#{PercyCapybara::PERCY_SERVER_ADDRESS}/percy/dom.js")
59
+ .to_return(
60
+ status: 200,
61
+ body: 'window.PercyDOM = { serialize: () => document.documentElement.outerHTML };',
62
+ headers: {},
63
+ )
64
+
65
+ stub_request(:post, 'http://localhost:5338/percy/snapshot')
66
+ .to_return(status: 200, body: '', headers: {})
67
+
68
+ expect { page.percy_snapshot('Name') }
69
+ .to output("#{LABEL} Could not take DOM snapshot 'Name'\n").to_stdout
70
+ end
71
+
72
+ it 'sends snapshots to the local server' do
73
+ stub_request(:get, "#{PercyCapybara::PERCY_SERVER_ADDRESS}/percy/healthcheck")
74
+ .to_return(status: 200, body: '', headers: {'x-percy-core-version': '1.0.0'})
75
+
76
+ stub_request(:get, "#{PercyCapybara::PERCY_SERVER_ADDRESS}/percy/dom.js")
77
+ .to_return(
78
+ status: 200,
79
+ body: 'window.PercyDOM = { serialize: () => document.documentElement.outerHTML };',
80
+ headers: {},
81
+ )
82
+
83
+ stub_request(:post, 'http://localhost:5338/percy/snapshot')
84
+ .to_return(status: 200, body: '{"success": "true" }', headers: {})
85
+
86
+ visit 'index.html'
87
+ page.percy_snapshot('Name')
88
+
89
+ expect(WebMock)
90
+ .to have_requested(:post, "#{PercyCapybara::PERCY_SERVER_ADDRESS}/percy/snapshot")
91
+ .with(
92
+ body: {
93
+ name: 'Name',
94
+ url: 'http://127.0.0.1:3003/index.html',
95
+ dom_snapshot:
96
+ "<html><head><title>I am a page</title></head><body>Snapshot me\n</body></html>",
97
+ client_info: "percy-capybara/#{PercyCapybara::VERSION}",
98
+ environment_info: "capybara/#{Capybara::VERSION} ruby/#{RUBY_VERSION}",
99
+ }.to_json,
100
+ ).once
101
+ end
102
+ end
103
+ end
data/spec/spec_helper.rb CHANGED
@@ -1,6 +1,11 @@
1
+ # This must be required & started before any app code (for proper coverage)
2
+ require 'simplecov'
3
+ SimpleCov.start
4
+ SimpleCov.minimum_coverage 100
5
+
1
6
  require 'capybara/rspec'
2
- require 'selenium-webdriver'
3
- require 'percy'
7
+ require 'webmock/rspec'
8
+ require 'percy/capybara'
4
9
 
5
10
  RSpec.configure do |config|
6
11
  config.expect_with :rspec do |expectations|
@@ -28,6 +33,19 @@ RSpec.configure do |config|
28
33
  Kernel.srand config.seed
29
34
 
30
35
  # See https://github.com/teamcapybara/capybara#selecting-the-driver for other options
31
- Capybara.default_driver = :selenium_chrome_headless
32
- Capybara.javascript_driver = :selenium_chrome_headless
36
+ Capybara.default_driver = :selenium_headless
37
+ Capybara.javascript_driver = :selenium_headless
38
+
39
+ # Setup for Capybara to test static files served by Rack
40
+ Capybara.server_port = 3003
41
+ Capybara.server = :puma, { Silent: true }
42
+ Capybara.app = Rack::File.new(File.join(File.dirname(__FILE__), 'fixture'))
33
43
  end
44
+
45
+ ## Add cache clearing methods for tests
46
+ Capybara::Session.class_eval {
47
+ def __percy_clear_cache!
48
+ @percy_dom = nil
49
+ @percy_enabled = nil
50
+ end
51
+ }
metadata CHANGED
@@ -1,99 +1,113 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: percy-capybara
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.2.0
4
+ version: 5.0.0.pre.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Perceptual Inc.
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-10-09 00:00:00.000000000 Z
11
+ date: 2021-05-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: bundler
14
+ name: capybara
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - "~>"
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: '1.7'
19
+ version: '3'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '3'
27
+ - !ruby/object:Gem::Dependency
28
+ name: selenium-webdriver
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: 4.0.0.beta1
20
34
  type: :development
21
35
  prerelease: false
22
36
  version_requirements: !ruby/object:Gem::Requirement
23
37
  requirements:
24
- - - "~>"
38
+ - - ">="
25
39
  - !ruby/object:Gem::Version
26
- version: '1.7'
40
+ version: 4.0.0.beta1
27
41
  - !ruby/object:Gem::Dependency
28
- name: rake
42
+ name: bundler
29
43
  requirement: !ruby/object:Gem::Requirement
30
44
  requirements:
31
- - - "~>"
45
+ - - ">="
32
46
  - !ruby/object:Gem::Version
33
- version: '10.0'
47
+ version: '2.0'
34
48
  type: :development
35
49
  prerelease: false
36
50
  version_requirements: !ruby/object:Gem::Requirement
37
51
  requirements:
38
- - - "~>"
52
+ - - ">="
39
53
  - !ruby/object:Gem::Version
40
- version: '10.0'
54
+ version: '2.0'
41
55
  - !ruby/object:Gem::Dependency
42
- name: rspec
56
+ name: rake
43
57
  requirement: !ruby/object:Gem::Requirement
44
58
  requirements:
45
59
  - - "~>"
46
60
  - !ruby/object:Gem::Version
47
- version: '3.5'
61
+ version: '13.0'
48
62
  type: :development
49
63
  prerelease: false
50
64
  version_requirements: !ruby/object:Gem::Requirement
51
65
  requirements:
52
66
  - - "~>"
53
67
  - !ruby/object:Gem::Version
54
- version: '3.5'
68
+ version: '13.0'
55
69
  - !ruby/object:Gem::Dependency
56
- name: capybara
70
+ name: rspec
57
71
  requirement: !ruby/object:Gem::Requirement
58
72
  requirements:
59
73
  - - "~>"
60
74
  - !ruby/object:Gem::Version
61
- version: '2.4'
75
+ version: '3.5'
62
76
  type: :development
63
77
  prerelease: false
64
78
  version_requirements: !ruby/object:Gem::Requirement
65
79
  requirements:
66
80
  - - "~>"
67
81
  - !ruby/object:Gem::Version
68
- version: '2.4'
82
+ version: '3.5'
69
83
  - !ruby/object:Gem::Dependency
70
- name: selenium-webdriver
84
+ name: capybara
71
85
  requirement: !ruby/object:Gem::Requirement
72
86
  requirements:
73
- - - ">="
87
+ - - "~>"
74
88
  - !ruby/object:Gem::Version
75
- version: '0'
89
+ version: '3.31'
76
90
  type: :development
77
91
  prerelease: false
78
92
  version_requirements: !ruby/object:Gem::Requirement
79
93
  requirements:
80
- - - ">="
94
+ - - "~>"
81
95
  - !ruby/object:Gem::Version
82
- version: '0'
96
+ version: '3.31'
83
97
  - !ruby/object:Gem::Dependency
84
98
  name: percy-style
85
99
  requirement: !ruby/object:Gem::Requirement
86
100
  requirements:
87
- - - ">="
101
+ - - "~>"
88
102
  - !ruby/object:Gem::Version
89
- version: '0'
103
+ version: 0.7.0
90
104
  type: :development
91
105
  prerelease: false
92
106
  version_requirements: !ruby/object:Gem::Requirement
93
107
  requirements:
94
- - - ">="
108
+ - - "~>"
95
109
  - !ruby/object:Gem::Version
96
- version: '0'
110
+ version: 0.7.0
97
111
  description: ''
98
112
  email:
99
113
  - team@percy.io
@@ -101,28 +115,28 @@ executables: []
101
115
  extensions: []
102
116
  extra_rdoc_files: []
103
117
  files:
104
- - ".circleci/config.yml"
118
+ - ".github/dependabot.yml"
119
+ - ".github/release-drafter.yml"
120
+ - ".github/workflows/changelog.yml"
121
+ - ".github/workflows/lint.yml"
122
+ - ".github/workflows/release.yml"
123
+ - ".github/workflows/test.yml"
105
124
  - ".gitignore"
106
125
  - ".rspec"
107
126
  - ".rubocop.yml"
108
127
  - ".yardopts"
109
- - CHANGELOG.md
110
- - DEVELOPING.md
111
128
  - Gemfile
112
129
  - Guardfile
113
130
  - LICENSE
131
+ - Makefile
114
132
  - README.md
115
- - RELEASING.md
116
133
  - Rakefile
117
- - lib/environment.rb
118
- - lib/percy.rb
119
- - lib/version.rb
120
- - package.json
134
+ - lib/percy/capybara.rb
135
+ - lib/percy/version.rb
121
136
  - percy-capybara.gemspec
122
- - spec/lib/percy/environment_spec.rb
123
- - spec/lib/percy/percy_spec.rb
137
+ - spec/fixture/index.html
138
+ - spec/lib/percy/percy_capybara_spec.rb
124
139
  - spec/spec_helper.rb
125
- - yarn.lock
126
140
  homepage: ''
127
141
  licenses:
128
142
  - MIT
@@ -137,18 +151,18 @@ required_ruby_version: !ruby/object:Gem::Requirement
137
151
  requirements:
138
152
  - - ">="
139
153
  - !ruby/object:Gem::Version
140
- version: '0'
154
+ version: 2.3.0
141
155
  required_rubygems_version: !ruby/object:Gem::Requirement
142
156
  requirements:
143
- - - ">="
157
+ - - ">"
144
158
  - !ruby/object:Gem::Version
145
- version: '0'
159
+ version: 1.3.1
146
160
  requirements: []
147
- rubygems_version: 3.0.6
161
+ rubygems_version: 3.0.3
148
162
  signing_key:
149
163
  specification_version: 4
150
164
  summary: Percy
151
165
  test_files:
152
- - spec/lib/percy/environment_spec.rb
153
- - spec/lib/percy/percy_spec.rb
166
+ - spec/fixture/index.html
167
+ - spec/lib/percy/percy_capybara_spec.rb
154
168
  - spec/spec_helper.rb
data/.circleci/config.yml DELETED
@@ -1,39 +0,0 @@
1
- version: 2.1
2
-
3
- default_steps: &default_steps
4
- steps:
5
- - checkout
6
- - run: gem update --system
7
- # We need this specific version of bundler for our Gemfile. (v2 doesn't work)
8
- - run: gem install bundler --version '1.7'
9
- - run: yarn
10
- - run: bundle install
11
- - run: yarn percy exec -- bundle exec rspec
12
- - run: bundle exec rubocop -D
13
-
14
- jobs:
15
- ruby_latest_with_percy:
16
- # This is the one environment where we'll capture and upload snapshots in CI.
17
- docker:
18
- - image: circleci/ruby:latest-node-browsers
19
- <<: *default_steps
20
- ruby_25:
21
- docker:
22
- - image: circleci/ruby:2.5-node-browsers
23
- environment:
24
- PERCY_ENABLE: 0
25
- <<: *default_steps
26
- ruby_24:
27
- docker:
28
- - image: circleci/ruby:2.4-node-browsers
29
- environment:
30
- PERCY_ENABLE: 0
31
- <<: *default_steps
32
-
33
- workflows:
34
- version: 2
35
- test:
36
- jobs:
37
- - ruby_latest_with_percy
38
- - ruby_25
39
- - ruby_24
data/CHANGELOG.md DELETED
@@ -1 +0,0 @@
1
- See [releases](https://github.com/percy/percy-capybara/releases).
data/DEVELOPING.md DELETED
@@ -1,26 +0,0 @@
1
- # Developing percy-capybara
2
-
3
- You'll need:
4
- * [Ruby](https://www.ruby-lang.org)
5
- * [Bundler](https://bundler.io/)
6
- * [npm](https://www.npmjs.com/), to manage our dependency on [`@percy/agent`](https://www.npmjs.com/package/@percy/agent)
7
-
8
- To install dependencies:
9
- ```bash
10
- $ bundle install
11
- $ npm install
12
- ```
13
-
14
- To run our test suite and create snapshots:
15
- ```bash
16
- $ bundle exec rake snapshots
17
- ```
18
- (You'll need a `PERCY_TOKEN` in your environment for snapshots to be uploaded to Percy for diffing.)
19
-
20
- If you want to run the test suite without uploading snapshots, you can run:
21
- ```bash
22
- $ bundle exec rspec
23
- ```
24
-
25
- For instructions on releasing, and on updating the vendored version of `percy-agent.js` in this repository, please refer to the [RELEASING](RELEASING.md) doc.
26
-
data/RELEASING.md DELETED
@@ -1,23 +0,0 @@
1
- # Releasing
2
-
3
- 1. `git checkout master`
4
- 1. `git pull origin master`
5
- 1. `git checkout -b X.X.X`
6
- 1. Update version.rb file accordingly.
7
- 1. Commit and push the version update
8
- 1. Tag the release: `git tag vX.X.X`
9
- 1. Push changes: `git push --tags`
10
- 1. Ensure tests have passed on that tag
11
- 1. Open up a pull request titled with the new version number
12
- 1. Merge approved pull request
13
- 1. Draft and publish a [new release on github](https://github.com/percy/percy-capybara/releases)
14
- 1. Build and publish:
15
-
16
- ```bash
17
- bundle exec rake build
18
- gem push pkg/percy-capybara-X.XX.XX.gem
19
- ```
20
-
21
- * Announce the new release,
22
- making sure to say "thank you" to the contributors
23
- who helped shape this version!
data/lib/environment.rb DELETED
@@ -1,33 +0,0 @@
1
- require_relative './version'
2
-
3
- module Percy
4
- def self.client_info
5
- "percy-capybara/#{VERSION}"
6
- end
7
-
8
- def self.environment_info
9
- env_strings = [
10
- "rails/#{self._rails_version}",
11
- "sinatra/#{self._sinatra_version}",
12
- "ember-cli-rails/#{self._ember_cli_rails_version}",
13
- ].reject do |info|
14
- info =~ /\/$/ # reject if version is empty
15
- end
16
- env_strings.empty? ? 'unknown' : env_strings.join('; ')
17
- end
18
-
19
- def self._ember_cli_rails_version
20
- return unless defined? EmberCli
21
-
22
- require 'ember_cli/version'
23
- EmberCli::VERSION
24
- end
25
-
26
- def self._rails_version
27
- Rails.version if defined? Rails
28
- end
29
-
30
- def self._sinatra_version
31
- Sinatra::VERSION if defined? Sinatra
32
- end
33
- end