percy-capybara 4.3.2 → 5.0.0.pre.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 2857e24e4b2bb5152dbfa2fa8313e1a32d9162cf4b71d04deb469d064da56c66
4
- data.tar.gz: a4877b279d72980a454e1fff97e050755335c73de7ae8c6b3fbd9bce822c9f02
3
+ metadata.gz: ad47828506156e4e07dfc481315f03b6754e56754728dc781d7d112e4c436429
4
+ data.tar.gz: 6a44e3220c49e4feb480d91bcdd3a5f4f65564ad75231b9455b377f7a69f7b09
5
5
  SHA512:
6
- metadata.gz: 4d851ffc11d4abafbd8bd8974cb25a3d39aac3b9bbb1d05a814530c351425b7c0b6c7851e97bbb9e7742e4b91907facad0d5eeaa7d78a535a3213761b48b5beb
7
- data.tar.gz: 971d7643e3e8100d8ba1229c3db968134e8ccde57ad70c08b7af9d39eea72ffb2209a00f513c0c818998213aa64b0b78b3b6bd8aaa74c32c311455ee8b8c57ea
6
+ metadata.gz: a6b98bb4aabe555640e2ad075507e413edc94259396a6d7523531097e0678949a1190dc5e9d5bce963aa0499cfd76b88f07d8d4da359faa52b1c1a54008b0a64
7
+ data.tar.gz: e97a00541379a162dd5da3314b62a429f79d1bfeaade1b12f689cf8479152f82202c97f86a30a23e205541a33305969686dacbb994ba970690d36c8c09e7b742
data/LICENSE CHANGED
@@ -1,4 +1,4 @@
1
- Copyright (c) 2015 Perceptual Inc.
1
+ Copyright (c) 2021 Perceptual Inc.
2
2
 
3
3
  The MIT License (MIT)
4
4
 
