e2e 0.5.0 → 0.6.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: a61ba407c8deaba2a2e1f439b5a9811b0344bae63a53b49b59ccdd6db711d0c1
4
- data.tar.gz: 71079c8ed8bee1aa479b2eba7d78290abb03f06b4533ef4b554f27848c96ce7a
3
+ metadata.gz: '01750782c903882b84a532103617b2babfdfaba271d32aa8f697b5e1987cfc24'
4
+ data.tar.gz: cc1097558f0be49202911ac317cff51401881d5c0b210afd69f169a3c8b8f293
5
5
  SHA512:
6
- metadata.gz: 5ea1c183412f5b3615a45483d6492466f84414a7439dbd6a2bdc96b4aa8d602f29fae211a27851642ffa10c27865b5198a2e6a5e58f5d8e9a160cc1a588a9f9d
7
- data.tar.gz: 0554cf1e4dcf4fcdfc8f8c645dbb3e950f549d17e739f39dcc5559d7b0b83aa7db7398240b6722dfd2e3209b4afa4c7a632f3b610e1e8a33d3d6f6135d30edb2
6
+ metadata.gz: 23ecff51a9f9bc903058568e26f4354604da41208c9368f8c99243843f2f39785681d60d008ba90333c5fd392f8ba50449100fa6ae566144f34607e8bf4af277
7
+ data.tar.gz: 85ae954b8c58ec52686ad33fd4ee5f969c9337b973ac51abd5359c4a63a4e04fbd7cd3fa0cf883b77f7afbd0b726db4074aa885128f1312052a5b2cba7c448ba
data/CHANGELOG.md CHANGED
@@ -7,6 +7,14 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [0.6.0] - 2026-02-13
11
+
12
+ ### Added
13
+
14
+ - DSL wait helpers: `wait_for`, `wait_for_text`, `wait_for_current_path`, and `wait_for_flash`
15
+ - Action helpers with built-in waiting: `click_button_and_wait_for_text`, `click_link_and_wait_for_text`, `click_button_and_wait_for_path`, `click_link_and_wait_for_path`, `click_button_and_wait_for_flash`, `click_link_and_wait_for_flash`
16
+ - Configurable flash selectors via `E2E.config.flash_selectors`
17
+
10
18
  ## [0.5.0] - 2026-02-09
11
19
 
12
20
  ### Added
data/README.md CHANGED
@@ -258,6 +258,22 @@ E2E.wait_until(timeout: 10) do
258
258
  end
259
259
  ```
260
260
 
261
+ Or use built-in DSL helpers that raise clear errors on timeout:
262
+
263
+ ```ruby
264
+ wait_for { SomeModel.count > 0 }
265
+ wait_for_text("Saved")
266
+ wait_for_current_path("/dashboard")
267
+ wait_for_flash("Profile updated", type: :notice)
268
+
269
+ click_button_and_wait_for_text("Save", "Saved")
270
+ click_link_and_wait_for_text("Next", /done/i)
271
+ click_button_and_wait_for_path("Submit", "/dashboard")
272
+ click_link_and_wait_for_path("Continue", /checkout/)
273
+ click_button_and_wait_for_flash("Save", "Updated", type: :notice)
274
+ click_link_and_wait_for_flash("Delete", /failed/i, type: :alert)
275
+ ```
276
+
261
277
  ### 🔓 Native Access (The Escape Hatch)
262
278
 
263
279
  We believe you shouldn't be limited by the wrapper. You can access the underlying `Playwright::Page` object at any time using `.native`.
@@ -318,6 +334,11 @@ E2E.configure do |config|
318
334
  config.headless = ENV.fetch("HEADLESS", "true") == "true"
319
335
  config.app = Rails.application # Automatic Rack booting
320
336
  config.wait_timeout = 5 # Seconds to wait in auto-waiting matchers (default: 5)
337
+ config.flash_selectors = {
338
+ any: "[role='alert'], [role='status'], .flash",
339
+ notice: "[role='status'], .flash.notice",
340
+ alert: "[role='alert'], .flash.alert"
341
+ }
321
342
  end
322
343
  ```
323
344
 
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: ..
3
3
  specs:
4
- e2e (0.5.0)
4
+ e2e (0.6.0)
5
5
  playwright-ruby-client (>= 1.40.0)
6
6
  rack
7
7
  rackup
@@ -112,7 +112,7 @@ GEM
112
112
  reline (>= 0.4.2)
113
113
  json (2.18.1)
114
114
  language_server-protocol (3.17.0.5)
115
- lefthook (2.1.0)
115
+ lefthook (2.1.1)
116
116
  lint_roller (1.1.0)
117
117
  logger (1.7.0)
118
118
  loofah (2.25.0)
@@ -212,7 +212,7 @@ GEM
212
212
  zeitwerk (~> 2.5)
213
213
  rainbow (3.1.1)
214
214
  rake (13.3.1)
215
- rdoc (7.1.0)
215
+ rdoc (7.2.0)
216
216
  erb
217
217
  psych (>= 4.0.0)
218
218
  tsort
@@ -232,7 +232,7 @@ GEM
232
232
  diff-lcs (>= 1.2.0, < 2.0)
233
233
  rspec-support (~> 3.13.0)
234
234
  rspec-support (3.13.7)
235
- rubocop (1.82.1)
235
+ rubocop (1.84.2)
236
236
  json (~> 2.3)
237
237
  language_server-protocol (~> 3.17.0.2)
238
238
  lint_roller (~> 1.1.0)
@@ -240,7 +240,7 @@ GEM
240
240
  parser (>= 3.3.0.2)
241
241
  rainbow (>= 2.2.2, < 4.0)
242
242
  regexp_parser (>= 2.9.3, < 3.0)
243
- rubocop-ast (>= 1.48.0, < 2.0)
243
+ rubocop-ast (>= 1.49.0, < 2.0)
244
244
  ruby-progressbar (~> 1.7)
245
245
  unicode-display_width (>= 2.4.0, < 4.0)
246
246
  rubocop-ast (1.49.0)
@@ -261,10 +261,10 @@ GEM
261
261
  simplecov_json_formatter (~> 0.1)
262
262
  simplecov-html (0.13.2)
263
263
  simplecov_json_formatter (0.1.4)
264
- standard (1.53.0)
264
+ standard (1.54.0)
265
265
  language_server-protocol (~> 3.17.0.2)
266
266
  lint_roller (~> 1.0)
267
- rubocop (~> 1.82.0)
267
+ rubocop (~> 1.84.0)
268
268
  standard-custom (~> 1.0.0)
269
269
  standard-performance (~> 1.8)
270
270
  standard-custom (1.0.2)
@@ -337,7 +337,7 @@ CHECKSUMS
337
337
  diff-lcs (1.6.2) sha256=9ae0d2cba7d4df3075fe8cd8602a8604993efc0dfa934cff568969efb1909962
