percy-selenium 1.0.1 → 1.0.2
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/.github/ISSUE_TEMPLATE/bug_report.md +12 -4
- data/.github/workflows/Semgrep.yml +48 -0
- data/.github/workflows/test.yml +41 -2
- data/CODEOWNERS +1 -0
- data/Gemfile +2 -1
- data/lib/percy.rb +8 -1
- data/lib/version.rb +1 -1
- data/package.json +10 -0
- data/spec/lib/percy/percy_spec.rb +65 -1
- metadata +9 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 21d5089e6a2652952602feef700b0e9aa1a1345ef6c8b464c2c85646e8a36679
|
4
|
+
data.tar.gz: 2c9a17360becb96df488b8ae678172a89bad4ffbb596b05cf560e9a0a66fbcd6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: bca3d0f5ebce8d35f9bffc7727b8af1b42c5fb19c30b6a578a1ff7573b50e5d3613f26885227f3d906c8cd5b7677302af4cb31b20ae0651564a61fc7c5f784b4
|
7
|
+
data.tar.gz: 0f6631b9d1ca037ff738c59ff5a8d3fd9abecde33a71b4bbae266748bd00b8269bb0cc9ed4c674bcc646fde837a8bcfa370b06d3b150165c6a0f5faf4f4a6789
|
@@ -5,7 +5,14 @@ title: ''
|
|
5
5
|
labels: ''
|
6
6
|
assignees: ''
|
7
7
|
---
|
8
|
+
|
8
9
|
<!--
|
10
|
+
## Have you read the "Debugging SDKs" doc yet?
|
11
|
+
|
12
|
+
There are common setup gotchas that happen with Percy's SDKs, it would be worth reading
|
13
|
+
the debugging document, which might already answer your question:
|
14
|
+
https://docs.percy.io/docs/debugging-sdk
|
15
|
+
|
9
16
|
## Reach out to Percy support instead?
|
10
17
|
|
11
18
|
If you’re having issues that _aren’t SDK bugs_, it would be best for you to
|
@@ -35,10 +42,11 @@ If necessary, describe the problem you have been experiencing in more detail.
|
|
35
42
|
|
36
43
|
## Debug logs
|
37
44
|
|
38
|
-
If you are reporting a bug, _always_ include logs!
|
39
|
-
|
40
|
-
|
41
|
-
|
45
|
+
If you are reporting a bug, _always_ include logs! [Give the "Debugging SDKs"
|
46
|
+
document a quick read for how to gather logs](https://docs.percy.io/docs/debugging-sdks#debugging-sdks)
|
47
|
+
|
48
|
+
Please do not trim or edit these logs, often times there are hints in the full
|
49
|
+
logs that help debug what is going on.
|
42
50
|
|
43
51
|
## Code to reproduce issue
|
44
52
|
|
@@ -0,0 +1,48 @@
|
|
1
|
+
# Name of this GitHub Actions workflow.
|
2
|
+
name: Semgrep
|
3
|
+
|
4
|
+
on:
|
5
|
+
# Scan changed files in PRs (diff-aware scanning):
|
6
|
+
# The branches below must be a subset of the branches above
|
7
|
+
pull_request:
|
8
|
+
branches: ["master", "main"]
|
9
|
+
push:
|
10
|
+
branches: ["master", "main"]
|
11
|
+
schedule:
|
12
|
+
- cron: '0 6 * * *'
|
13
|
+
|
14
|
+
|
15
|
+
permissions:
|
16
|
+
contents: read
|
17
|
+
|
18
|
+
jobs:
|
19
|
+
semgrep:
|
20
|
+
# User definable name of this GitHub Actions job.
|
21
|
+
permissions:
|
22
|
+
contents: read # for actions/checkout to fetch code
|
23
|
+
security-events: write # for github/codeql-action/upload-sarif to upload SARIF results
|
24
|
+
name: semgrep/ci
|
25
|
+
# If you are self-hosting, change the following `runs-on` value:
|
26
|
+
runs-on: ubuntu-latest
|
27
|
+
|
28
|
+
container:
|
29
|
+
# A Docker image with Semgrep installed. Do not change this.
|
30
|
+
image: returntocorp/semgrep
|
31
|
+
|
32
|
+
# Skip any PR created by dependabot to avoid permission issues:
|
33
|
+
if: (github.actor != 'dependabot[bot]')
|
34
|
+
|
35
|
+
steps:
|
36
|
+
# Fetch project source with GitHub Actions Checkout.
|
37
|
+
- uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3.5.3
|
38
|
+
# Run the "semgrep ci" command on the command line of the docker image.
|
39
|
+
- run: semgrep ci --sarif --output=semgrep.sarif
|
40
|
+
env:
|
41
|
+
# Add the rules that Semgrep uses by setting the SEMGREP_RULES environment variable.
|
42
|
+
SEMGREP_RULES: p/default # more at semgrep.dev/explore
|
43
|
+
|
44
|
+
- name: Upload SARIF file for GitHub Advanced Security Dashboard
|
45
|
+
uses: github/codeql-action/upload-sarif@6c089f53dd51dc3fc7e599c3cb5356453a52ca9e # v2.20.0
|
46
|
+
with:
|
47
|
+
sarif_file: semgrep.sarif
|
48
|
+
if: always()
|
data/.github/workflows/test.yml
CHANGED
@@ -2,8 +2,12 @@ name: Test
|
|
2
2
|
on:
|
3
3
|
push:
|
4
4
|
branches: [main]
|
5
|
-
pull_request:
|
6
5
|
workflow_dispatch:
|
6
|
+
inputs:
|
7
|
+
branch:
|
8
|
+
required: false
|
9
|
+
type: string
|
10
|
+
default: master
|
7
11
|
jobs:
|
8
12
|
test:
|
9
13
|
name: Test
|
@@ -13,6 +17,15 @@ jobs:
|
|
13
17
|
ruby: ['2.6', '2.7']
|
14
18
|
runs-on: ${{ matrix.os }}
|
15
19
|
steps:
|
20
|
+
- uses: actions-ecosystem/action-regex-match@v2
|
21
|
+
id: regex-match
|
22
|
+
if: ${{ github.event_name == 'workflow_dispatch' }}
|
23
|
+
with:
|
24
|
+
text: ${{ github.event.inputs.branch }}
|
25
|
+
regex: '^[a-zA-Z0-9_/\-]+$'
|
26
|
+
- name: Break on invalid branch name
|
27
|
+
run: exit 1
|
28
|
+
if: ${{ github.event_name == 'workflow_dispatch' && steps.regex-match.outputs && steps.regex-match.outputs.match == '' }}
|
16
29
|
- uses: actions/checkout@v2
|
17
30
|
- uses: ruby/setup-ruby@v1
|
18
31
|
with:
|
@@ -23,4 +36,30 @@ jobs:
|
|
23
36
|
path: "./vendor/bundle"
|
24
37
|
key: v1/${{ runner.os }}/ruby-${{ matrix.ruby }}/${{ hashFiles('**/Gemfile.lock') }}
|
25
38
|
restore-keys: v1/${{ runner.os }}/ruby-${{ matrix.ruby }}/
|
26
|
-
-
|
39
|
+
- uses: actions/setup-node@v3
|
40
|
+
with:
|
41
|
+
node-version: 16
|
42
|
+
- name: Get yarn cache directory path
|
43
|
+
id: yarn-cache-dir-path
|
44
|
+
run: echo "::set-output name=dir::$(yarn cache dir)"
|
45
|
+
- uses: actions/cache@v3
|
46
|
+
with:
|
47
|
+
path: ${{ steps.yarn-cache-dir-path.outputs.dir }}
|
48
|
+
key: v1/${{ runner.os }}/node-${{ matrix.node }}/${{ hashFiles('**/yarn.lock') }}
|
49
|
+
restore-keys: v1/${{ runner.os }}/node-${{ matrix.node }}/
|
50
|
+
- run: yarn
|
51
|
+
- name: Set up @percy/cli from git
|
52
|
+
if: ${{ github.event_name == 'workflow_dispatch' }}
|
53
|
+
run: |
|
54
|
+
cd /tmp
|
55
|
+
git clone --branch ${{ github.event.inputs.branch }} --depth 1 https://github.com/percy/cli
|
56
|
+
cd cli
|
57
|
+
PERCY_PACKAGES=`find packages -mindepth 1 -maxdepth 1 -type d | sed -e 's/packages/@percy/g' | tr '\n' ' '`
|
58
|
+
git log -1
|
59
|
+
yarn
|
60
|
+
yarn build
|
61
|
+
yarn global:link
|
62
|
+
cd ${{ github.workspace }}
|
63
|
+
yarn remove @percy/cli && yarn link `echo $PERCY_PACKAGES`
|
64
|
+
npx percy --version
|
65
|
+
- run: npx percy exec --testing -- bundle exec rspec
|
data/CODEOWNERS
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
* @percy/percy-product-reviewers
|
data/Gemfile
CHANGED
data/lib/percy.rb
CHANGED
@@ -31,6 +31,9 @@ module Percy
|
|
31
31
|
unless response.body.to_json['success']
|
32
32
|
raise StandardError, data['error']
|
33
33
|
end
|
34
|
+
|
35
|
+
body = JSON.parse(response.body)
|
36
|
+
body['data']
|
34
37
|
rescue StandardError => e
|
35
38
|
log("Could not take DOM snapshot '#{name}'")
|
36
39
|
|
@@ -90,7 +93,11 @@ module Percy
|
|
90
93
|
uri = URI("#{PERCY_SERVER_ADDRESS}/#{url}")
|
91
94
|
|
92
95
|
response = if data
|
93
|
-
Net::HTTP.
|
96
|
+
http = Net::HTTP.new(uri.host, uri.port)
|
97
|
+
http.read_timeout = 600 # seconds
|
98
|
+
request = Net::HTTP::Post.new(uri.path)
|
99
|
+
request.body = data.to_json
|
100
|
+
http.request(request)
|
94
101
|
else
|
95
102
|
Net::HTTP.get_response(uri)
|
96
103
|
end
|
data/lib/version.rb
CHANGED
data/package.json
ADDED
@@ -1,3 +1,4 @@
|
|
1
|
+
# rubocop:disable RSpec/MultipleDescribes
|
1
2
|
RSpec.describe Percy, type: :feature do
|
2
3
|
before(:each) do
|
3
4
|
WebMock.disable_net_connect!(allow: '127.0.0.1', disallow: 'localhost')
|
@@ -89,7 +90,7 @@ RSpec.describe Percy, type: :feature do
|
|
89
90
|
.to_return(status: 200, body: '{"success": "true" }', headers: {})
|
90
91
|
|
91
92
|
visit 'index.html'
|
92
|
-
Percy.snapshot(page, 'Name', widths: [944])
|
93
|
+
data = Percy.snapshot(page, 'Name', widths: [944])
|
93
94
|
|
94
95
|
expect(WebMock).to have_requested(:post, "#{Percy::PERCY_SERVER_ADDRESS}/percy/snapshot")
|
95
96
|
.with(
|
@@ -103,6 +104,69 @@ RSpec.describe Percy, type: :feature do
|
|
103
104
|
widths: [944],
|
104
105
|
}.to_json,
|
105
106
|
).once
|
107
|
+
|
108
|
+
expect(data).to eq(nil)
|
109
|
+
end
|
110
|
+
|
111
|
+
it 'sends snapshots for sync' do
|
112
|
+
stub_request(:get, "#{Percy::PERCY_SERVER_ADDRESS}/percy/healthcheck")
|
113
|
+
.to_return(status: 200, body: '', headers: {'x-percy-core-version': '1.0.0'})
|
114
|
+
|
115
|
+
stub_request(:get, "#{Percy::PERCY_SERVER_ADDRESS}/percy/dom.js")
|
116
|
+
.to_return(
|
117
|
+
status: 200,
|
118
|
+
body: 'window.PercyDOM = { serialize: () => document.documentElement.outerHTML };',
|
119
|
+
headers: {},
|
120
|
+
)
|
121
|
+
|
122
|
+
stub_request(:post, 'http://localhost:5338/percy/snapshot')
|
123
|
+
.to_return(status: 200, body: '{"success": "true", "data": "sync_data" }', headers: {})
|
124
|
+
|
125
|
+
visit 'index.html'
|
126
|
+
data = Percy.snapshot(page, 'Name', {sync: true})
|
127
|
+
|
128
|
+
expect(WebMock).to have_requested(:post, "#{Percy::PERCY_SERVER_ADDRESS}/percy/snapshot")
|
129
|
+
.with(
|
130
|
+
body: {
|
131
|
+
name: 'Name',
|
132
|
+
url: 'http://127.0.0.1:3003/index.html',
|
133
|
+
dom_snapshot:
|
134
|
+
"<html><head><title>I am a page</title></head><body>Snapshot me\n</body></html>",
|
135
|
+
client_info: "percy-selenium-ruby/#{Percy::VERSION}",
|
136
|
+
environment_info: "selenium/#{Selenium::WebDriver::VERSION} ruby/#{RUBY_VERSION}",
|
137
|
+
widths: [944],
|
138
|
+
}.to_json,
|
139
|
+
).once
|
140
|
+
|
141
|
+
expect(data).to eq('sync_data')
|
142
|
+
end
|
143
|
+
end
|
144
|
+
end
|
145
|
+
|
146
|
+
RSpec.describe Percy, type: :feature do
|
147
|
+
before(:each) do
|
148
|
+
WebMock.reset!
|
149
|
+
WebMock.allow_net_connect!
|
150
|
+
Percy._clear_cache!
|
151
|
+
end
|
152
|
+
|
153
|
+
describe 'integration', type: :feature do
|
154
|
+
it 'sends snapshots to percy server' do
|
155
|
+
visit 'index.html'
|
156
|
+
Percy.snapshot(page, 'Name', widths: [375])
|
157
|
+
sleep 5 # wait for percy server to process
|
158
|
+
resp = Net::HTTP.get_response(URI("#{Percy::PERCY_SERVER_ADDRESS}/test/requests"))
|
159
|
+
requests = JSON.parse(resp.body)['requests']
|
160
|
+
healthcheck = requests[0]
|
161
|
+
expect(healthcheck['url']).to eq('/percy/healthcheck')
|
162
|
+
|
163
|
+
snap = requests[2]['body']
|
164
|
+
expect(snap['name']).to eq('Name')
|
165
|
+
expect(snap['url']).to eq('http://127.0.0.1:3003/index.html')
|
166
|
+
expect(snap['client_info']).to include('percy-selenium-ruby')
|
167
|
+
expect(snap['environment_info']).to include('selenium')
|
168
|
+
expect(snap['widths']).to eq([375])
|
106
169
|
end
|
107
170
|
end
|
108
171
|
end
|
172
|
+
# rubocop:enable RSpec/MultipleDescribes
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: percy-selenium
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Perceptual Inc.
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2024-02-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: selenium-webdriver
|
@@ -104,6 +104,7 @@ files:
|
|
104
104
|
- ".github/ISSUE_TEMPLATE/bug_report.md"
|
105
105
|
- ".github/dependabot.yml"
|
106
106
|
- ".github/release-drafter.yml"
|
107
|
+
- ".github/workflows/Semgrep.yml"
|
107
108
|
- ".github/workflows/changelog.yml"
|
108
109
|
- ".github/workflows/lint.yml"
|
109
110
|
- ".github/workflows/release.yml"
|
@@ -113,6 +114,7 @@ files:
|
|
113
114
|
- ".rspec"
|
114
115
|
- ".rubocop.yml"
|
115
116
|
- ".yardopts"
|
117
|
+
- CODEOWNERS
|
116
118
|
- Gemfile
|
117
119
|
- Guardfile
|
118
120
|
- LICENSE
|
@@ -121,6 +123,7 @@ files:
|
|
121
123
|
- Rakefile
|
122
124
|
- lib/percy.rb
|
123
125
|
- lib/version.rb
|
126
|
+
- package.json
|
124
127
|
- percy-selenium.gemspec
|
125
128
|
- spec/fixture/index.html
|
126
129
|
- spec/lib/percy/percy_spec.rb
|
@@ -131,7 +134,7 @@ licenses:
|
|
131
134
|
metadata:
|
132
135
|
bug_tracker_uri: https://github.com/percy/percy-selenium-ruby/issues
|
133
136
|
source_code_uri: https://github.com/percy/percy-selenium-ruby
|
134
|
-
post_install_message:
|
137
|
+
post_install_message:
|
135
138
|
rdoc_options: []
|
136
139
|
require_paths:
|
137
140
|
- lib
|
@@ -146,8 +149,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
146
149
|
- !ruby/object:Gem::Version
|
147
150
|
version: '0'
|
148
151
|
requirements: []
|
149
|
-
rubygems_version: 3.
|
150
|
-
signing_key:
|
152
|
+
rubygems_version: 3.5.3
|
153
|
+
signing_key:
|
151
154
|
specification_version: 4
|
152
155
|
summary: Percy visual testing for Ruby Selenium
|
153
156
|
test_files:
|