data/README.md CHANGED
@@ -1,6 +1,119 @@
1
- # Percy Capybara
1
+ # percy-capybara
2
+ [![Gem Version](https://badge.fury.io/rb/percy-capybara.svg)](https://badge.fury.io/rb/percy-capybara)
3
+ ![Test](https://github.com/percy/percy-capybara/workflows/Test/badge.svg)
2
4
 
3
- [![CircleCI](https://circleci.com/gh/percy/percy-capybara.svg?style=svg)](https://circleci.com/gh/percy/percy-capybara)
4
- [![Gem Version](https://badge.fury.io/rb/percy-capybara.svg)](http://badge.fury.io/rb/percy-capybara)
5
+ [Percy](https://percy.io) visual testing for Ruby Selenium.
5
6
 
6
- #### Docs here: [https://docs.percy.io/docs/capybara](https://docs.percy.io/docs/capybara)
7
+ ## Installation
8
+
9
+ npm install `@percy/cli`:
10
+
11
+ ```sh-session
12
+ $ npm install --save-dev @percy/cli
13
+ ```
14
+
15
+ gem install `percy-capybara` package:
16
+
17
+ ```ssh-session
18
+ $ gem install percy-capybara
19
+ ```
20
+
21
+ ## Usage
22
+
23
+ In your test setup file, require `percy/capybara`. For example if you're using
24
+ rspec, you would add the following to your `spec_helper.rb` file:
25
+
26
+ ``` ruby
27
+ require 'percy/capybara'
28
+ ```
29
+
30
+ Now you can use `page.percy_snapshot` to capture snapshots.
31
+
32
+ > Note: you may need to add `js: true` to your specs, depending on your driver setup
33
+
34
+ ```ruby
35
+ describe 'my feature, type: :feature do
36
+ it 'renders the page' do
37
+ visit 'https://example.com'
38
+ page.percy_snapshot('Capybara snapshot')
39
+ end
40
+ end
41
+ ```
42
+
43
+ Running the test above normally will result in the following log:
44
+
45
+ ```sh-session
46
+ [percy] Percy is not running, disabling snapshots
47
+ ```
48
+
49
+ When running with [`percy
50
+ exec`](https://github.com/percy/cli/tree/master/packages/cli-exec#percy-exec), and your project's
51
+ `PERCY_TOKEN`, a new Percy build will be created and snapshots will be uploaded to your project.
52
+
53
+ ```sh-session
54
+ $ export PERCY_TOKEN=[your-project-token]
55
+ $ percy exec -- [test command]
56
+ [percy] Percy has started!
57
+ [percy] Created build #1: https://percy.io/[your-project]
58
+ [percy] Snapshot taken "Capybara example"
59
+ [percy] Stopping percy...
60
+ [percy] Finalized build #1: https://percy.io/[your-project]
61
+ [percy] Done!
62
+ ```
63
+
64
+ ## Configuration
65
+
66
+ `page.snapshot(name[, options])`
67
+
68
+ - `name` (**required**) - The snapshot name; must be unique to each snapshot
69
+ - `options` - [See per-snapshot configuration options](https://docs.percy.io/docs/cli-configuration#per-snapshot-configuration)
70
+
71
+ ## Upgrading
72
+
73
+ ### Manually
74
+
75
+ #### Require change
76
+
77
+ The name of the require has changed from `require 'percy'` to `require
78
+ 'percy/capybara'`. This is to avoid conflict with our [Ruby Selenium SDK's](https://github.com/percy/percy-selenium-ruby)
79
+ require statement.
80
+
81
+ #### API change
82
+
83
+ The previous version of this SDK had the following function signature:
84
+
85
+ ``` ruby
86
+ Percy.snapshot(driver, name, options)
87
+ ```
88
+
89
+ v5.x of this SDK has a significant change to the API. There no longer is a stand
90
+ alone module to call and you no longer need to pass the page/driver. It's
91
+ available on the current Capybara session (`page`):
92
+
93
+ ``` ruby
94
+ page.percy_snapshot(name, options)
95
+ ```
96
+
97
+ If you were using this SDK outside of Capybara, you'll likely find the [Ruby
98
+ Selenium SDK a better fit](https://github.com/percy/percy-selenium-ruby)
99
+
100
+ #### Installing `@percy/cli` & removing `@percy/agent`
101
+
102
+ If you're coming from a 4.x version of this package, make sure to install `@percy/cli` after
103
+ upgrading to retain any existing scripts that reference the Percy CLI
104
+ command. You will also want to uninstall `@percy/agent`, as it's been replaced
105
+ by `@percy/cli`.
106
+
107
+ ```sh-session
108
+ $ npm uninstall @percy/agent
109
+ $ npm install --save-dev @percy/cli
110
+ ```
111
+
112
+ #### Migrating config
113
+
114
+ If you have a previous Percy configuration file, migrate it to the newest version with the
115
+ [`config:migrate`](https://github.com/percy/cli/tree/master/packages/cli-config#percy-configmigrate-filepath-output) command:
116
+
117
+ ```sh-session
118
+ $ percy config:migrate
119
+ ```
@@ -0,0 +1,112 @@
1
+ require 'net/http'
2
+ require 'uri'
3
+ require 'capybara/dsl'
4
+ require_relative './version'
5
+
6
+ module PercyCapybara
7
+ CLIENT_INFO = "percy-capybara/#{VERSION}".freeze
8
+ ENV_INFO = "capybara/#{Capybara::VERSION} ruby/#{RUBY_VERSION}".freeze
9
+
10
+ PERCY_DEBUG = ENV['PERCY_LOGLEVEL'] == 'debug'
11
+ PERCY_SERVER_ADDRESS = ENV['PERCY_SERVER_ADDRESS'] || 'http://localhost:5338'
12
+ PERCY_LABEL = "[\u001b[35m" + (PERCY_DEBUG ? 'percy:capybara' : 'percy') + "\u001b[39m]"
13
+
14
+ private_constant :CLIENT_INFO
15
+ private_constant :ENV_INFO
16
+
17
+ # Take a DOM snapshot and post it to the snapshot endpoint
18
+ def percy_snapshot(name, options = {})
19
+ return unless percy_enabled?
20
+
21
+ page = Capybara.current_session
22
+
23
+ begin
24
+ page.evaluate_script(fetch_percy_dom)
25
+ dom_snapshot = page
26
+ .evaluate_script("(function() { return PercyDOM.serialize(#{options.to_json}) })()")
27
+
28
+ response = fetch('percy/snapshot',
29
+ name: name,
30
+ url: page.current_url,
31
+ dom_snapshot: dom_snapshot,
32
+ client_info: CLIENT_INFO,
33
+ environment_info: ENV_INFO,)
34
+
35
+ unless response.body.to_json['success']
36
+ raise StandardError, data['error']
37
+ end
38
+ rescue StandardError => e
39
+ log("Could not take DOM snapshot '#{name}'")
40
+
41
+ if PERCY_DEBUG then log(e) end
42
+ end
43
+ end
44
+
45
+ # Determine if the Percy server is running, caching the result so it is only checked once
46
+ private def percy_enabled?
47
+ return @percy_enabled unless @percy_enabled.nil?
48
+
49
+ begin
50
+ response = fetch('percy/healthcheck')
51
+ version = response['x-percy-core-version']
52
+
53
+ if version.nil?
54
+ log('You may be using @percy/agent ' \
55
+ 'which is no longer supported by this SDK. ' \
56
+ 'Please uninstall @percy/agent and install @percy/cli instead. ' \
57
+ 'https://docs.percy.io/docs/migrating-to-percy-cli')
58
+ @percy_enabled = false
59
+ return false
60
+ end
61
+
62
+ if version.split('.')[0] != '1'
63
+ log("Unsupported Percy CLI version, #{version}")
64
+ @percy_enabled = false
65
+ return false
66
+ end
67
+
68
+ @percy_enabled = true
69
+ true
70
+ rescue StandardError => e
71
+ log('Percy is not running, disabling snapshots')
72
+
73
+ if PERCY_DEBUG then log(e) end
74
+ @percy_enabled = false
75
+ false
76
+ end
77
+ end
78
+
79
+ # Fetch the @percy/dom script, caching the result so it is only fetched once
80
+ private def fetch_percy_dom
81
+ return @percy_dom unless @percy_dom.nil?
82
+
83
+ response = fetch('percy/dom.js')
84
+ @percy_dom = response.body
85
+ end
86
+
87
+ private def log(msg)
88
+ puts "#{PERCY_LABEL} #{msg}"
89
+ end
90
+
91
+ # Make an HTTP request (GET,POST) using Ruby's Net::HTTP. If `data` is present,
92
+ # `fetch` will POST as JSON.
93
+ private def fetch(url, data = nil)
94
+ uri = URI("#{PERCY_SERVER_ADDRESS}/#{url}")
95
+
96
+ response = if data
97
+ Net::HTTP.post(uri, data.to_json)
98
+ else
99
+ Net::HTTP.get_response(uri)
100
+ end
101
+
102
+ unless response.is_a? Net::HTTPSuccess
103
+ raise StandardError, "Failed with HTTP error code: #{response.code}"
104
+ end
105
+
106
+ response
107
+ end
108
+ end
109
+
110
+ # Add the `percy_snapshot` method to the the Capybara session class
111
+ # `page.percy_snapshot('name', { options })`
112
+ Capybara::Session.class_eval { include PercyCapybara }
@@ -0,0 +1,3 @@
1
+ module PercyCapybara
2
+ VERSION = '5.0.0.pre.4'.freeze
3
+ end
metadata CHANGED
@@ -1,15 +1,43 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: percy-capybara
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.3.2
4
+ version: 5.0.0.pre.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Perceptual Inc.
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-09-02 00:00:00.000000000 Z
11
+ date: 2021-06-09 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: capybara
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
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
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: 4.0.0.beta1
13
41
  - !ruby/object:Gem::Dependency
14
42
  name: bundler
15
43
  requirement: !ruby/object:Gem::Requirement
@@ -66,20 +94,6 @@ dependencies:
66
94
  - - "~>"
67
95
  - !ruby/object:Gem::Version
68
96
  version: '3.31'
69
- - !ruby/object:Gem::Dependency
70
- name: selenium-webdriver
71
- requirement: !ruby/object:Gem::Requirement
72
- requirements:
73
- - - ">="
74
- - !ruby/object:Gem::Version
75
- version: '0'
76
- type: :development
77
- prerelease: false
78
- version_requirements: !ruby/object:Gem::Requirement
79
- requirements:
80
- - - ">="
81
- - !ruby/object:Gem::Version
82
- version: '0'
83
97
  - !ruby/object:Gem::Dependency
84
98
  name: percy-style
85
99
  requirement: !ruby/object:Gem::Requirement
@@ -101,28 +115,10 @@ executables: []
101
115
  extensions: []
102
116
  extra_rdoc_files: []
103
117
  files:
104
- - ".circleci/config.yml"
105
- - ".gitignore"
106
- - ".rspec"
107
- - ".rubocop.yml"
108
- - ".yardopts"
109
- - CHANGELOG.md
110
- - DEVELOPING.md
111
- - Gemfile
112
- - Guardfile
113
118
  - LICENSE
114
119
  - README.md
115
- - RELEASING.md
116
- - Rakefile
117
- - lib/environment.rb
118
- - lib/percy.rb
119
- - lib/version.rb
120
- - package.json
121
- - percy-capybara.gemspec
122
- - spec/lib/percy/environment_spec.rb
123
- - spec/lib/percy/percy_spec.rb
124
- - spec/spec_helper.rb
125
- - yarn.lock
120
+ - lib/percy/capybara.rb
121
+ - lib/percy/version.rb
126
122
  homepage: ''
127
123
  licenses:
128
124
  - MIT
@@ -137,18 +133,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
137
133
  requirements:
138
134
  - - ">="
139
135
  - !ruby/object:Gem::Version
140
- version: '0'
136
+ version: 2.3.0
141
137
  required_rubygems_version: !ruby/object:Gem::Requirement
142
138
  requirements:
143
- - - ">="
139
+ - - ">"
144
140
  - !ruby/object:Gem::Version
145
- version: '0'
141
+ version: 1.3.1
146
142
  requirements: []
147
- rubygems_version: 3.1.4
143
+ rubygems_version: 3.0.3
148
144
  signing_key:
149
145
  specification_version: 4
150
- summary: Percy
151
- test_files:
152
- - spec/lib/percy/environment_spec.rb
153
- - spec/lib/percy/percy_spec.rb
154
- - spec/spec_helper.rb
146
+ summary: Percy visual testing for Capybara
147
+ test_files: []
data/.circleci/config.yml DELETED
@@ -1,38 +0,0 @@
1
- version: 2.1
2
-
3
- default_steps: &default_steps
4
- steps:
5
- - checkout
6
- - run: sudo gem update --system
7
- - run: ruby -v
8
- - run: yarn
9
- - run: bundle install
10
- - run: yarn percy exec -- bundle exec rspec
11
- - run: bundle exec rubocop -D
12
-
13
- jobs:
14
- ruby_latest_with_percy:
15
- # This is the one environment where we'll capture and upload snapshots in CI.
16
- docker:
17
- - image: circleci/ruby:latest-node-browsers
18
- <<: *default_steps
19
- ruby_25:
20
- docker:
21
- - image: circleci/ruby:2.5-node-browsers
22
- environment:
23
- PERCY_ENABLE: 0
24
- <<: *default_steps
25
- ruby_24:
26
- docker:
27
- - image: circleci/ruby:2.4-node-browsers
28
- environment:
29
- PERCY_ENABLE: 0
30
- <<: *default_steps
31
-
32
- workflows:
33
- version: 2
34
- test:
35
- jobs:
36
- - ruby_latest_with_percy
37
- - ruby_25
38
- - ruby_24
data/.gitignore DELETED
@@ -1,17 +0,0 @@
1
- /.bundle/
2
- /.yardoc
3
- /_yardoc/
4
- /coverage/
5
- /doc/
6
- /pkg/
7
- /spec/reports/
8
- /tmp/
9
- *.bundle
10
- *.so
11
- *.o
12
- *.a
13
- *.rbc
14
- mkmf.log
15
- .DS_Store
16
- Gemfile.lock
17
- node_modules/
data/.rspec DELETED
@@ -1,4 +0,0 @@
1
- --color
2
- --require spec_helper
3
- --format d
4
-