338
338
  docile (1.4.1) sha256=96159be799bfa73cdb721b840e9802126e4e03dfc26863db73647204c727f21e
339
339
  drb (2.2.3) sha256=0b00d6fdb50995fe4a45dea13663493c841112e4068656854646f418fda13373
340
- e2e (0.5.0)
340
+ e2e (0.6.0)
341
341
  erb (6.0.1) sha256=28ecdd99c5472aebd5674d6061e3c6b0a45c049578b071e5a52c2a7f13c197e5
342
342
  erubi (1.13.1) sha256=a082103b0885dbc5ecf1172fede897f9ebdb745a4b97a5e8dc63953db1ee4ad9
343
343
  globalid (1.3.0) sha256=05c639ad6eb4594522a0b07983022f04aa7254626ab69445a0e493aa3786ff11
@@ -346,7 +346,7 @@ CHECKSUMS
346
346
  irb (1.17.0) sha256=168c4ddb93d8a361a045c41d92b2952c7a118fa73f23fe14e55609eb7a863aae
347
347
  json (2.18.1) sha256=fe112755501b8d0466b5ada6cf50c8c3f41e897fa128ac5d263ec09eedc9f986
348
348
  language_server-protocol (3.17.0.5) sha256=fd1e39a51a28bf3eec959379985a72e296e9f9acfce46f6a79d31ca8760803cc
349
- lefthook (2.1.0) sha256=a100dc90139806e62b9aa40cf32e9edf34f6cff10c8b55ebd14a1b0add4b86bf
349
+ lefthook (2.1.1) sha256=1b4ce49fbadb3f6584c07daaa9164e560e27bb5aba18446bb9de2378fcf3f5b6
350
350
  lint_roller (1.1.0) sha256=2c0c845b632a7d172cb849cc90c1bce937a28c5c8ccccb50dfd46a485003cc87
351
351
  logger (1.7.0) sha256=196edec7cc44b66cfb40f9755ce11b392f21f7967696af15d274dde7edff0203
352
352
  loofah (2.25.0) sha256=df5ed7ac3bac6a4ec802df3877ee5cc86d027299f8952e6243b3dac446b060e6
@@ -388,7 +388,7 @@ CHECKSUMS
388
388
  railties (7.0.10) sha256=d52a8b7a61ad941121a15a6596b2150e05c70b199c3afc9e9b73e63b3b1a57a7
389
389
  rainbow (3.1.1) sha256=039491aa3a89f42efa1d6dec2fc4e62ede96eb6acd95e52f1ad581182b79bc6a
390
390
  rake (13.3.1) sha256=8c9e89d09f66a26a01264e7e3480ec0607f0c497a861ef16063604b1b08eb19c
391
- rdoc (7.1.0) sha256=494899df0706c178596ca6e1d50f1b7eb285a9b2aae715be5abd742734f17363
391
+ rdoc (7.2.0) sha256=8650f76cd4009c3b54955eb5d7e3a075c60a57276766ebf36f9085e8c9f23192
392
392
  regexp_parser (2.11.3) sha256=ca13f381a173b7a93450e53459075c9b76a10433caadcb2f1180f2c741fc55a4
393
393
  reline (0.6.3) sha256=1198b04973565b36ec0f11542ab3f5cfeeec34823f4e54cebde90968092b1835
394
394
  rspec (3.13.2) sha256=206284a08ad798e61f86d7ca3e376718d52c0bc944626b2349266f239f820587
@@ -396,7 +396,7 @@ CHECKSUMS
396
396
  rspec-expectations (3.13.5) sha256=33a4d3a1d95060aea4c94e9f237030a8f9eae5615e9bd85718fe3a09e4b58836
397
397
  rspec-mocks (3.13.7) sha256=0979034e64b1d7a838aaaddf12bf065ea4dc40ef3d4c39f01f93ae2c66c62b1c
398
398
  rspec-support (3.13.7) sha256=0640e5570872aafefd79867901deeeeb40b0c9875a36b983d85f54fb7381c47c
399
- rubocop (1.82.1) sha256=09f1a6a654a960eda767aebea33e47603080f8e9c9a3f019bf9b94c9cab5e273
399
+ rubocop (1.84.2) sha256=5692cea54168f3dc8cb79a6fe95c5424b7ea893c707ad7a4307b0585e88dbf5f
400
400
  rubocop-ast (1.49.0) sha256=49c3676d3123a0923d333e20c6c2dbaaae2d2287b475273fddee0c61da9f71fd
401
401
  rubocop-performance (1.26.1) sha256=cd19b936ff196df85829d264b522fd4f98b6c89ad271fa52744a8c11b8f71834
402
402
  rubocop-rspec (3.9.0) sha256=8fa70a3619408237d789aeecfb9beef40576acc855173e60939d63332fdb55e2
@@ -405,7 +405,7 @@ CHECKSUMS
405
405
  simplecov (0.22.0) sha256=fe2622c7834ff23b98066bb0a854284b2729a569ac659f82621fc22ef36213a5
406
406
  simplecov-html (0.13.2) sha256=bd0b8e54e7c2d7685927e8d6286466359b6f16b18cb0df47b508e8d73c777246
407
407
  simplecov_json_formatter (0.1.4) sha256=529418fbe8de1713ac2b2d612aa3daa56d316975d307244399fa4838c601b428
408
- standard (1.53.0) sha256=f3c9493385db7079d0abce6f7582f553122156997b81258cd361d3480eeacf9c
408
+ standard (1.54.0) sha256=7a4b08f83d9893083c8f03bc486f0feeb6a84d48233b40829c03ef4767ea0100
409
409
  standard-custom (1.0.2) sha256=424adc84179a074f1a2a309bb9cf7cd6bfdb2b6541f20c6bf9436c0ba22a652b
410
410
  standard-performance (1.9.0) sha256=49483d31be448292951d80e5e67cdcb576c2502103c7b40aec6f1b6e9c88e3f2
411
411
  stringio (3.2.0) sha256=c37cb2e58b4ffbd33fe5cd948c05934af997b36e0b6ca6fdf43afa234cf222e1
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: ..
3
3
  specs:
4
- e2e (0.5.0)
4
+ e2e (0.6.0)
5
5
  playwright-ruby-client (>= 1.40.0)
6
6
  rack
7
7
  rackup
@@ -120,7 +120,7 @@ GEM
120
120
  reline (>= 0.4.2)
121
121
  json (2.18.1)
122
122
  language_server-protocol (3.17.0.5)
123
- lefthook (2.1.0)
123
+ lefthook (2.1.1)
124
124
  lint_roller (1.1.0)
125
125
  logger (1.7.0)
126
126
  loofah (2.25.0)
@@ -224,7 +224,7 @@ GEM
224
224
  zeitwerk (~> 2.6)
225
225
  rainbow (3.1.1)
226
226
  rake (13.3.1)
227
- rdoc (7.1.0)
227
+ rdoc (7.2.0)
228
228
  erb
229
229
  psych (>= 4.0.0)
