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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 945ce201dd584f7572e5c0072267e979ed2babcad71ddd39bdf3b26d30d37b96
4
- data.tar.gz: 23afec0288668a630ce79c2d89e6fff6433f56fcb06caf822eed7094f8b8546a
3
+ metadata.gz: 21d5089e6a2652952602feef700b0e9aa1a1345ef6c8b464c2c85646e8a36679
4
+ data.tar.gz: 2c9a17360becb96df488b8ae678172a89bad4ffbb596b05cf560e9a0a66fbcd6
5
5
  SHA512:
6
- metadata.gz: 4253c8396bd175129d82819aee0b975a4de3d5e0060bcc1c6d5449d93de64387513b1397f1570596e7455dee7ec6d2d15d7c8614c5dba44081327e5096e874c5
7
- data.tar.gz: b567e1065b7b971a79da4f18d0e6cd1327129fcde8a0dce5b12299054fe9cd404af19d4643372320226010af7d28780114911b8e7c891b49dad1277868a2dd2a
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! Run a Percy build with
39
- `--verbose` to get the full debug logs. You can also set an environment var
40
- `PERCY_LOGLEVEL=debug` to get debug logs. For example, `percy exec --verbose --
41
- [test command]`. Please include the full complete test output.
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()
@@ -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
- - run: bundle exec rspec
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
@@ -7,7 +7,8 @@ gem "guard-rspec", require: false
7
7
 
8
8
  group :test, :development do
9
9
  gem "webmock"
10
- gem "puma"
10
+ gem "puma", '~> 5.6'
11
+ gem "rackup"
11
12
  gem "pry"
12
13
  gem "simplecov", require: false
13
14
  end
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.post(uri, data.to_json)
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
@@ -1,3 +1,3 @@
1
1
  module Percy
2
- VERSION = '1.0.1'.freeze
2
+ VERSION = '1.0.2'.freeze
3
3
  end
data/package.json ADDED
@@ -0,0 +1,10 @@
1
+ {
2
+ "private": true,
3
+ "scripts": {
4
+ "test": "percy exec --testing -- bundle exec rspec"
5
+ },
6
+ "devDependencies": {
7
+ "@percy/cli": "^1.28.0"
8
+ }
9
+ }
10
+
@@ -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.1
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: 2021-08-27 00:00:00.000000000 Z
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.0.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: