prism_checker 1.0.1 → 1.1.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
  SHA256:
3
- metadata.gz: 85257e035e4a88514ae52cc74f626c3773b28a3e79af092dfe28655285af022f
4
- data.tar.gz: cf8a7167976cda2f9c20dfcefce982da0a95b664d1c459483275701583ecf01b
3
+ metadata.gz: ba46f4fc664beea6ea8ce92f28aacd290909ec228bbc75d43a28433853b51a95
4
+ data.tar.gz: 2db3609621ccb519163d98f0f0a18bcbbaddefb7455f5f62f211c5bc3eb6e337
5
5
  SHA512:
6
- metadata.gz: 20f7f466e32972c19d7b828cae40de07c8d2f6462aac78bb891e744d89109cfefae86a71b06ded90a47f803267053bcd7c62c095bf7e86aad57b916b53f96a99
7
- data.tar.gz: 4fbcb5350cc2bcde2a8877757c4afdc4b17fb367da82e3ee95e68c00c1de5b7b3e4b324919792a87ee20fa60bb99b24a71392a45cb2db9ac994e5337076e5cc2
6
+ metadata.gz: 49532ad537da621054457190b11ca14b0acf18af760b2dca27700e967114e9be77d25f9640b88c7221403f1e76d8d005989ea688cccbce79b968e077df171eac
7
+ data.tar.gz: 27ff911f88064c9f4fb7c5146876f41146c99d9952f2673af172ee0407fff7757be119888f52a9b18ce8024192843920937b9b87a79b4c54bb7775ca84d12d9b
data/CHANGELOG.md ADDED
@@ -0,0 +1,29 @@
1
+ # Changelog
2
+
3
+ All notable changes to this project are documented in this file.
4
+
5
+ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
6
+ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
+
8
+ ## 1.1.0 - 2026-07-16
9
+
10
+ ### Changed
11
+
12
+ - Minimum supported Ruby is now 3.3 (was 2.5).
13
+ - `SitePrism::TimeoutError` is resolved at runtime, so both site_prism 5 and 6 are supported.
14
+ - `site_prism` dependency narrowed to `>= 5.0, < 7`.
15
+ - Development dependencies moved from the gemspec to the `Gemfile`.
16
+ - Gemspec now publishes `metadata` links (source, changelog, bug tracker) and requires MFA for releases.
17
+
18
+ ### Removed
19
+
20
+ - The `webdrivers` development dependency. Selenium Manager, bundled with
21
+ `selenium-webdriver >= 4.6`, resolves browser drivers instead.
22
+
23
+ ## 1.0.1
24
+
25
+ - Sequential loading of page objects.
26
+
27
+ ## 1.0.0
28
+
29
+ - First public release.
data/README.md CHANGED
@@ -1,6 +1,19 @@
1
1
  ![ci workflow](https://github.com/prism-checker/prism_checker/actions/workflows/ci-main.yml/badge.svg)
2
- [![Maintainability](https://api.codeclimate.com/v1/badges/c497733cb53175decd0f/maintainability)](https://codeclimate.com/github/prism-checker/prism_checker/maintainability)
3
- [![Test Coverage](https://api.codeclimate.com/v1/badges/c497733cb53175decd0f/test_coverage)](https://codeclimate.com/github/prism-checker/prism_checker/test_coverage)
2
+
3
+ ## Contents
4
+
5
+ - [Overview](#overview)
6
+ - [Install](#install)
7
+ - [Setup](#setup)
8
+ - [Cheat sheet](#cheat-sheet)
9
+ - [Examples](#examples)
10
+ - [Common cases](#common-cases)
11
+ - [HTML elements](#html-elements)
12
+ - [Visibility](#visibility)
13
+ - [Absence](#absence)
14
+ - [Configuration](#configuration)
15
+ - [String comparison](#string-comparison)
16
+ - [Colorizer](#colorizer)
4
17
 
5
18
  ## Overview
6
19
 
@@ -8,6 +21,8 @@ PrismChecker is an extension for rspec and minitest, built on top of the [SitePr
8
21
  gem and using its page object model.
9
22
  It allows you to write short, easy-to-read browser tests with clear error messages
10
23
 
24
+ Requires Ruby >= 3.3 and site_prism >= 5.0.
25
+
11
26
  Let's assume your application has the following shop cart:
12
27
 
13
28
  ![Cart](doc/images/cart.png "Cart")
@@ -95,7 +110,7 @@ describe 'Cart' do
95
110
  }
96
111
  ],
97
112
  checkout: {
98
- total: '67.00',
113
+ total: '67.00', # deliberately wrong, to show the failure report below
99
114
  checkout_button: 'Checkout'
100
115
  }
101
116
  )
@@ -104,7 +119,8 @@ end
104
119
 
105
120
  ```
106
121
 
107
- In case of errors, an easy-to-read message will be displayed:
122
+ In case of errors, an easy-to-read message will be displayed. Every key is reported with its
123
+ own status, so the failing one is visible at a glance:
108
124
 
109
125
  ![Result](doc/images/result.png "Result")
110
126
 
@@ -122,6 +138,109 @@ gem install prism_checker_rspec
122
138
  gem install prism_checker_minitest
123
139
  ```
124
140
 
141
+ ## Setup
142
+
143
+ PrismChecker drives the browser through SitePrism and Capybara, so a Capybara driver has to be
144
+ registered as usual. Only the last two lines are PrismChecker-specific.
145
+
146
+ ### RSpec
147
+
148
+ Adds the `be_like` matcher:
149
+
150
+ ```ruby
151
+ # Gemfile
152
+ gem 'prism_checker_rspec'
153
+ ```
154
+ ```ruby
155
+ # spec/spec_helper.rb
156
+ require 'capybara/rspec'
157
+ require 'selenium-webdriver'
158
+ require 'site_prism'
159
+ require 'prism_checker_rspec'
160
+
161
+ Capybara.register_driver :prism_checker do |app|
162
+ options = Selenium::WebDriver::Chrome::Options.new
163
+ options.add_argument('--headless=new')
164
+
165
+ Capybara::Selenium::Driver.new(app, browser: :chrome, options: options)
166
+ end
167
+
168
+ Capybara.configure do |config|
169
+ config.default_driver = :prism_checker
170
+ config.app_host = 'http://localhost:3000'
171
+ # Needed so that :invisible expectations can see hidden elements
172
+ config.ignore_hidden_elements = false
173
+ end
174
+ ```
175
+ ```ruby
176
+ # spec/cart_spec.rb
177
+ describe 'Cart' do
178
+ it 'is correct' do
179
+ page = Cart.new
180
+ page.load
181
+
182
+ expect(page).to be_like(header: 'Shopping Cart')
183
+ end
184
+ end
185
+ ```
186
+
187
+ ### MiniTest
188
+
189
+ Adds the `assert_page_like` assertion:
190
+
191
+ ```ruby
192
+ # Gemfile
193
+ gem 'prism_checker_minitest'
194
+ ```
195
+ ```ruby
196
+ # test/test_helper.rb
197
+ require 'minitest/autorun'
198
+ require 'capybara/minitest'
199
+ require 'site_prism'
200
+ require 'prism_checker_minitest'
201
+
202
+ # ...same Capybara.register_driver / Capybara.configure as above
203
+ ```
204
+ ```ruby
205
+ # test/cart_test.rb
206
+ class CartTest < Minitest::Test
207
+ include Capybara::DSL
208
+ include Capybara::Minitest::Assertions
209
+
210
+ def test_cart
211
+ page = Cart.new
212
+ page.load
213
+
214
+ assert_page_like page, header: 'Shopping Cart'
215
+ end
216
+ end
217
+ ```
218
+
219
+ ## Cheat sheet
220
+
221
+ What gets checked depends on the type of the expectation and on the inspected item.
222
+
223
+ | Expectation | Checked against |
224
+ |---|---|
225
+ | `'text'` | `text` of an element, section or page; `value` of an input, textarea or select; `src` of an image |
226
+ | `/regexp/` | the same values, matched as a regular expression |
227
+ | `42` | `size` of elements/sections |
228
+ | `[...]` | `size` of elements/sections, then each entry in turn |
229
+ | `{...}` | element is visible, then each key in turn |
230
+ | `true` / `false` | `checked?` of a checkbox or radio |
231
+ | `:visible` | `visible?` |
232
+ | `:invisible` | `visible?` is false |
233
+ | `:absent` | `has_no_<name>?` |
234
+ | `:absent3` | sleep 3 seconds, then `has_no_<name>?` |
235
+ | `:empty` | value is an empty string |
236
+
237
+ Inside a `{...}` expectation, keys map to Capybara methods (`text`, `value`, `checked`, `disabled`,
238
+ `readonly`, `selected`, `multiple`) or, failing that, to HTML attributes (`class`, `id`, `src`, `alt`,
239
+ `data-*`, ...).
240
+
241
+ A page or element is always checked for being loaded or visible before its value is compared,
242
+ so those assertions never need to be spelled out.
243
+
125
244
  ## Examples
126
245
  ### Common cases
127
246
 
@@ -628,6 +747,8 @@ expect(page).to be_like(article: :absent3)
628
747
  # sleep 3
629
748
  # expect(page.has_no_article?).to eq(true)
630
749
  ```
750
+ ## Configuration
751
+
631
752
  ### String comparison
632
753
 
633
754
  #### Exact match and inclusion
@@ -668,3 +789,23 @@ expect(page.element_without_text).to be_like(/^$/)
668
789
  # expect(page.element_without_text.visible?).to eq(true)
669
790
  # expect(page.element_without_text.text).to match(/^$/)
670
791
  ```
792
+
793
+ ### Colorizer
794
+
795
+ Failure reports are colorized through `PrismChecker.colorizer`. `prism_checker_rspec` sets one that
796
+ uses the RSpec console codes; the default of the core gem returns text unchanged.
797
+
798
+ A colorizer answers `colorize(text, code)`, where `code` is one of `:success`, `:failure`,
799
+ `:detail` or `:white`:
800
+
801
+ ```ruby
802
+ class MyColorizer
803
+ CODES = { success: 32, failure: 31, detail: 33, white: 37 }.freeze
804
+
805
+ def self.colorize(text, code)
806
+ "\e[#{CODES[code]}m#{text}\e[0m"
807
+ end
808
+ end
809
+
810
+ PrismChecker.colorizer = MyColorizer
811
+ ```
@@ -6,6 +6,7 @@ require_relative 'bad_expectation'
6
6
  require_relative '../element_wrapper'
7
7
  require_relative '../absence_expectation'
8
8
  require_relative '../item_classifier'
9
+ require_relative '../site_prism_compat'
9
10
 
10
11
  module PrismChecker
11
12
  module Node
@@ -67,7 +68,7 @@ module PrismChecker
67
68
 
68
69
  def wait_until_true(timeout = @timeout, &block)
69
70
  SitePrism::Waiter.wait_until_true(timeout, &block)
70
- rescue SitePrism::TimeoutError
71
+ rescue SitePrismCompat.timeout_error
71
72
  false
72
73
  end
73
74
 
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ module PrismChecker
4
+ # site_prism 6 nests its errors under SitePrism::Error, while 5 keeps them
5
+ # at the top level. The gem supports both, so the class is resolved on first
6
+ # use rather than at load time: site_prism is required by the host suite,
7
+ # not by prism_checker itself.
8
+ module SitePrismCompat
9
+ def self.timeout_error
10
+ @timeout_error ||= if SitePrism.const_defined?(:Error, false) && SitePrism::Error.const_defined?(:TimeoutError, false)
11
+ SitePrism::Error::TimeoutError
12
+ else
13
+ SitePrism::TimeoutError
14
+ end
15
+ end
16
+ end
17
+ end
metadata CHANGED
@@ -1,14 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: prism_checker
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.1
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ganglion-17
8
- autorequire:
9
8
  bindir: bin
10
9
  cert_chain: []
11
- date: 2024-12-14 00:00:00.000000000 Z
10
+ date: 1980-01-02 00:00:00.000000000 Z
12
11
  dependencies:
13
12
  - !ruby/object:Gem::Dependency
14
13
  name: site_prism
@@ -16,160 +15,20 @@ dependencies:
16
15
  requirements:
17
16
  - - ">="
18
17
  - !ruby/object:Gem::Version
19
- version: '3.0'
20
- type: :runtime
21
- prerelease: false
22
- version_requirements: !ruby/object:Gem::Requirement
23
- requirements:
24
- - - ">="
25
- - !ruby/object:Gem::Version
26
- version: '3.0'
27
- - !ruby/object:Gem::Dependency
28
- name: byebug
29
- requirement: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - "~>"
32
- - !ruby/object:Gem::Version
33
- version: '11.1'
34
- type: :development
35
- prerelease: false
36
- version_requirements: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - "~>"
39
- - !ruby/object:Gem::Version
40
- version: '11.1'
41
- - !ruby/object:Gem::Dependency
42
- name: dotenv
43
- requirement: !ruby/object:Gem::Requirement
44
- requirements:
45
- - - ">="
46
- - !ruby/object:Gem::Version
47
- version: '0'
48
- type: :development
49
- prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - ">="
53
- - !ruby/object:Gem::Version
54
- version: '0'
55
- - !ruby/object:Gem::Dependency
56
- name: rspec
57
- requirement: !ruby/object:Gem::Requirement
58
- requirements:
59
- - - "~>"
60
- - !ruby/object:Gem::Version
61
- version: '3.1'
62
- type: :development
63
- prerelease: false
64
- version_requirements: !ruby/object:Gem::Requirement
65
- requirements:
66
- - - "~>"
67
- - !ruby/object:Gem::Version
68
- version: '3.1'
69
- - !ruby/object:Gem::Dependency
70
- name: rubocop
71
- requirement: !ruby/object:Gem::Requirement
72
- requirements:
73
- - - "~>"
74
- - !ruby/object:Gem::Version
75
- version: 1.11.0
76
- type: :development
77
- prerelease: false
78
- version_requirements: !ruby/object:Gem::Requirement
79
- requirements:
80
- - - "~>"
81
- - !ruby/object:Gem::Version
82
- version: 1.11.0
83
- - !ruby/object:Gem::Dependency
84
- name: rubocop-performance
85
- requirement: !ruby/object:Gem::Requirement
86
- requirements:
87
- - - "~>"
88
- - !ruby/object:Gem::Version
89
- version: 1.10.1
90
- type: :development
91
- prerelease: false
92
- version_requirements: !ruby/object:Gem::Requirement
93
- requirements:
94
- - - "~>"
95
- - !ruby/object:Gem::Version
96
- version: 1.10.1
97
- - !ruby/object:Gem::Dependency
98
- name: rubocop-rspec
99
- requirement: !ruby/object:Gem::Requirement
100
- requirements:
101
- - - "~>"
102
- - !ruby/object:Gem::Version
103
- version: 2.2.0
104
- type: :development
105
- prerelease: false
106
- version_requirements: !ruby/object:Gem::Requirement
107
- requirements:
108
- - - "~>"
109
- - !ruby/object:Gem::Version
110
- version: 2.2.0
111
- - !ruby/object:Gem::Dependency
112
- name: selenium-webdriver
113
- requirement: !ruby/object:Gem::Requirement
114
- requirements:
115
- - - ">="
116
- - !ruby/object:Gem::Version
117
- version: '3.13'
18
+ version: '5.0'
118
19
  - - "<"
119
20
  - !ruby/object:Gem::Version
120
- version: '4.1'
121
- type: :development
21
+ version: '7'
22
+ type: :runtime
122
23
  prerelease: false
123
24
  version_requirements: !ruby/object:Gem::Requirement
124
25
  requirements:
125
26
  - - ">="
126
27
  - !ruby/object:Gem::Version
127
- version: '3.13'
28
+ version: '5.0'
128
29
  - - "<"
129
30
  - !ruby/object:Gem::Version
130
- version: '4.1'
131
- - !ruby/object:Gem::Dependency
132
- name: simplecov
133
- requirement: !ruby/object:Gem::Requirement
134
- requirements:
135
- - - "~>"
136
- - !ruby/object:Gem::Version
137
- version: '0.22'
138
- type: :development
139
- prerelease: false
140
- version_requirements: !ruby/object:Gem::Requirement
141
- requirements:
142
- - - "~>"
143
- - !ruby/object:Gem::Version
144
- version: '0.22'
145
- - !ruby/object:Gem::Dependency
146
- name: simplecov_json_formatter
147
- requirement: !ruby/object:Gem::Requirement
148
- requirements:
149
- - - ">="
150
- - !ruby/object:Gem::Version
151
- version: '0'
152
- type: :development
153
- prerelease: false
154
- version_requirements: !ruby/object:Gem::Requirement
155
- requirements:
156
- - - ">="
157
- - !ruby/object:Gem::Version
158
- version: '0'
159
- - !ruby/object:Gem::Dependency
160
- name: webdrivers
161
- requirement: !ruby/object:Gem::Requirement
162
- requirements:
163
- - - "~>"
164
- - !ruby/object:Gem::Version
165
- version: '4.6'
166
- type: :development
167
- prerelease: false
168
- version_requirements: !ruby/object:Gem::Requirement
169
- requirements:
170
- - - "~>"
171
- - !ruby/object:Gem::Version
172
- version: '4.6'
31
+ version: '7'
173
32
  description: |
174
33
  prism_checker is an extension for rspec and minitest, built on top of the site_prism gem and using its page object model.
175
34
  It allows you to write short, easy-to-read browser tests with clear error messages
@@ -177,8 +36,12 @@ email:
177
36
  - ganglion1717@gmail.com
178
37
  executables: []
179
38
  extensions: []
180
- extra_rdoc_files: []
39
+ extra_rdoc_files:
40
+ - CHANGELOG.md
41
+ - LICENSE.md
42
+ - README.md
181
43
  files:
44
+ - CHANGELOG.md
182
45
  - LICENSE.md
183
46
  - README.md
184
47
  - lib/prism_checker.rb
@@ -222,11 +85,16 @@ files:
222
85
  - lib/prism_checker/node/expectation.rb
223
86
  - lib/prism_checker/node/hash.rb
224
87
  - lib/prism_checker/report_builder.rb
88
+ - lib/prism_checker/site_prism_compat.rb
225
89
  homepage: https://github.com/prism-checker/prism_checker
226
90
  licenses:
227
91
  - BSD-3-Clause
228
- metadata: {}
229
- post_install_message:
92
+ metadata:
93
+ bug_tracker_uri: https://github.com/prism-checker/prism_checker/issues
94
+ changelog_uri: https://github.com/prism-checker/prism_checker/blob/main/CHANGELOG.md
95
+ documentation_uri: https://github.com/prism-checker/prism_checker/blob/main/README.md
96
+ source_code_uri: https://github.com/prism-checker/prism_checker
97
+ rubygems_mfa_required: 'true'
230
98
  rdoc_options: []
231
99
  require_paths:
232
100
  - lib
@@ -234,15 +102,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
234
102
  requirements:
235
103
  - - ">="
236
104
  - !ruby/object:Gem::Version
237
- version: '2.5'
105
+ version: '3.3'
238
106
  required_rubygems_version: !ruby/object:Gem::Requirement
239
107
  requirements:
240
108
  - - ">="
241
109
  - !ruby/object:Gem::Version
242
110
  version: '0'
243
111
  requirements: []
244
- rubygems_version: 3.1.4
245
- signing_key:
112
+ rubygems_version: 3.6.9
246
113
  specification_version: 4
247
114
  summary: Short and easy-to-read browser tests with clear error messages
248
115
  test_files: []