230
230
  tsort
@@ -244,7 +244,7 @@ GEM
244
244
  diff-lcs (>= 1.2.0, < 2.0)
245
245
  rspec-support (~> 3.13.0)
246
246
  rspec-support (3.13.7)
247
- rubocop (1.82.1)
247
+ rubocop (1.84.2)
248
248
  json (~> 2.3)
249
249
  language_server-protocol (~> 3.17.0.2)
250
250
  lint_roller (~> 1.1.0)
@@ -252,7 +252,7 @@ GEM
252
252
  parser (>= 3.3.0.2)
253
253
  rainbow (>= 2.2.2, < 4.0)
254
254
  regexp_parser (>= 2.9.3, < 3.0)
255
- rubocop-ast (>= 1.48.0, < 2.0)
255
+ rubocop-ast (>= 1.49.0, < 2.0)
256
256
  ruby-progressbar (~> 1.7)
257
257
  unicode-display_width (>= 2.4.0, < 4.0)
258
258
  rubocop-ast (1.49.0)
@@ -273,10 +273,10 @@ GEM
273
273
  simplecov_json_formatter (~> 0.1)
274
274
  simplecov-html (0.13.2)
275
275
  simplecov_json_formatter (0.1.4)
276
- standard (1.53.0)
276
+ standard (1.54.0)
277
277
  language_server-protocol (~> 3.17.0.2)
278
278
  lint_roller (~> 1.0)
279
- rubocop (~> 1.82.0)
279
+ rubocop (~> 1.84.0)
280
280
  standard-custom (~> 1.0.0)
281
281
  standard-performance (~> 1.8)
282
282
  standard-custom (1.0.2)
@@ -351,7 +351,7 @@ CHECKSUMS
351
351
  diff-lcs (1.6.2) sha256=9ae0d2cba7d4df3075fe8cd8602a8604993efc0dfa934cff568969efb1909962
352
352
  docile (1.4.1) sha256=96159be799bfa73cdb721b840e9802126e4e03dfc26863db73647204c727f21e
353
353
  drb (2.2.3) sha256=0b00d6fdb50995fe4a45dea13663493c841112e4068656854646f418fda13373
354
- e2e (0.5.0)
354
+ e2e (0.6.0)
355
355
  erb (6.0.1) sha256=28ecdd99c5472aebd5674d6061e3c6b0a45c049578b071e5a52c2a7f13c197e5
356
356
  erubi (1.13.1) sha256=a082103b0885dbc5ecf1172fede897f9ebdb745a4b97a5e8dc63953db1ee4ad9
357
357
  globalid (1.3.0) sha256=05c639ad6eb4594522a0b07983022f04aa7254626ab69445a0e493aa3786ff11
@@ -360,7 +360,7 @@ CHECKSUMS
360
360
  irb (1.17.0) sha256=168c4ddb93d8a361a045c41d92b2952c7a118fa73f23fe14e55609eb7a863aae
361
361
  json (2.18.1) sha256=fe112755501b8d0466b5ada6cf50c8c3f41e897fa128ac5d263ec09eedc9f986
362
362
  language_server-protocol (3.17.0.5) sha256=fd1e39a51a28bf3eec959379985a72e296e9f9acfce46f6a79d31ca8760803cc
363
- lefthook (2.1.0) sha256=a100dc90139806e62b9aa40cf32e9edf34f6cff10c8b55ebd14a1b0add4b86bf
363
+ lefthook (2.1.1) sha256=1b4ce49fbadb3f6584c07daaa9164e560e27bb5aba18446bb9de2378fcf3f5b6
364
364
  lint_roller (1.1.0) sha256=2c0c845b632a7d172cb849cc90c1bce937a28c5c8ccccb50dfd46a485003cc87
365
365
  logger (1.7.0) sha256=196edec7cc44b66cfb40f9755ce11b392f21f7967696af15d274dde7edff0203
366
366
  loofah (2.25.0) sha256=df5ed7ac3bac6a4ec802df3877ee5cc86d027299f8952e6243b3dac446b060e6
@@ -402,7 +402,7 @@ CHECKSUMS
402
402
  railties (7.1.6) sha256=2a10e97f2eaca66d11f0fef4b1f4d826e6ee28d4cf01ff16624420dd45e7de1c
403
403
  rainbow (3.1.1) sha256=039491aa3a89f42efa1d6dec2fc4e62ede96eb6acd95e52f1ad581182b79bc6a
404
404
  rake (13.3.1) sha256=8c9e89d09f66a26a01264e7e3480ec0607f0c497a861ef16063604b1b08eb19c
405
- rdoc (7.1.0) sha256=494899df0706c178596ca6e1d50f1b7eb285a9b2aae715be5abd742734f17363
405
+ rdoc (7.2.0) sha256=8650f76cd4009c3b54955eb5d7e3a075c60a57276766ebf36f9085e8c9f23192
406
406
  regexp_parser (2.11.3) sha256=ca13f381a173b7a93450e53459075c9b76a10433caadcb2f1180f2c741fc55a4
407
407
  reline (0.6.3) sha256=1198b04973565b36ec0f11542ab3f5cfeeec34823f4e54cebde90968092b1835
408
408
  rspec (3.13.2) sha256=206284a08ad798e61f86d7ca3e376718d52c0bc944626b2349266f239f820587
@@ -410,7 +410,7 @@ CHECKSUMS
410
410
  rspec-expectations (3.13.5) sha256=33a4d3a1d95060aea4c94e9f237030a8f9eae5615e9bd85718fe3a09e4b58836
411
411
  rspec-mocks (3.13.7) sha256=0979034e64b1d7a838aaaddf12bf065ea4dc40ef3d4c39f01f93ae2c66c62b1c
412
412
  rspec-support (3.13.7) sha256=0640e5570872aafefd79867901deeeeb40b0c9875a36b983d85f54fb7381c47c
413
- rubocop (1.82.1) sha256=09f1a6a654a960eda767aebea33e47603080f8e9c9a3f019bf9b94c9cab5e273
413
+ rubocop (1.84.2) sha256=5692cea54168f3dc8cb79a6fe95c5424b7ea893c707ad7a4307b0585e88dbf5f
414
414
  rubocop-ast (1.49.0) sha256=49c3676d3123a0923d333e20c6c2dbaaae2d2287b475273fddee0c61da9f71fd
415
415
  rubocop-performance (1.26.1) sha256=cd19b936ff196df85829d264b522fd4f98b6c89ad271fa52744a8c11b8f71834
416
416
  rubocop-rspec (3.9.0) sha256=8fa70a3619408237d789aeecfb9beef40576acc855173e60939d63332fdb55e2
@@ -419,7 +419,7 @@ CHECKSUMS
419
419
  simplecov (0.22.0) sha256=fe2622c7834ff23b98066bb0a854284b2729a569ac659f82621fc22ef36213a5
420
420
  simplecov-html (0.13.2) sha256=bd0b8e54e7c2d7685927e8d6286466359b6f16b18cb0df47b508e8d73c777246
421
421
  simplecov_json_formatter (0.1.4) sha256=529418fbe8de1713ac2b2d612aa3daa56d316975d307244399fa4838c601b428
422
- standard (1.53.0) sha256=f3c9493385db7079d0abce6f7582f553122156997b81258cd361d3480eeacf9c
422
+ standard (1.54.0) sha256=7a4b08f83d9893083c8f03bc486f0feeb6a84d48233b40829c03ef4767ea0100
423
423
  standard-custom (1.0.2) sha256=424adc84179a074f1a2a309bb9cf7cd6bfdb2b6541f20c6bf9436c0ba22a652b
424
424
  standard-performance (1.9.0) sha256=49483d31be448292951d80e5e67cdcb576c2502103c7b40aec6f1b6e9c88e3f2
425
425
  stringio (3.2.0) sha256=c37cb2e58b4ffbd33fe5cd948c05934af997b36e0b6ca6fdf43afa234cf222e1
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: ..
3
3
  specs:
4
- e2e (0.5.0)
4
+ e2e (0.6.0)
5
5
  playwright-ruby-client (>= 1.40.0)
6
6
  rack
7
7
  rackup
@@ -114,7 +114,7 @@ GEM
114
114
  reline (>= 0.4.2)
115
115
  json (2.18.1)
116
116
  language_server-protocol (3.17.0.5)
117
- lefthook (2.1.0)
117
+ lefthook (2.1.1)
118
118
  lint_roller (1.1.0)
119
119
  logger (1.7.0)
120
120
  loofah (2.25.0)
@@ -217,7 +217,7 @@ GEM
217
217
  zeitwerk (~> 2.6)
218
218
  rainbow (3.1.1)
219
219
  rake (13.3.1)
220
- rdoc (7.1.0)
220
+ rdoc (7.2.0)
221
221
  erb
222
222
  psych (>= 4.0.0)
223
223
  tsort
@@ -237,7 +237,7 @@ GEM
237
237
  diff-lcs (>= 1.2.0, < 2.0)
238
238
  rspec-support (~> 3.13.0)
239
239
  rspec-support (3.13.7)
240
- rubocop (1.82.1)
240
+ rubocop (1.84.2)
241
241
  json (~> 2.3)
242
242
  language_server-protocol (~> 3.17.0.2)
243
243
  lint_roller (~> 1.1.0)
@@ -245,7 +245,7 @@ GEM
245
245
  parser (>= 3.3.0.2)
246
246
  rainbow (>= 2.2.2, < 4.0)
247
247
  regexp_parser (>= 2.9.3, < 3.0)
248
- rubocop-ast (>= 1.48.0, < 2.0)
248
+ rubocop-ast (>= 1.49.0, < 2.0)
249
249
  ruby-progressbar (~> 1.7)
250
250
  unicode-display_width (>= 2.4.0, < 4.0)
251
251
  rubocop-ast (1.49.0)
@@ -266,10 +266,10 @@ GEM
266
266
  simplecov_json_formatter (~> 0.1)
267
267
  simplecov-html (0.13.2)
268
268
  simplecov_json_formatter (0.1.4)
269
- standard (1.53.0)
269
+ standard (1.54.0)
270
270
  language_server-protocol (~> 3.17.0.2)
271
271
  lint_roller (~> 1.0)
272
- rubocop (~> 1.82.0)
272
+ rubocop (~> 1.84.0)
273
273
  standard-custom (~> 1.0.0)
274
274
  standard-performance (~> 1.8)
275
275
  standard-custom (1.0.2)
@@ -345,7 +345,7 @@ CHECKSUMS
345
345
  diff-lcs (1.6.2) sha256=9ae0d2cba7d4df3075fe8cd8602a8604993efc0dfa934cff568969efb1909962
346
346
  docile (1.4.1) sha256=96159be799bfa73cdb721b840e9802126e4e03dfc26863db73647204c727f21e
347
347
  drb (2.2.3) sha256=0b00d6fdb50995fe4a45dea13663493c841112e4068656854646f418fda13373
348
- e2e (0.5.0)
348
+ e2e (0.6.0)
349
349
  erb (6.0.1) sha256=28ecdd99c5472aebd5674d6061e3c6b0a45c049578b071e5a52c2a7f13c197e5
350
350
  erubi (1.13.1) sha256=a082103b0885dbc5ecf1172fede897f9ebdb745a4b97a5e8dc63953db1ee4ad9
351
351
  globalid (1.3.0) sha256=05c639ad6eb4594522a0b07983022f04aa7254626ab69445a0e493aa3786ff11
@@ -354,7 +354,7 @@ CHECKSUMS
354
354
  irb (1.17.0) sha256=168c4ddb93d8a361a045c41d92b2952c7a118fa73f23fe14e55609eb7a863aae
355
355
  json (2.18.1) sha256=fe112755501b8d0466b5ada6cf50c8c3f41e897fa128ac5d263ec09eedc9f986
356
356
  language_server-protocol (3.17.0.5) sha256=fd1e39a51a28bf3eec959379985a72e296e9f9acfce46f6a79d31ca8760803cc
357
- lefthook (2.1.0) sha256=a100dc90139806e62b9aa40cf32e9edf34f6cff10c8b55ebd14a1b0add4b86bf
357
+ lefthook (2.1.1) sha256=1b4ce49fbadb3f6584c07daaa9164e560e27bb5aba18446bb9de2378fcf3f5b6
358
358
  lint_roller (1.1.0) sha256=2c0c845b632a7d172cb849cc90c1bce937a28c5c8ccccb50dfd46a485003cc87
359
359
  logger (1.7.0) sha256=196edec7cc44b66cfb40f9755ce11b392f21f7967696af15d274dde7edff0203
360
360
  loofah (2.25.0) sha256=df5ed7ac3bac6a4ec802df3877ee5cc86d027299f8952e6243b3dac446b060e6
@@ -395,7 +395,7 @@ CHECKSUMS
395
395
  railties (7.2.3) sha256=6eb010a6bfe6f223e783f739ddfcbdb5b88b1f3a87f7739f0a0685e466250422
396
396
  rainbow (3.1.1) sha256=039491aa3a89f42efa1d6dec2fc4e62ede96eb6acd95e52f1ad581182b79bc6a
397
397
  rake (13.3.1) sha256=8c9e89d09f66a26a01264e7e3480ec0607f0c497a861ef16063604b1b08eb19c
398
- rdoc (7.1.0) sha256=494899df0706c178596ca6e1d50f1b7eb285a9b2aae715be5abd742734f17363
398
+ rdoc (7.2.0) sha256=8650f76cd4009c3b54955eb5d7e3a075c60a57276766ebf36f9085e8c9f23192
399
399
  regexp_parser (2.11.3) sha256=ca13f381a173b7a93450e53459075c9b76a10433caadcb2f1180f2c741fc55a4
400
400
  reline (0.6.3) sha256=1198b04973565b36ec0f11542ab3f5cfeeec34823f4e54cebde90968092b1835
401
401
  rspec (3.13.2) sha256=206284a08ad798e61f86d7ca3e376718d52c0bc944626b2349266f239f820587
@@ -403,7 +403,7 @@ CHECKSUMS
403
403
  rspec-expectations (3.13.5) sha256=33a4d3a1d95060aea4c94e9f237030a8f9eae5615e9bd85718fe3a09e4b58836
404
404
  rspec-mocks (3.13.7) sha256=0979034e64b1d7a838aaaddf12bf065ea4dc40ef3d4c39f01f93ae2c66c62b1c
405
405
  rspec-support (3.13.7) sha256=0640e5570872aafefd79867901deeeeb40b0c9875a36b983d85f54fb7381c47c
406
- rubocop (1.82.1) sha256=09f1a6a654a960eda767aebea33e47603080f8e9c9a3f019bf9b94c9cab5e273
406
+ rubocop (1.84.2) sha256=5692cea54168f3dc8cb79a6fe95c5424b7ea893c707ad7a4307b0585e88dbf5f
407
407
  rubocop-ast (1.49.0) sha256=49c3676d3123a0923d333e20c6c2dbaaae2d2287b475273fddee0c61da9f71fd
408
408
  rubocop-performance (1.26.1) sha256=cd19b936ff196df85829d264b522fd4f98b6c89ad271fa52744a8c11b8f71834
409
409
  rubocop-rspec (3.9.0) sha256=8fa70a3619408237d789aeecfb9beef40576acc855173e60939d63332fdb55e2
@@ -412,7 +412,7 @@ CHECKSUMS
412
412
  simplecov (0.22.0) sha256=fe2622c7834ff23b98066bb0a854284b2729a569ac659f82621fc22ef36213a5
413
413
  simplecov-html (0.13.2) sha256=bd0b8e54e7c2d7685927e8d6286466359b6f16b18cb0df47b508e8d73c777246
414
414
  simplecov_json_formatter (0.1.4) sha256=529418fbe8de1713ac2b2d612aa3daa56d316975d307244399fa4838c601b428
415
- standard (1.53.0) sha256=f3c9493385db7079d0abce6f7582f553122156997b81258cd361d3480eeacf9c
415
+ standard (1.54.0) sha256=7a4b08f83d9893083c8f03bc486f0feeb6a84d48233b40829c03ef4767ea0100
416
416
  standard-custom (1.0.2) sha256=424adc84179a074f1a2a309bb9cf7cd6bfdb2b6541f20c6bf9436c0ba22a652b
417
417
  standard-performance (1.9.0) sha256=49483d31be448292951d80e5e67cdcb576c2502103c7b40aec6f1b6e9c88e3f2
418
418
  stringio (3.2.0) sha256=c37cb2e58b4ffbd33fe5cd948c05934af997b36e0b6ca6fdf43afa234cf222e1
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: ..
3
3
  specs:
4
- e2e (0.5.0)
4
+ e2e (0.6.0)
5
5
  playwright-ruby-client (>= 1.40.0)
6
6
  rack
7
7
  rackup
@@ -111,7 +111,7 @@ GEM
111
111
  reline (>= 0.4.2)
112
112
  json (2.18.1)
113
113
  language_server-protocol (3.17.0.5)
114
- lefthook (2.1.0)
114
+ lefthook (2.1.1)
115
115
  lint_roller (1.1.0)
116
116
  logger (1.7.0)
117
117
  loofah (2.25.0)
@@ -213,7 +213,7 @@ GEM
213
213
  zeitwerk (~> 2.6)
214
214
  rainbow (3.1.1)
215
215
  rake (13.3.1)
216
- rdoc (7.1.0)
216
+ rdoc (7.2.0)
217
217
  erb
218
218
  psych (>= 4.0.0)
219
219
  tsort
@@ -233,7 +233,7 @@ GEM
233
233
  diff-lcs (>= 1.2.0, < 2.0)
234
234
  rspec-support (~> 3.13.0)
235
235
  rspec-support (3.13.7)
236
- rubocop (1.82.1)
236
+ rubocop (1.84.2)
237
237
  json (~> 2.3)
238
238
  language_server-protocol (~> 3.17.0.2)
239
239
  lint_roller (~> 1.1.0)
@@ -241,7 +241,7 @@ GEM
241
241
  parser (>= 3.3.0.2)
242
242
  rainbow (>= 2.2.2, < 4.0)
243
243
  regexp_parser (>= 2.9.3, < 3.0)
244
- rubocop-ast (>= 1.48.0, < 2.0)
244
+ rubocop-ast (>= 1.49.0, < 2.0)
245
245
  ruby-progressbar (~> 1.7)
246
246
  unicode-display_width (>= 2.4.0, < 4.0)
247
247
  rubocop-ast (1.49.0)
@@ -262,10 +262,10 @@ GEM
262
262
  simplecov_json_formatter (~> 0.1)
263
263
  simplecov-html (0.13.2)
264
264
  simplecov_json_formatter (0.1.4)
265
- standard (1.53.0)
265
+ standard (1.54.0)
266
266
  language_server-protocol (~> 3.17.0.2)
267
267
  lint_roller (~> 1.0)
268
- rubocop (~> 1.82.0)
268
+ rubocop (~> 1.84.0)
269
269
  standard-custom (~> 1.0.0)
270
270
  standard-performance (~> 1.8)
271
271
  standard-custom (1.0.2)
@@ -341,7 +341,7 @@ CHECKSUMS
341
341
  diff-lcs (1.6.2) sha256=9ae0d2cba7d4df3075fe8cd8602a8604993efc0dfa934cff568969efb1909962
342
342
  docile (1.4.1) sha256=96159be799bfa73cdb721b840e9802126e4e03dfc26863db73647204c727f21e
343
343
  drb (2.2.3) sha256=0b00d6fdb50995fe4a45dea13663493c841112e4068656854646f418fda13373
344
- e2e (0.5.0)
344
+ e2e (0.6.0)
345
345
  erb (6.0.1) sha256=28ecdd99c5472aebd5674d6061e3c6b0a45c049578b071e5a52c2a7f13c197e5
346
346
  erubi (1.13.1) sha256=a082103b0885dbc5ecf1172fede897f9ebdb745a4b97a5e8dc63953db1ee4ad9
347
347
  globalid (1.3.0) sha256=05c639ad6eb4594522a0b07983022f04aa7254626ab69445a0e493aa3786ff11
@@ -350,7 +350,7 @@ CHECKSUMS
350
350
  irb (1.17.0) sha256=168c4ddb93d8a361a045c41d92b2952c7a118fa73f23fe14e55609eb7a863aae
351
351
  json (2.18.1) sha256=fe112755501b8d0466b5ada6cf50c8c3f41e897fa128ac5d263ec09eedc9f986
352
352
  language_server-protocol (3.17.0.5) sha256=fd1e39a51a28bf3eec959379985a72e296e9f9acfce46f6a79d31ca8760803cc
353
- lefthook (2.1.0) sha256=a100dc90139806e62b9aa40cf32e9edf34f6cff10c8b55ebd14a1b0add4b86bf
353
+ lefthook (2.1.1) sha256=1b4ce49fbadb3f6584c07daaa9164e560e27bb5aba18446bb9de2378fcf3f5b6
354
354
  lint_roller (1.1.0) sha256=2c0c845b632a7d172cb849cc90c1bce937a28c5c8ccccb50dfd46a485003cc87
355
355
  logger (1.7.0) sha256=196edec7cc44b66cfb40f9755ce11b392f21f7967696af15d274dde7edff0203
356
356
  loofah (2.25.0) sha256=df5ed7ac3bac6a4ec802df3877ee5cc86d027299f8952e6243b3dac446b060e6
@@ -391,7 +391,7 @@ CHECKSUMS
391
391
  railties (8.0.4) sha256=8203d853dcffab4abcdd05c193f101676a92068075464694790f6d8f72d5cb47
392
392
  rainbow (3.1.1) sha256=039491aa3a89f42efa1d6dec2fc4e62ede96eb6acd95e52f1ad581182b79bc6a
393
393
  rake (13.3.1) sha256=8c9e89d09f66a26a01264e7e3480ec0607f0c497a861ef16063604b1b08eb19c
394
- rdoc (7.1.0) sha256=494899df0706c178596ca6e1d50f1b7eb285a9b2aae715be5abd742734f17363
394
+ rdoc (7.2.0) sha256=8650f76cd4009c3b54955eb5d7e3a075c60a57276766ebf36f9085e8c9f23192
395
395
  regexp_parser (2.11.3) sha256=ca13f381a173b7a93450e53459075c9b76a10433caadcb2f1180f2c741fc55a4
396
396
  reline (0.6.3) sha256=1198b04973565b36ec0f11542ab3f5cfeeec34823f4e54cebde90968092b1835
397
397
  rspec (3.13.2) sha256=206284a08ad798e61f86d7ca3e376718d52c0bc944626b2349266f239f820587
@@ -399,7 +399,7 @@ CHECKSUMS
399
399
  rspec-expectations (3.13.5) sha256=33a4d3a1d95060aea4c94e9f237030a8f9eae5615e9bd85718fe3a09e4b58836
400
400
  rspec-mocks (3.13.7) sha256=0979034e64b1d7a838aaaddf12bf065ea4dc40ef3d4c39f01f93ae2c66c62b1c
401
401
  rspec-support (3.13.7) sha256=0640e5570872aafefd79867901deeeeb40b0c9875a36b983d85f54fb7381c47c
402
- rubocop (1.82.1) sha256=09f1a6a654a960eda767aebea33e47603080f8e9c9a3f019bf9b94c9cab5e273
402
+ rubocop (1.84.2) sha256=5692cea54168f3dc8cb79a6fe95c5424b7ea893c707ad7a4307b0585e88dbf5f
403
403
  rubocop-ast (1.49.0) sha256=49c3676d3123a0923d333e20c6c2dbaaae2d2287b475273fddee0c61da9f71fd
404
404
  rubocop-performance (1.26.1) sha256=cd19b936ff196df85829d264b522fd4f98b6c89ad271fa52744a8c11b8f71834
405
405
  rubocop-rspec (3.9.0) sha256=8fa70a3619408237d789aeecfb9beef40576acc855173e60939d63332fdb55e2
@@ -408,7 +408,7 @@ CHECKSUMS
408
408
  simplecov (0.22.0) sha256=fe2622c7834ff23b98066bb0a854284b2729a569ac659f82621fc22ef36213a5
409
409
  simplecov-html (0.13.2) sha256=bd0b8e54e7c2d7685927e8d6286466359b6f16b18cb0df47b508e8d73c777246
410
410
  simplecov_json_formatter (0.1.4) sha256=529418fbe8de1713ac2b2d612aa3daa56d316975d307244399fa4838c601b428
411
- standard (1.53.0) sha256=f3c9493385db7079d0abce6f7582f553122156997b81258cd361d3480eeacf9c
411
+ standard (1.54.0) sha256=7a4b08f83d9893083c8f03bc486f0feeb6a84d48233b40829c03ef4767ea0100
412
412
  standard-custom (1.0.2) sha256=424adc84179a074f1a2a309bb9cf7cd6bfdb2b6541f20c6bf9436c0ba22a652b
413
413
  standard-performance (1.9.0) sha256=49483d31be448292951d80e5e67cdcb576c2502103c7b40aec6f1b6e9c88e3f2
414
414
  stringio (3.2.0) sha256=c37cb2e58b4ffbd33fe5cd948c05934af997b36e0b6ca6fdf43afa234cf222e1
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: ..
3
3
  specs:
4
- e2e (0.5.0)
4
+ e2e (0.6.0)
5
5
  playwright-ruby-client (>= 1.40.0)
6
6
  rack
7
7
  rackup
@@ -113,7 +113,7 @@ GEM
113
113
  reline (>= 0.4.2)
114
114
  json (2.18.1)
115
115
  language_server-protocol (3.17.0.5)
116
- lefthook (2.1.0)
116
+ lefthook (2.1.1)
117
117
  lint_roller (1.1.0)
118
118
  logger (1.7.0)
119
119
  loofah (2.25.0)
@@ -215,7 +215,7 @@ GEM
215
215
  zeitwerk (~> 2.6)
216
216
  rainbow (3.1.1)
217
217
  rake (13.3.1)
218
- rdoc (7.1.0)
218
+ rdoc (7.2.0)
219
219
  erb
220
220
  psych (>= 4.0.0)
221
221
  tsort
@@ -235,7 +235,7 @@ GEM
235
235
  diff-lcs (>= 1.2.0, < 2.0)
236
236
  rspec-support (~> 3.13.0)
237
237
  rspec-support (3.13.7)
238
- rubocop (1.82.1)
238
+ rubocop (1.84.2)
239
239
  json (~> 2.3)
240
240
  language_server-protocol (~> 3.17.0.2)
241
241
  lint_roller (~> 1.1.0)
@@ -243,7 +243,7 @@ GEM
243
243
  parser (>= 3.3.0.2)
244
244
  rainbow (>= 2.2.2, < 4.0)
245
245
  regexp_parser (>= 2.9.3, < 3.0)
246
- rubocop-ast (>= 1.48.0, < 2.0)
246
+ rubocop-ast (>= 1.49.0, < 2.0)
247
247
  ruby-progressbar (~> 1.7)
248
248
  unicode-display_width (>= 2.4.0, < 4.0)
249
249
  rubocop-ast (1.49.0)
@@ -264,10 +264,10 @@ GEM
264
264
  simplecov_json_formatter (~> 0.1)
265
265
  simplecov-html (0.13.2)
266
266
  simplecov_json_formatter (0.1.4)
267
- standard (1.53.0)
267
+ standard (1.54.0)
268
268
  language_server-protocol (~> 3.17.0.2)
269
269
  lint_roller (~> 1.0)
270
- rubocop (~> 1.82.0)
270
+ rubocop (~> 1.84.0)
271
271
  standard-custom (~> 1.0.0)
272
272
  standard-performance (~> 1.8)
273
273
  standard-custom (1.0.2)
@@ -343,7 +343,7 @@ CHECKSUMS
343
343
  diff-lcs (1.6.2) sha256=9ae0d2cba7d4df3075fe8cd8602a8604993efc0dfa934cff568969efb1909962
344
344
  docile (1.4.1) sha256=96159be799bfa73cdb721b840e9802126e4e03dfc26863db73647204c727f21e
345
345
  drb (2.2.3) sha256=0b00d6fdb50995fe4a45dea13663493c841112e4068656854646f418fda13373
346
- e2e (0.5.0)
346
+ e2e (0.6.0)
347
347
  erb (6.0.1) sha256=28ecdd99c5472aebd5674d6061e3c6b0a45c049578b071e5a52c2a7f13c197e5
348
348
  erubi (1.13.1) sha256=a082103b0885dbc5ecf1172fede897f9ebdb745a4b97a5e8dc63953db1ee4ad9
349
349
  globalid (1.3.0) sha256=05c639ad6eb4594522a0b07983022f04aa7254626ab69445a0e493aa3786ff11
@@ -352,7 +352,7 @@ CHECKSUMS
352
352
  irb (1.17.0) sha256=168c4ddb93d8a361a045c41d92b2952c7a118fa73f23fe14e55609eb7a863aae
353
353
  json (2.18.1) sha256=fe112755501b8d0466b5ada6cf50c8c3f41e897fa128ac5d263ec09eedc9f986
354
354
  language_server-protocol (3.17.0.5) sha256=fd1e39a51a28bf3eec959379985a72e296e9f9acfce46f6a79d31ca8760803cc
355
- lefthook (2.1.0) sha256=a100dc90139806e62b9aa40cf32e9edf34f6cff10c8b55ebd14a1b0add4b86bf
355
+ lefthook (2.1.1) sha256=1b4ce49fbadb3f6584c07daaa9164e560e27bb5aba18446bb9de2378fcf3f5b6
356
356
  lint_roller (1.1.0) sha256=2c0c845b632a7d172cb849cc90c1bce937a28c5c8ccccb50dfd46a485003cc87
357
357
  logger (1.7.0) sha256=196edec7cc44b66cfb40f9755ce11b392f21f7967696af15d274dde7edff0203
358
358
  loofah (2.25.0) sha256=df5ed7ac3bac6a4ec802df3877ee5cc86d027299f8952e6243b3dac446b060e6
@@ -393,7 +393,7 @@ CHECKSUMS
393
393
  railties (8.1.2) sha256=1289ece76b4f7668fc46d07e55cc992b5b8751f2ad85548b7da351b8c59f8055
394
394
  rainbow (3.1.1) sha256=039491aa3a89f42efa1d6dec2fc4e62ede96eb6acd95e52f1ad581182b79bc6a
395
395
  rake (13.3.1) sha256=8c9e89d09f66a26a01264e7e3480ec0607f0c497a861ef16063604b1b08eb19c
396
- rdoc (7.1.0) sha256=494899df0706c178596ca6e1d50f1b7eb285a9b2aae715be5abd742734f17363
396
+ rdoc (7.2.0) sha256=8650f76cd4009c3b54955eb5d7e3a075c60a57276766ebf36f9085e8c9f23192
397
397
  regexp_parser (2.11.3) sha256=ca13f381a173b7a93450e53459075c9b76a10433caadcb2f1180f2c741fc55a4
398
398
  reline (0.6.3) sha256=1198b04973565b36ec0f11542ab3f5cfeeec34823f4e54cebde90968092b1835
399
399
  rspec (3.13.2) sha256=206284a08ad798e61f86d7ca3e376718d52c0bc944626b2349266f239f820587
@@ -401,7 +401,7 @@ CHECKSUMS
401
401
  rspec-expectations (3.13.5) sha256=33a4d3a1d95060aea4c94e9f237030a8f9eae5615e9bd85718fe3a09e4b58836
402
402
  rspec-mocks (3.13.7) sha256=0979034e64b1d7a838aaaddf12bf065ea4dc40ef3d4c39f01f93ae2c66c62b1c
403
403
  rspec-support (3.13.7) sha256=0640e5570872aafefd79867901deeeeb40b0c9875a36b983d85f54fb7381c47c
404
- rubocop (1.82.1) sha256=09f1a6a654a960eda767aebea33e47603080f8e9c9a3f019bf9b94c9cab5e273
404
+ rubocop (1.84.2) sha256=5692cea54168f3dc8cb79a6fe95c5424b7ea893c707ad7a4307b0585e88dbf5f
405
405
  rubocop-ast (1.49.0) sha256=49c3676d3123a0923d333e20c6c2dbaaae2d2287b475273fddee0c61da9f71fd
406
406
  rubocop-performance (1.26.1) sha256=cd19b936ff196df85829d264b522fd4f98b6c89ad271fa52744a8c11b8f71834
407
407
  rubocop-rspec (3.9.0) sha256=8fa70a3619408237d789aeecfb9beef40576acc855173e60939d63332fdb55e2
@@ -410,7 +410,7 @@ CHECKSUMS
410
410
  simplecov (0.22.0) sha256=fe2622c7834ff23b98066bb0a854284b2729a569ac659f82621fc22ef36213a5
411
411
  simplecov-html (0.13.2) sha256=bd0b8e54e7c2d7685927e8d6286466359b6f16b18cb0df47b508e8d73c777246
412
412
  simplecov_json_formatter (0.1.4) sha256=529418fbe8de1713ac2b2d612aa3daa56d316975d307244399fa4838c601b428
413
- standard (1.53.0) sha256=f3c9493385db7079d0abce6f7582f553122156997b81258cd361d3480eeacf9c
413
+ standard (1.54.0) sha256=7a4b08f83d9893083c8f03bc486f0feeb6a84d48233b40829c03ef4767ea0100
414
414
  standard-custom (1.0.2) sha256=424adc84179a074f1a2a309bb9cf7cd6bfdb2b6541f20c6bf9436c0ba22a652b
415
415
  standard-performance (1.9.0) sha256=49483d31be448292951d80e5e67cdcb576c2502103c7b40aec6f1b6e9c88e3f2
416
416
  stringio (3.2.0) sha256=c37cb2e58b4ffbd33fe5cd948c05934af997b36e0b6ca6fdf43afa234cf222e1
data/lib/e2e/dsl.rb CHANGED
@@ -1,6 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require "forwardable"
4
+ require "uri"
4
5
 
5
6
  module E2E
6
7
  module DSL
@@ -11,5 +12,133 @@ module E2E
11
12
  def page
12
13
  E2E.session
13
14
  end
15
+
16
+ # Waits until the provided block returns a truthy value.
17
+ # Raises E2E::Error on timeout for easier failure diagnostics.
18
+ def wait_for(timeout: E2E.config.wait_timeout, interval: 0.05, message: "Timed out waiting for condition")
19
+ result = nil
20
+ found = E2E.wait_until(timeout: timeout, interval: interval) do
21
+ result = yield
22
+ result
23
+ end
24
+
25
+ raise E2E::Error, message unless found
26
+
27
+ result
28
+ end
29
+
30
+ def wait_for_text(text, timeout: E2E.config.wait_timeout, interval: 0.05)
31
+ wait_for(
32
+ timeout: timeout,
33
+ interval: interval,
34
+ message: "Expected page to have text #{text.inspect} within #{timeout} seconds"
35
+ ) do
36
+ text_matches?(page.text, text)
37
+ end
38
+ end
39
+
40
+ def wait_for_current_path(expected_path, timeout: E2E.config.wait_timeout, interval: 0.05)
41
+ wait_for(
42
+ timeout: timeout,
43
+ interval: interval,
44
+ message: "Expected current path to be #{expected_path.inspect} within #{timeout} seconds"
45
+ ) do
46
+ current_path_matches?(expected_path)
47
+ end
48
+ end
49
+
50
+ def wait_for_flash(text = nil, type: nil, timeout: E2E.config.wait_timeout, interval: 0.05)
51
+ wait_for(
52
+ timeout: timeout,
53
+ interval: interval,
54
+ message: flash_timeout_message(text, type, timeout)
55
+ ) do
56
+ flashes = visible_flashes(type: type)
57
+ next false if flashes.empty?
58
+ next true if text.nil?
59
+
60
+ flashes.any? { |flash_text| text_matches?(flash_text, text) }
61
+ end
62
+ end
63
+
64
+ def click_button_and_wait_for_text(value, text, timeout: E2E.config.wait_timeout, interval: 0.05, **options)
65
+ click_button(value, **options)
66
+ wait_for_text(text, timeout: timeout, interval: interval)
67
+ end
68
+
69
+ def click_link_and_wait_for_text(value, text, timeout: E2E.config.wait_timeout, interval: 0.05, **options)
70
+ click_link(value, **options)
71
+ wait_for_text(text, timeout: timeout, interval: interval)
72
+ end
73
+
74
+ def click_button_and_wait_for_path(value, expected_path, timeout: E2E.config.wait_timeout, interval: 0.05, **options)
75
+ click_button(value, **options)
76
+ wait_for_current_path(expected_path, timeout: timeout, interval: interval)
77
+ end
78
+
79
+ def click_link_and_wait_for_path(value, expected_path, timeout: E2E.config.wait_timeout, interval: 0.05, **options)
80
+ click_link(value, **options)
81
+ wait_for_current_path(expected_path, timeout: timeout, interval: interval)
82
+ end
83
+
84
+ def click_button_and_wait_for_flash(value, text = nil, type: nil, timeout: E2E.config.wait_timeout, interval: 0.05, **options)
85
+ click_button(value, **options)
86
+ wait_for_flash(text, type: type, timeout: timeout, interval: interval)
87
+ end
88
+
89
+ def click_link_and_wait_for_flash(value, text = nil, type: nil, timeout: E2E.config.wait_timeout, interval: 0.05, **options)
90
+ click_link(value, **options)
91
+ wait_for_flash(text, type: type, timeout: timeout, interval: interval)
92
+ end
93
+
94
+ private
95
+
96
+ def flash_timeout_message(text, type, timeout)
97
+ scope = type ? "#{type} flash" : "flash"
98
+ return "Expected #{scope} within #{timeout} seconds" if text.nil?
99
+
100
+ "Expected #{scope} with text #{text.inspect} within #{timeout} seconds"
101
+ end
102
+
103
+ def visible_flashes(type: nil)
104
+ selector = flash_selector_for(type)
105
+ page.all(selector).select(&:visible?).map(&:text)
106
+ rescue
107
+ []
108
+ end
109
+
110
+ def flash_selector_for(type)
111
+ selectors = E2E.config.flash_selectors || E2E::Config::DEFAULT_FLASH_SELECTORS
112
+ key = normalize_flash_type(type)
113
+ selectors.fetch(key) { selectors.fetch(:any, E2E::Config::DEFAULT_FLASH_SELECTORS[:any]) }
114
+ end
115
+
116
+ def normalize_flash_type(type)
117
+ case type&.to_sym
118
+ when :notice, :success
119
+ :notice
120
+ when :alert, :error
121
+ :alert
122
+ else
123
+ :any
124
+ end
125
+ end
126
+
127
+ def current_path_matches?(expected_path)
128
+ actual_path = begin
129
+ URI.parse(page.current_url).path
130
+ rescue URI::InvalidURIError
131
+ page.current_url
132
+ end
133
+
134
+ text_matches?(actual_path, expected_path, exact: true)
135
+ end
136
+
137
+ def text_matches?(actual_text, expected_text, exact: false)
138
+ return actual_text.match?(expected_text) if expected_text.is_a?(Regexp)
139
+ return actual_text == expected_text if exact
140
+
141
+ actual_text.include?(expected_text)
142
+ end
14
143
  end
15
144
  end
data/lib/e2e/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module E2E
4
- VERSION = "0.5.0"
4
+ VERSION = "0.6.0"
5
5
  end
data/lib/e2e.rb CHANGED
@@ -55,7 +55,13 @@ module E2E
55
55
  end
56
56
 
57
57
  class Config
58
- attr_accessor :driver, :headless, :app, :browser_type, :wait_timeout
58
+ DEFAULT_FLASH_SELECTORS = {
59
+ any: "[role='alert'], [role='status'], [data-flash], [data-testid*='flash'], .flash, .notice, .alert, .toast",
60
+ notice: "[role='status'], [data-flash-type='notice'], [data-flash='notice'], .flash.notice, .flash-success, .notice",
61
+ alert: "[role='alert'], [data-flash-type='alert'], [data-flash='alert'], .flash.alert, .flash-error, .alert"
62
+ }.freeze
63
+
64
+ attr_accessor :driver, :headless, :app, :browser_type, :wait_timeout, :flash_selectors
59
65
 
60
66
  def initialize
61
67
  @driver = :playwright
@@ -63,6 +69,7 @@ module E2E
63
69
  @headless = ENV.fetch("HEADLESS", "true") == "true"
64
70
  @app = nil
65
71
  @wait_timeout = 5
72
+ @flash_selectors = DEFAULT_FLASH_SELECTORS.dup
66
73
  end
67
74
  end
68
75
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: e2e
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.0
4
+ version: 0.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alexey Poimtsev