capybara 3.0.0 → 3.36.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.
Files changed (308) hide show
  1. checksums.yaml +4 -4
  2. data/.yardopts +1 -1
  3. data/History.md +777 -10
  4. data/License.txt +1 -1
  5. data/README.md +75 -58
  6. data/lib/capybara/config.rb +29 -10
  7. data/lib/capybara/cucumber.rb +1 -1
  8. data/lib/capybara/driver/base.rb +22 -4
  9. data/lib/capybara/driver/node.rb +34 -9
  10. data/lib/capybara/dsl.rb +14 -6
  11. data/lib/capybara/helpers.rb +52 -7
  12. data/lib/capybara/minitest/spec.rb +173 -84
  13. data/lib/capybara/minitest.rb +250 -144
  14. data/lib/capybara/node/actions.rb +248 -124
  15. data/lib/capybara/node/base.rb +34 -20
  16. data/lib/capybara/node/document.rb +14 -2
  17. data/lib/capybara/node/document_matchers.rb +13 -15
  18. data/lib/capybara/node/element.rb +339 -113
  19. data/lib/capybara/node/finders.rb +95 -82
  20. data/lib/capybara/node/matchers.rb +338 -157
  21. data/lib/capybara/node/simple.rb +54 -15
  22. data/lib/capybara/queries/active_element_query.rb +18 -0
  23. data/lib/capybara/queries/ancestor_query.rb +9 -10
  24. data/lib/capybara/queries/base_query.rb +25 -18
  25. data/lib/capybara/queries/current_path_query.rb +16 -6
  26. data/lib/capybara/queries/match_query.rb +11 -0
  27. data/lib/capybara/queries/selector_query.rb +600 -103
  28. data/lib/capybara/queries/sibling_query.rb +9 -7
  29. data/lib/capybara/queries/style_query.rb +45 -0
  30. data/lib/capybara/queries/text_query.rb +40 -22
  31. data/lib/capybara/queries/title_query.rb +2 -2
  32. data/lib/capybara/rack_test/browser.rb +47 -28
  33. data/lib/capybara/rack_test/driver.rb +12 -3
  34. data/lib/capybara/rack_test/errors.rb +6 -0
  35. data/lib/capybara/rack_test/form.rb +53 -50
  36. data/lib/capybara/rack_test/node.rb +114 -37
  37. data/lib/capybara/rails.rb +1 -1
  38. data/lib/capybara/registration_container.rb +44 -0
  39. data/lib/capybara/registrations/drivers.rb +42 -0
  40. data/lib/capybara/registrations/patches/puma_ssl.rb +29 -0
  41. data/lib/capybara/registrations/servers.rb +45 -0
  42. data/lib/capybara/result.rb +86 -52
  43. data/lib/capybara/rspec/features.rb +8 -10
  44. data/lib/capybara/rspec/matcher_proxies.rb +39 -18
  45. data/lib/capybara/rspec/matchers/base.rb +111 -0
  46. data/lib/capybara/rspec/matchers/become_closed.rb +33 -0
  47. data/lib/capybara/rspec/matchers/compound.rb +88 -0
  48. data/lib/capybara/rspec/matchers/count_sugar.rb +37 -0
  49. data/lib/capybara/rspec/matchers/have_ancestor.rb +28 -0
  50. data/lib/capybara/rspec/matchers/have_current_path.rb +29 -0
  51. data/lib/capybara/rspec/matchers/have_selector.rb +77 -0
  52. data/lib/capybara/rspec/matchers/have_sibling.rb +27 -0
  53. data/lib/capybara/rspec/matchers/have_text.rb +33 -0
  54. data/lib/capybara/rspec/matchers/have_title.rb +29 -0
  55. data/lib/capybara/rspec/matchers/match_selector.rb +27 -0
  56. data/lib/capybara/rspec/matchers/match_style.rb +43 -0
  57. data/lib/capybara/rspec/matchers/spatial_sugar.rb +39 -0
  58. data/lib/capybara/rspec/matchers.rb +138 -316
  59. data/lib/capybara/rspec.rb +3 -2
  60. data/lib/capybara/selector/builders/css_builder.rb +84 -0
  61. data/lib/capybara/selector/builders/xpath_builder.rb +71 -0
  62. data/lib/capybara/selector/css.rb +89 -12
  63. data/lib/capybara/selector/definition/button.rb +68 -0
  64. data/lib/capybara/selector/definition/checkbox.rb +26 -0
  65. data/lib/capybara/selector/definition/css.rb +10 -0
  66. data/lib/capybara/selector/definition/datalist_input.rb +35 -0
  67. data/lib/capybara/selector/definition/datalist_option.rb +25 -0
  68. data/lib/capybara/selector/definition/element.rb +28 -0
  69. data/lib/capybara/selector/definition/field.rb +40 -0
  70. data/lib/capybara/selector/definition/fieldset.rb +14 -0
  71. data/lib/capybara/selector/definition/file_field.rb +13 -0
  72. data/lib/capybara/selector/definition/fillable_field.rb +33 -0
  73. data/lib/capybara/selector/definition/frame.rb +17 -0
  74. data/lib/capybara/selector/definition/id.rb +6 -0
  75. data/lib/capybara/selector/definition/label.rb +62 -0
  76. data/lib/capybara/selector/definition/link.rb +54 -0
  77. data/lib/capybara/selector/definition/link_or_button.rb +16 -0
  78. data/lib/capybara/selector/definition/option.rb +27 -0
  79. data/lib/capybara/selector/definition/radio_button.rb +27 -0
  80. data/lib/capybara/selector/definition/select.rb +81 -0
  81. data/lib/capybara/selector/definition/table.rb +109 -0
  82. data/lib/capybara/selector/definition/table_row.rb +21 -0
  83. data/lib/capybara/selector/definition/xpath.rb +5 -0
  84. data/lib/capybara/selector/definition.rb +279 -0
  85. data/lib/capybara/selector/filter.rb +1 -0
  86. data/lib/capybara/selector/filter_set.rb +72 -27
  87. data/lib/capybara/selector/filters/base.rb +45 -2
  88. data/lib/capybara/selector/filters/expression_filter.rb +5 -6
  89. data/lib/capybara/selector/filters/locator_filter.rb +29 -0
  90. data/lib/capybara/selector/filters/node_filter.rb +18 -4
  91. data/lib/capybara/selector/regexp_disassembler.rb +214 -0
  92. data/lib/capybara/selector/selector.rb +85 -200
  93. data/lib/capybara/selector/xpath_extensions.rb +17 -0
  94. data/lib/capybara/selector.rb +226 -537
  95. data/lib/capybara/selenium/atoms/getAttribute.min.js +1 -0
  96. data/lib/capybara/selenium/atoms/isDisplayed.min.js +1 -0
  97. data/lib/capybara/selenium/atoms/src/getAttribute.js +161 -0
  98. data/lib/capybara/selenium/atoms/src/isDisplayed.js +454 -0
  99. data/lib/capybara/selenium/driver.rb +296 -238
  100. data/lib/capybara/selenium/driver_specializations/chrome_driver.rb +117 -0
  101. data/lib/capybara/selenium/driver_specializations/edge_driver.rb +124 -0
  102. data/lib/capybara/selenium/driver_specializations/firefox_driver.rb +89 -0
  103. data/lib/capybara/selenium/driver_specializations/internet_explorer_driver.rb +26 -0
  104. data/lib/capybara/selenium/driver_specializations/safari_driver.rb +24 -0
  105. data/lib/capybara/selenium/extensions/file_input_click_emulation.rb +34 -0
  106. data/lib/capybara/selenium/extensions/find.rb +110 -0
  107. data/lib/capybara/selenium/extensions/html5_drag.rb +228 -0
  108. data/lib/capybara/selenium/extensions/modifier_keys_stack.rb +28 -0
  109. data/lib/capybara/selenium/extensions/scroll.rb +76 -0
  110. data/lib/capybara/selenium/logger_suppressor.rb +40 -0
  111. data/lib/capybara/selenium/node.rb +436 -166
  112. data/lib/capybara/selenium/nodes/chrome_node.rb +137 -0
  113. data/lib/capybara/selenium/nodes/edge_node.rb +104 -0
  114. data/lib/capybara/selenium/nodes/firefox_node.rb +136 -0
  115. data/lib/capybara/selenium/nodes/ie_node.rb +22 -0
  116. data/lib/capybara/selenium/nodes/safari_node.rb +118 -0
  117. data/lib/capybara/selenium/patches/action_pauser.rb +26 -0
  118. data/lib/capybara/selenium/patches/atoms.rb +18 -0
  119. data/lib/capybara/selenium/patches/is_displayed.rb +16 -0
  120. data/lib/capybara/selenium/patches/logs.rb +45 -0
  121. data/lib/capybara/selenium/patches/pause_duration_fix.rb +9 -0
  122. data/lib/capybara/selenium/patches/persistent_client.rb +20 -0
  123. data/lib/capybara/server/animation_disabler.rb +69 -0
  124. data/lib/capybara/server/checker.rb +44 -0
  125. data/lib/capybara/server/middleware.rb +71 -0
  126. data/lib/capybara/server.rb +58 -67
  127. data/lib/capybara/session/config.rb +38 -6
  128. data/lib/capybara/session/matchers.rb +26 -19
  129. data/lib/capybara/session.rb +258 -190
  130. data/lib/capybara/spec/public/jquery.js +5 -5
  131. data/lib/capybara/spec/public/offset.js +6 -0
  132. data/lib/capybara/spec/public/test.js +122 -8
  133. data/lib/capybara/spec/session/accept_alert_spec.rb +11 -11
  134. data/lib/capybara/spec/session/accept_confirm_spec.rb +3 -3
  135. data/lib/capybara/spec/session/accept_prompt_spec.rb +9 -10
  136. data/lib/capybara/spec/session/active_element_spec.rb +31 -0
  137. data/lib/capybara/spec/session/all_spec.rb +135 -42
  138. data/lib/capybara/spec/session/ancestor_spec.rb +24 -19
  139. data/lib/capybara/spec/session/assert_all_of_selectors_spec.rb +67 -38
  140. data/lib/capybara/spec/session/{assert_current_path.rb → assert_current_path_spec.rb} +20 -18
  141. data/lib/capybara/spec/session/assert_selector_spec.rb +143 -0
  142. data/lib/capybara/spec/session/assert_style_spec.rb +26 -0
  143. data/lib/capybara/spec/session/{assert_text.rb → assert_text_spec.rb} +62 -38
  144. data/lib/capybara/spec/session/{assert_title.rb → assert_title_spec.rb} +12 -12
  145. data/lib/capybara/spec/session/attach_file_spec.rb +120 -72
  146. data/lib/capybara/spec/session/body_spec.rb +11 -13
  147. data/lib/capybara/spec/session/check_spec.rb +111 -51
  148. data/lib/capybara/spec/session/choose_spec.rb +62 -30
  149. data/lib/capybara/spec/session/click_button_spec.rb +227 -161
  150. data/lib/capybara/spec/session/click_link_or_button_spec.rb +49 -30
  151. data/lib/capybara/spec/session/click_link_spec.rb +78 -55
  152. data/lib/capybara/spec/session/current_scope_spec.rb +7 -7
  153. data/lib/capybara/spec/session/current_url_spec.rb +44 -37
  154. data/lib/capybara/spec/session/dismiss_confirm_spec.rb +3 -3
  155. data/lib/capybara/spec/session/dismiss_prompt_spec.rb +2 -2
  156. data/lib/capybara/spec/session/element/{assert_match_selector.rb → assert_match_selector_spec.rb} +11 -9
  157. data/lib/capybara/spec/session/element/match_css_spec.rb +18 -10
  158. data/lib/capybara/spec/session/element/match_xpath_spec.rb +8 -6
  159. data/lib/capybara/spec/session/element/matches_selector_spec.rb +70 -56
  160. data/lib/capybara/spec/session/evaluate_async_script_spec.rb +7 -7
  161. data/lib/capybara/spec/session/evaluate_script_spec.rb +28 -8
  162. data/lib/capybara/spec/session/execute_script_spec.rb +8 -7
  163. data/lib/capybara/spec/session/fill_in_spec.rb +104 -44
  164. data/lib/capybara/spec/session/find_button_spec.rb +23 -23
  165. data/lib/capybara/spec/session/find_by_id_spec.rb +8 -8
  166. data/lib/capybara/spec/session/find_field_spec.rb +33 -31
  167. data/lib/capybara/spec/session/find_link_spec.rb +32 -14
  168. data/lib/capybara/spec/session/find_spec.rb +236 -141
  169. data/lib/capybara/spec/session/first_spec.rb +44 -43
  170. data/lib/capybara/spec/session/frame/frame_title_spec.rb +6 -6
  171. data/lib/capybara/spec/session/frame/frame_url_spec.rb +6 -6
  172. data/lib/capybara/spec/session/frame/switch_to_frame_spec.rb +32 -20
  173. data/lib/capybara/spec/session/frame/within_frame_spec.rb +44 -19
  174. data/lib/capybara/spec/session/go_back_spec.rb +1 -1
  175. data/lib/capybara/spec/session/go_forward_spec.rb +1 -1
  176. data/lib/capybara/spec/session/has_all_selectors_spec.rb +18 -18
  177. data/lib/capybara/spec/session/has_ancestor_spec.rb +46 -0
  178. data/lib/capybara/spec/session/has_any_selectors_spec.rb +29 -0
  179. data/lib/capybara/spec/session/has_button_spec.rb +92 -12
  180. data/lib/capybara/spec/session/has_css_spec.rb +271 -137
  181. data/lib/capybara/spec/session/has_current_path_spec.rb +48 -33
  182. data/lib/capybara/spec/session/has_field_spec.rb +137 -58
  183. data/lib/capybara/spec/session/has_link_spec.rb +30 -6
  184. data/lib/capybara/spec/session/has_none_selectors_spec.rb +26 -24
  185. data/lib/capybara/spec/session/has_select_spec.rb +75 -47
  186. data/lib/capybara/spec/session/has_selector_spec.rb +102 -69
  187. data/lib/capybara/spec/session/has_sibling_spec.rb +50 -0
  188. data/lib/capybara/spec/session/has_table_spec.rb +170 -4
  189. data/lib/capybara/spec/session/has_text_spec.rb +108 -52
  190. data/lib/capybara/spec/session/has_title_spec.rb +19 -14
  191. data/lib/capybara/spec/session/has_xpath_spec.rb +56 -38
  192. data/lib/capybara/spec/session/{headers.rb → headers_spec.rb} +1 -1
  193. data/lib/capybara/spec/session/html_spec.rb +13 -6
  194. data/lib/capybara/spec/session/matches_style_spec.rb +35 -0
  195. data/lib/capybara/spec/session/node_spec.rb +871 -122
  196. data/lib/capybara/spec/session/node_wrapper_spec.rb +15 -12
  197. data/lib/capybara/spec/session/refresh_spec.rb +9 -7
  198. data/lib/capybara/spec/session/reset_session_spec.rb +52 -37
  199. data/lib/capybara/spec/session/{response_code.rb → response_code_spec.rb} +1 -1
  200. data/lib/capybara/spec/session/save_and_open_page_spec.rb +2 -2
  201. data/lib/capybara/spec/session/save_and_open_screenshot_spec.rb +5 -4
  202. data/lib/capybara/spec/session/save_page_spec.rb +41 -38
  203. data/lib/capybara/spec/session/save_screenshot_spec.rb +13 -11
  204. data/lib/capybara/spec/session/screenshot_spec.rb +2 -2
  205. data/lib/capybara/spec/session/scroll_spec.rb +117 -0
  206. data/lib/capybara/spec/session/select_spec.rb +102 -76
  207. data/lib/capybara/spec/session/selectors_spec.rb +51 -18
  208. data/lib/capybara/spec/session/sibling_spec.rb +9 -9
  209. data/lib/capybara/spec/session/text_spec.rb +26 -24
  210. data/lib/capybara/spec/session/title_spec.rb +8 -6
  211. data/lib/capybara/spec/session/uncheck_spec.rb +40 -21
  212. data/lib/capybara/spec/session/unselect_spec.rb +37 -37
  213. data/lib/capybara/spec/session/visit_spec.rb +59 -53
  214. data/lib/capybara/spec/session/window/become_closed_spec.rb +22 -19
  215. data/lib/capybara/spec/session/window/current_window_spec.rb +4 -3
  216. data/lib/capybara/spec/session/window/open_new_window_spec.rb +4 -3
  217. data/lib/capybara/spec/session/window/switch_to_window_spec.rb +25 -21
  218. data/lib/capybara/spec/session/window/window_opened_by_spec.rb +10 -5
  219. data/lib/capybara/spec/session/window/window_spec.rb +88 -54
  220. data/lib/capybara/spec/session/window/windows_spec.rb +10 -7
  221. data/lib/capybara/spec/session/window/within_window_spec.rb +17 -16
  222. data/lib/capybara/spec/session/within_spec.rb +69 -44
  223. data/lib/capybara/spec/spec_helper.rb +41 -53
  224. data/lib/capybara/spec/test_app.rb +79 -40
  225. data/lib/capybara/spec/views/animated.erb +49 -0
  226. data/lib/capybara/spec/views/form.erb +134 -42
  227. data/lib/capybara/spec/views/frame_child.erb +4 -3
  228. data/lib/capybara/spec/views/frame_one.erb +2 -1
  229. data/lib/capybara/spec/views/frame_parent.erb +1 -1
  230. data/lib/capybara/spec/views/frame_two.erb +1 -1
  231. data/lib/capybara/spec/views/initial_alert.erb +2 -1
  232. data/lib/capybara/spec/views/layout.erb +10 -0
  233. data/lib/capybara/spec/views/obscured.erb +47 -0
  234. data/lib/capybara/spec/views/offset.erb +33 -0
  235. data/lib/capybara/spec/views/path.erb +2 -2
  236. data/lib/capybara/spec/views/popup_one.erb +1 -1
  237. data/lib/capybara/spec/views/popup_two.erb +1 -1
  238. data/lib/capybara/spec/views/react.erb +45 -0
  239. data/lib/capybara/spec/views/scroll.erb +21 -0
  240. data/lib/capybara/spec/views/spatial.erb +31 -0
  241. data/lib/capybara/spec/views/tables.erb +68 -1
  242. data/lib/capybara/spec/views/with_animation.erb +81 -0
  243. data/lib/capybara/spec/views/with_base_tag.erb +2 -2
  244. data/lib/capybara/spec/views/with_dragula.erb +24 -0
  245. data/lib/capybara/spec/views/with_fixed_header_footer.erb +2 -1
  246. data/lib/capybara/spec/views/with_hover.erb +3 -2
  247. data/lib/capybara/spec/views/with_hover1.erb +10 -0
  248. data/lib/capybara/spec/views/with_html.erb +43 -10
  249. data/lib/capybara/spec/views/with_html5_svg.erb +20 -0
  250. data/lib/capybara/spec/views/with_jquery_animation.erb +24 -0
  251. data/lib/capybara/spec/views/with_js.erb +30 -5
  252. data/lib/capybara/spec/views/with_jstree.erb +26 -0
  253. data/lib/capybara/spec/views/with_namespace.erb +21 -0
  254. data/lib/capybara/spec/views/with_scope_other.erb +6 -0
  255. data/lib/capybara/spec/views/with_slow_unload.erb +2 -1
  256. data/lib/capybara/spec/views/with_sortable_js.erb +21 -0
  257. data/lib/capybara/spec/views/with_unload_alert.erb +1 -0
  258. data/lib/capybara/spec/views/with_windows.erb +1 -1
  259. data/lib/capybara/spec/views/within_frames.erb +1 -1
  260. data/lib/capybara/version.rb +1 -1
  261. data/lib/capybara/window.rb +31 -25
  262. data/lib/capybara.rb +120 -100
  263. data/spec/basic_node_spec.rb +59 -34
  264. data/spec/capybara_spec.rb +54 -52
  265. data/spec/css_builder_spec.rb +101 -0
  266. data/spec/css_splitter_spec.rb +38 -0
  267. data/spec/dsl_spec.rb +80 -53
  268. data/spec/filter_set_spec.rb +24 -7
  269. data/spec/fixtures/certificate.pem +25 -0
  270. data/spec/fixtures/key.pem +27 -0
  271. data/spec/fixtures/selenium_driver_rspec_failure.rb +4 -4
  272. data/spec/fixtures/selenium_driver_rspec_success.rb +4 -4
  273. data/spec/minitest_spec.rb +38 -5
  274. data/spec/minitest_spec_spec.rb +88 -62
  275. data/spec/per_session_config_spec.rb +5 -5
  276. data/spec/rack_test_spec.rb +169 -115
  277. data/spec/regexp_dissassembler_spec.rb +250 -0
  278. data/spec/result_spec.rb +86 -33
  279. data/spec/rspec/features_spec.rb +26 -23
  280. data/spec/rspec/scenarios_spec.rb +8 -4
  281. data/spec/rspec/shared_spec_matchers.rb +393 -363
  282. data/spec/rspec/views_spec.rb +4 -3
  283. data/spec/rspec_matchers_spec.rb +10 -10
  284. data/spec/rspec_spec.rb +109 -85
  285. data/spec/sauce_spec_chrome.rb +43 -0
  286. data/spec/selector_spec.rb +391 -61
  287. data/spec/selenium_spec_chrome.rb +180 -41
  288. data/spec/selenium_spec_chrome_remote.rb +101 -0
  289. data/spec/selenium_spec_edge.rb +28 -8
  290. data/spec/selenium_spec_firefox.rb +211 -0
  291. data/spec/selenium_spec_firefox_remote.rb +80 -0
  292. data/spec/selenium_spec_ie.rb +127 -11
  293. data/spec/selenium_spec_safari.rb +156 -0
  294. data/spec/server_spec.rb +177 -78
  295. data/spec/session_spec.rb +52 -16
  296. data/spec/shared_selenium_node.rb +79 -0
  297. data/spec/shared_selenium_session.rb +455 -123
  298. data/spec/spec_helper.rb +91 -2
  299. data/spec/xpath_builder_spec.rb +93 -0
  300. metadata +343 -42
  301. data/.yard/templates_custom/default/class/html/selectors.erb +0 -38
  302. data/.yard/templates_custom/default/class/html/setup.rb +0 -17
  303. data/.yard/yard_extensions.rb +0 -78
  304. data/lib/capybara/rspec/compound.rb +0 -90
  305. data/lib/capybara/spec/session/assert_selector.rb +0 -149
  306. data/lib/capybara/spec/session/source_spec.rb +0 -0
  307. data/lib/capybara/spec/views/with_title.erb +0 -5
  308. data/spec/selenium_spec_marionette.rb +0 -143
@@ -4,107 +4,109 @@ require 'spec_helper'
4
4
 
5
5
  RSpec.describe Capybara do
6
6
  describe 'default_max_wait_time' do
7
- after do
8
- Capybara.default_max_wait_time = @previous_default_time
9
- end
7
+ before { @previous_default_time = described_class.default_max_wait_time }
10
8
 
11
- it "should be changeable" do
12
- @previous_default_time = Capybara.default_max_wait_time
13
- Capybara.default_max_wait_time = 5
14
- expect(Capybara.default_max_wait_time).to eq(5)
9
+ after { described_class.default_max_wait_time = @previous_default_time } # rubocop:disable RSpec/InstanceVariable
10
+
11
+ it 'should be changeable' do
12
+ expect(described_class.default_max_wait_time).not_to eq(5)
13
+ described_class.default_max_wait_time = 5
14
+ expect(described_class.default_max_wait_time).to eq(5)
15
15
  end
16
16
  end
17
17
 
18
18
  describe '.register_driver' do
19
- it "should add a new driver" do
20
- Capybara.register_driver :schmoo do |app|
19
+ it 'should add a new driver' do
20
+ described_class.register_driver :schmoo do |app|
21
21
  Capybara::RackTest::Driver.new(app)
22
22
  end
23
23
  session = Capybara::Session.new(:schmoo, TestApp)
24
24
  session.visit('/')
25
- expect(session.body).to include("Hello world!")
25
+ expect(session.body).to include('Hello world!')
26
26
  end
27
27
  end
28
28
 
29
29
  describe '.register_server' do
30
- it "should add a new server" do
31
- handler = double("handler")
32
- Capybara.register_server :blob do |_app, _port, _host|
33
- handler.run
30
+ it 'should add a new server' do
31
+ described_class.register_server :blob do |_app, _port, _host|
32
+ # do nothing
34
33
  end
35
34
 
36
- expect(Capybara.servers).to have_key(:blob)
35
+ expect(described_class.servers[:blob]).to be_truthy
37
36
  end
38
37
  end
39
38
 
40
- describe ".server" do
39
+ describe '.server' do
41
40
  after do
42
- Capybara.server = :default
41
+ described_class.server = :default
43
42
  end
44
43
 
45
- it "should default to a proc that calls run_default_server" do
46
- mock_app = double('app')
47
- expect(Capybara).to receive(:run_default_server).with(mock_app, 8000)
48
- Capybara.server.call(mock_app, 8000)
44
+ it 'should default to a proc that calls run_default_server' do
45
+ mock_app = Object.new
46
+ allow(described_class).to receive(:run_default_server).and_return(true)
47
+ described_class.server.call(mock_app, 8000)
48
+ expect(described_class).to have_received(:run_default_server).with(mock_app, 8000)
49
49
  end
50
50
 
51
- it "should return a custom server proc" do
51
+ it 'should return a custom server proc' do
52
52
  server = ->(_app, _port) {}
53
- Capybara.register_server :custom, &server
54
- Capybara.server = :custom
55
- expect(Capybara.server).to eq(server)
53
+ described_class.register_server :custom, &server
54
+ described_class.server = :custom
55
+ expect(described_class.server).to eq(server)
56
+ end
57
+
58
+ it 'should have :webrick registered' do
59
+ expect(described_class.servers[:webrick]).not_to be_nil
60
+ end
61
+
62
+ it 'should have :puma registered' do
63
+ expect(described_class.servers[:puma]).not_to be_nil
56
64
  end
65
+ end
57
66
 
58
- it "should have :webrick registered" do
59
- expect(Capybara.servers[:webrick]).not_to be_nil
67
+ describe 'server=' do
68
+ after do
69
+ described_class.server = :default
60
70
  end
61
71
 
62
- it "should have :puma registered" do
63
- expect(Capybara.servers[:puma]).not_to be_nil
72
+ it 'accepts a proc' do
73
+ server = ->(_app, _port) {}
74
+ described_class.server = server
75
+ expect(described_class.server).to eq server
64
76
  end
65
77
  end
66
78
 
67
79
  describe 'app_host' do
68
80
  after do
69
- Capybara.app_host = nil
81
+ described_class.app_host = nil
70
82
  end
71
83
 
72
- it "should warn if not a valid URL" do
73
- expect { Capybara.app_host = "www.example.com" }.to raise_error(ArgumentError, /Capybara\.app_host should be set to a url/)
84
+ it 'should warn if not a valid URL' do
85
+ expect { described_class.app_host = 'www.example.com' }.to raise_error(ArgumentError, /Capybara\.app_host should be set to a url/)
74
86
  end
75
87
 
76
- it "should not warn if a valid URL" do
77
- expect { Capybara.app_host = "http://www.example.com" }.not_to raise_error
88
+ it 'should not warn if a valid URL' do
89
+ expect { described_class.app_host = 'http://www.example.com' }.not_to raise_error
78
90
  end
79
91
 
80
- it "should not warn if nil" do
81
- expect { Capybara.app_host = nil }.not_to raise_error
92
+ it 'should not warn if nil' do
93
+ expect { described_class.app_host = nil }.not_to raise_error
82
94
  end
83
95
  end
84
96
 
85
97
  describe 'default_host' do
86
98
  around do |test|
87
- old_default = Capybara.default_host
99
+ old_default = described_class.default_host
88
100
  test.run
89
- Capybara.default_host = old_default
101
+ described_class.default_host = old_default
90
102
  end
91
103
 
92
- it "should raise if not a valid URL" do
93
- expect { Capybara.default_host = "www.example.com" }.to raise_error(ArgumentError, /Capybara\.default_host should be set to a url/)
104
+ it 'should raise if not a valid URL' do
105
+ expect { described_class.default_host = 'www.example.com' }.to raise_error(ArgumentError, /Capybara\.default_host should be set to a url/)
94
106
  end
95
107
 
96
- it "should not warn if a valid URL" do
97
- expect { Capybara.default_host = "http://www.example.com" }.not_to raise_error
98
- end
99
- end
100
- end
101
-
102
- RSpec.describe Capybara::Session do
103
- context 'with nonexistent driver' do
104
- it "should raise an error" do
105
- expect do
106
- Capybara::Session.new(:quox, TestApp).driver
107
- end.to raise_error(Capybara::DriverNotFoundError)
108
+ it 'should not warn if a valid URL' do
109
+ expect { described_class.default_host = 'http://www.example.com' }.not_to raise_error
108
110
  end
109
111
  end
110
112
  end
@@ -0,0 +1,101 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+
5
+ # rubocop:disable RSpec/InstanceVariable
6
+ RSpec.describe Capybara::Selector::CSSBuilder do
7
+ let :builder do
8
+ ::Capybara::Selector::CSSBuilder.new(@css)
9
+ end
10
+
11
+ context 'add_attribute_conditions' do
12
+ it 'adds a single string condition to a single selector' do
13
+ @css = 'div'
14
+ selector = builder.add_attribute_conditions(random: 'abc')
15
+ expect(selector).to eq %(div[random='abc'])
16
+ end
17
+
18
+ it 'adds multiple string conditions to a single selector' do
19
+ @css = 'div'
20
+ selector = builder.add_attribute_conditions(random: 'abc', other: 'def')
21
+ expect(selector).to eq %(div[random='abc'][other='def'])
22
+ end
23
+
24
+ it 'adds a single string condition to a multiple selector' do
25
+ @css = 'div, ul'
26
+ selector = builder.add_attribute_conditions(random: 'abc')
27
+ expect(selector).to eq %(div[random='abc'], ul[random='abc'])
28
+ end
29
+
30
+ it 'adds multiple string conditions to a multiple selector' do
31
+ @css = 'div, ul'
32
+ selector = builder.add_attribute_conditions(random: 'abc', other: 'def')
33
+ expect(selector).to eq %(div[random='abc'][other='def'], ul[random='abc'][other='def'])
34
+ end
35
+
36
+ it 'adds simple regexp conditions to a single selector' do
37
+ @css = 'div'
38
+ selector = builder.add_attribute_conditions(random: /abc/, other: /def/)
39
+ expect(selector).to eq %(div[random*='abc'][other*='def'])
40
+ end
41
+
42
+ it 'adds wildcard regexp conditions to a single selector' do
43
+ @css = 'div'
44
+ selector = builder.add_attribute_conditions(random: /abc.*def/, other: /def.*ghi/)
45
+ expect(selector).to eq %(div[random*='abc'][random*='def'][other*='def'][other*='ghi'])
46
+ end
47
+
48
+ it 'adds alternated regexp conditions to a single selector' do
49
+ @css = 'div'
50
+ selector = builder.add_attribute_conditions(random: /abc|def/, other: /def|ghi/)
51
+ expect(selector).to eq %(div[random*='abc'][other*='def'], div[random*='abc'][other*='ghi'], div[random*='def'][other*='def'], div[random*='def'][other*='ghi'])
52
+ end
53
+
54
+ it 'adds alternated regexp conditions to a multiple selector' do
55
+ @css = 'div,ul'
56
+ selector = builder.add_attribute_conditions(other: /def.*ghi|jkl/)
57
+ expect(selector).to eq %(div[other*='def'][other*='ghi'], div[other*='jkl'], ul[other*='def'][other*='ghi'], ul[other*='jkl'])
58
+ end
59
+
60
+ it "returns original selector when regexp can't be substringed" do
61
+ @css = 'div'
62
+ selector = builder.add_attribute_conditions(other: /.+/)
63
+ expect(selector).to eq 'div'
64
+ end
65
+
66
+ context ':class' do
67
+ it 'handles string with CSS .' do
68
+ @css = 'a'
69
+ selector = builder.add_attribute_conditions(class: 'my_class')
70
+ expect(selector).to eq 'a.my_class'
71
+ end
72
+
73
+ it 'handles negated string with CSS .' do
74
+ @css = 'a'
75
+ selector = builder.add_attribute_conditions(class: '!my_class')
76
+ expect(selector).to eq 'a:not(.my_class)'
77
+ end
78
+
79
+ it 'handles array of string with CSS .' do
80
+ @css = 'a'
81
+ selector = builder.add_attribute_conditions(class: %w[my_class my_other_class])
82
+ expect(selector).to eq 'a.my_class.my_other_class'
83
+ end
84
+
85
+ it 'handles array of string with CSS . when negated included' do
86
+ @css = 'a'
87
+ selector = builder.add_attribute_conditions(class: %w[my_class !my_other_class])
88
+ expect(selector).to eq 'a.my_class:not(.my_other_class)'
89
+ end
90
+ end
91
+
92
+ context ':id' do
93
+ it 'handles string with CSS #' do
94
+ @css = 'ul'
95
+ selector = builder.add_attribute_conditions(id: 'my_id')
96
+ expect(selector).to eq 'ul#my_id'
97
+ end
98
+ end
99
+ end
100
+ end
101
+ # rubocop:enable RSpec/InstanceVariable
@@ -0,0 +1,38 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+
5
+ RSpec.describe Capybara::Selector::CSS::Splitter do
6
+ let :splitter do
7
+ ::Capybara::Selector::CSS::Splitter.new
8
+ end
9
+
10
+ context 'split not needed' do
11
+ it 'normal CSS selector' do
12
+ css = 'div[id="abc"]'
13
+ expect(splitter.split(css)).to eq [css]
14
+ end
15
+
16
+ it 'comma in strings' do
17
+ css = 'div[id="a,bc"]'
18
+ expect(splitter.split(css)).to eq [css]
19
+ end
20
+
21
+ it 'comma in pseudo-selector' do
22
+ css = 'div.class1:not(.class1, .class2)'
23
+ expect(splitter.split(css)).to eq [css]
24
+ end
25
+ end
26
+
27
+ context 'split needed' do
28
+ it 'root level comma' do
29
+ css = 'div.class1, span, p.class2'
30
+ expect(splitter.split(css)).to eq ['div.class1', 'span', 'p.class2']
31
+ end
32
+
33
+ it 'root level comma when quotes and pseudo selectors' do
34
+ css = 'div.class1[id="abc\\"def,ghi"]:not(.class3, .class4), span[id=\'a"c\\\'de\'], section, #abc\\,def'
35
+ expect(splitter.split(css)).to eq ['div.class1[id="abc\\"def,ghi"]:not(.class3, .class4)', 'span[id=\'a"c\\\'de\']', 'section', '#abc\\,def']
36
+ end
37
+ end
38
+ end
data/spec/dsl_spec.rb CHANGED
@@ -7,11 +7,22 @@ class TestClass
7
7
  include Capybara::DSL
8
8
  end
9
9
 
10
- Capybara::SpecHelper.run_specs TestClass.new, "DSL", capybara_skip: %i[
11
- js modals screenshot frames windows send_keys server hover about_scheme psc
12
- ]
10
+ Capybara::SpecHelper.run_specs TestClass.new, 'DSL', capybara_skip: %i[
11
+ js modals screenshot frames windows send_keys server hover about_scheme psc download css driver scroll spatial html_validation shadow_dom active_element
12
+ ] do |example|
13
+ case example.metadata[:full_description]
14
+ when /has_css\? should support case insensitive :class and :id options/
15
+ pending "Nokogiri doesn't support case insensitive CSS attribute matchers"
16
+ when /#click_button should follow permanent redirects that maintain method/
17
+ pending "Rack < 2 doesn't support 308" if Gem.loaded_specs['rack'].version < Gem::Version.new('2.0.0')
18
+ end
19
+ end
13
20
 
14
21
  RSpec.describe Capybara::DSL do
22
+ before do
23
+ Capybara.use_default_driver
24
+ end
25
+
15
26
  after do
16
27
  Capybara.session_name = nil
17
28
  Capybara.default_driver = nil
@@ -21,42 +32,42 @@ RSpec.describe Capybara::DSL do
21
32
  end
22
33
 
23
34
  describe '#default_driver' do
24
- it "should default to rack_test" do
35
+ it 'should default to rack_test' do
25
36
  expect(Capybara.default_driver).to eq(:rack_test)
26
37
  end
27
38
 
28
- it "should be changeable" do
39
+ it 'should be changeable' do
29
40
  Capybara.default_driver = :culerity
30
41
  expect(Capybara.default_driver).to eq(:culerity)
31
42
  end
32
43
  end
33
44
 
34
45
  describe '#current_driver' do
35
- it "should default to the default driver" do
46
+ it 'should default to the default driver' do
36
47
  expect(Capybara.current_driver).to eq(:rack_test)
37
48
  Capybara.default_driver = :culerity
38
49
  expect(Capybara.current_driver).to eq(:culerity)
39
50
  end
40
51
 
41
- it "should be changeable" do
52
+ it 'should be changeable' do
42
53
  Capybara.current_driver = :culerity
43
54
  expect(Capybara.current_driver).to eq(:culerity)
44
55
  end
45
56
  end
46
57
 
47
58
  describe '#javascript_driver' do
48
- it "should default to selenium" do
59
+ it 'should default to selenium' do
49
60
  expect(Capybara.javascript_driver).to eq(:selenium)
50
61
  end
51
62
 
52
- it "should be changeable" do
63
+ it 'should be changeable' do
53
64
  Capybara.javascript_driver = :culerity
54
65
  expect(Capybara.javascript_driver).to eq(:culerity)
55
66
  end
56
67
  end
57
68
 
58
69
  describe '#use_default_driver' do
59
- it "should restore the default driver" do
70
+ it 'should restore the default driver' do
60
71
  Capybara.current_driver = :culerity
61
72
  Capybara.use_default_driver
62
73
  expect(Capybara.current_driver).to eq(:rack_test)
@@ -65,7 +76,7 @@ RSpec.describe Capybara::DSL do
65
76
 
66
77
  describe '#using_driver' do
67
78
  before do
68
- expect(Capybara.current_driver).not_to eq(:selenium)
79
+ expect(Capybara.current_driver).not_to eq(:selenium) # rubocop:disable RSpec/ExpectInHook
69
80
  end
70
81
 
71
82
  it 'should set the driver using Capybara.current_driver=' do
@@ -84,8 +95,8 @@ RSpec.describe Capybara::DSL do
84
95
  it 'should reset the driver even if an exception occurs' do
85
96
  driver_before_block = Capybara.current_driver
86
97
  begin
87
- Capybara.using_driver(:selenium) { raise "ohnoes!" }
88
- rescue Exception # rubocop:disable Lint/RescueException
98
+ Capybara.using_driver(:selenium) { raise 'ohnoes!' }
99
+ rescue Exception # rubocop:disable Lint/RescueException,Lint/SuppressedException
89
100
  end
90
101
  expect(Capybara.current_driver).to eq(driver_before_block)
91
102
  end
@@ -108,16 +119,13 @@ RSpec.describe Capybara::DSL do
108
119
  end
109
120
  end
110
121
 
122
+ # rubocop:disable RSpec/InstanceVariable
111
123
  describe '#using_wait_time' do
112
- before do
113
- @previous_wait_time = Capybara.default_max_wait_time
114
- end
124
+ before { @previous_wait_time = Capybara.default_max_wait_time }
115
125
 
116
- after do
117
- Capybara.default_max_wait_time = @previous_wait_time
118
- end
126
+ after { Capybara.default_max_wait_time = @previous_wait_time }
119
127
 
120
- it "should switch the wait time and switch it back" do
128
+ it 'should switch the wait time and switch it back' do
121
129
  in_block = nil
122
130
  Capybara.using_wait_time 6 do
123
131
  in_block = Capybara.default_max_wait_time
@@ -126,40 +134,41 @@ RSpec.describe Capybara::DSL do
126
134
  expect(Capybara.default_max_wait_time).to eq(@previous_wait_time)
127
135
  end
128
136
 
129
- it "should ensure wait time is reset" do
137
+ it 'should ensure wait time is reset' do
130
138
  expect do
131
139
  Capybara.using_wait_time 6 do
132
- raise "hell"
140
+ raise 'hell'
133
141
  end
134
- end.to raise_error(RuntimeError, "hell")
142
+ end.to raise_error(RuntimeError, 'hell')
135
143
  expect(Capybara.default_max_wait_time).to eq(@previous_wait_time)
136
144
  end
137
145
  end
146
+ # rubocop:enable RSpec/InstanceVariable
138
147
 
139
148
  describe '#app' do
140
- it "should be changeable" do
141
- Capybara.app = "foobar"
149
+ it 'should be changeable' do
150
+ Capybara.app = 'foobar'
142
151
  expect(Capybara.app).to eq('foobar')
143
152
  end
144
153
  end
145
154
 
146
155
  describe '#current_session' do
147
- it "should choose a session object of the current driver type" do
156
+ it 'should choose a session object of the current driver type' do
148
157
  expect(Capybara.current_session).to be_a(Capybara::Session)
149
158
  end
150
159
 
151
- it "should use #app as the application" do
160
+ it 'should use #app as the application' do
152
161
  Capybara.app = proc {}
153
162
  expect(Capybara.current_session.app).to eq(Capybara.app)
154
163
  end
155
164
 
156
- it "should change with the current driver" do
165
+ it 'should change with the current driver' do
157
166
  expect(Capybara.current_session.mode).to eq(:rack_test)
158
167
  Capybara.current_driver = :selenium
159
168
  expect(Capybara.current_session.mode).to eq(:selenium)
160
169
  end
161
170
 
162
- it "should be persistent even across driver changes" do
171
+ it 'should be persistent even across driver changes' do
163
172
  object_id = Capybara.current_session.object_id
164
173
  expect(Capybara.current_session.object_id).to eq(object_id)
165
174
  Capybara.current_driver = :selenium
@@ -170,7 +179,7 @@ RSpec.describe Capybara::DSL do
170
179
  expect(Capybara.current_session.object_id).to eq(object_id)
171
180
  end
172
181
 
173
- it "should change when changing application" do
182
+ it 'should change when changing application' do
174
183
  object_id = Capybara.current_session.object_id
175
184
  expect(Capybara.current_session.object_id).to eq(object_id)
176
185
  Capybara.app = proc {}
@@ -178,7 +187,7 @@ RSpec.describe Capybara::DSL do
178
187
  expect(Capybara.current_session.app).to eq(Capybara.app)
179
188
  end
180
189
 
181
- it "should change when the session name changes" do
190
+ it 'should change when the session name changes' do
182
191
  object_id = Capybara.current_session.object_id
183
192
  Capybara.session_name = :administrator
184
193
  expect(Capybara.session_name).to eq(:administrator)
@@ -189,8 +198,8 @@ RSpec.describe Capybara::DSL do
189
198
  end
190
199
  end
191
200
 
192
- describe "#using_session" do
193
- it "should change the session name for the duration of the block" do
201
+ describe '#using_session' do
202
+ it 'should change the session name for the duration of the block' do
194
203
  expect(Capybara.session_name).to eq(:default)
195
204
  Capybara.using_session(:administrator) do
196
205
  expect(Capybara.session_name).to eq(:administrator)
@@ -198,23 +207,23 @@ RSpec.describe Capybara::DSL do
198
207
  expect(Capybara.session_name).to eq(:default)
199
208
  end
200
209
 
201
- it "should reset the session to the default, even if an exception occurs" do
210
+ it 'should reset the session to the default, even if an exception occurs' do
202
211
  begin
203
212
  Capybara.using_session(:raise) do
204
213
  raise
205
214
  end
206
- rescue Exception # rubocop:disable Lint/RescueException
215
+ rescue Exception # rubocop:disable Lint/RescueException,Lint/SuppressedException
207
216
  end
208
217
  expect(Capybara.session_name).to eq(:default)
209
218
  end
210
219
 
211
- it "should yield the passed block" do
220
+ it 'should yield the passed block' do
212
221
  called = false
213
222
  Capybara.using_session(:administrator) { called = true }
214
223
  expect(called).to eq(true)
215
224
  end
216
225
 
217
- it "should be nestable" do
226
+ it 'should be nestable' do
218
227
  Capybara.using_session(:outer) do
219
228
  expect(Capybara.session_name).to eq(:outer)
220
229
  Capybara.using_session(:inner) do
@@ -224,39 +233,57 @@ RSpec.describe Capybara::DSL do
224
233
  end
225
234
  expect(Capybara.session_name).to eq(:default)
226
235
  end
236
+
237
+ it 'should allow a session object' do
238
+ original_session = Capybara.current_session
239
+ new_session = Capybara::Session.new(:rack_test, proc {})
240
+ Capybara.using_session(new_session) do
241
+ expect(Capybara.current_session).to eq(new_session)
242
+ end
243
+ expect(Capybara.current_session).to eq(original_session)
244
+ end
245
+
246
+ it 'should pass the new session if block accepts' do
247
+ original_session = Capybara.current_session
248
+ Capybara.using_session(:administrator) do |admin_session, prev_session|
249
+ expect(admin_session).to be(Capybara.current_session)
250
+ expect(prev_session).to be(original_session)
251
+ expect(prev_session).not_to be(admin_session)
252
+ end
253
+ end
227
254
  end
228
255
 
229
- describe "#session_name" do
230
- it "should default to :default" do
256
+ describe '#session_name' do
257
+ it 'should default to :default' do
231
258
  expect(Capybara.session_name).to eq(:default)
232
259
  end
233
260
  end
234
261
 
235
262
  describe 'the DSL' do
236
- before do
237
- @session = Class.new { include Capybara::DSL }.new
238
- end
263
+ let(:session) { Class.new { include Capybara::DSL }.new }
239
264
 
240
- it "should be possible to include it in another class" do
241
- @session.visit('/with_html')
242
- @session.click_link('ullamco')
243
- expect(@session.body).to include('Another World')
265
+ it 'should be possible to include it in another class' do
266
+ session.visit('/with_html')
267
+ session.click_link('ullamco')
268
+ expect(session.body).to include('Another World')
244
269
  end
245
270
 
246
271
  it "should provide a 'page' shortcut for more expressive tests" do
247
- @session.page.visit('/with_html')
248
- @session.page.click_link('ullamco')
249
- expect(@session.page.body).to include('Another World')
272
+ session.page.visit('/with_html')
273
+ session.page.click_link('ullamco')
274
+ expect(session.page.body).to include('Another World')
250
275
  end
251
276
 
252
277
  it "should provide an 'using_session' shortcut" do
253
- expect(Capybara).to receive(:using_session).with(:name)
254
- @session.using_session(:name)
278
+ allow(Capybara).to receive(:using_session)
279
+ session.using_session(:name)
280
+ expect(Capybara).to have_received(:using_session).with(:name)
255
281
  end
256
282
 
257
283
  it "should provide a 'using_wait_time' shortcut" do
258
- expect(Capybara).to receive(:using_wait_time).with(6)
259
- @session.using_wait_time(6)
284
+ allow(Capybara).to receive(:using_wait_time)
285
+ session.using_wait_time(6)
286
+ expect(Capybara).to have_received(:using_wait_time).with(6)
260
287
  end
261
288
  end
262
289
  end
@@ -4,12 +4,12 @@ require 'spec_helper'
4
4
 
5
5
  RSpec.describe Capybara::Selector::FilterSet do
6
6
  after do
7
- Capybara::Selector::FilterSet.remove(:test)
7
+ described_class.remove(:test)
8
8
  end
9
9
 
10
- it "allows node filters" do
11
- fs = Capybara::Selector::FilterSet.add(:test) do
12
- filter(:node_test, :boolean) { |_node, _value| true }
10
+ it 'allows node filters' do
11
+ fs = described_class.add(:test) do
12
+ node_filter(:node_test, :boolean) { |_node, _value| true }
13
13
  expression_filter(:expression_test, :boolean) { |_expr, _value| true }
14
14
  end
15
15
 
@@ -17,13 +17,30 @@ RSpec.describe Capybara::Selector::FilterSet do
17
17
  expect(fs.node_filters.keys).not_to include(:expression_test)
18
18
  end
19
19
 
20
- it "allows expression filters" do
21
- fs = Capybara::Selector::FilterSet.add(:test) do
22
- filter(:node_test, :boolean) { |_node, _value| true }
20
+ it 'allows expression filters' do
21
+ fs = described_class.add(:test) do
22
+ node_filter(:node_test, :boolean) { |_node, _value| true }
23
23
  expression_filter(:expression_test, :boolean) { |_expr, _value| true }
24
24
  end
25
25
 
26
26
  expect(fs.expression_filters.keys).to include(:expression_test)
27
27
  expect(fs.expression_filters.keys).not_to include(:node_test)
28
28
  end
29
+
30
+ it 'allows node filter and expression filter with the same name' do
31
+ fs = described_class.add(:test) do
32
+ node_filter(:test, :boolean) { |_node, _value| true }
33
+ expression_filter(:test, :boolean) { |_expr, _value| true }
34
+ end
35
+
36
+ expect(fs.expression_filters[:test]).not_to eq fs.node_filters[:test]
37
+ end
38
+
39
+ it 'allows `filter` as an alias of `node_filter`' do
40
+ fs = described_class.add(:test) do
41
+ filter(:node_test, :boolean) { |_node, _value| true }
42
+ end
43
+
44
+ expect(fs.node_filters.keys).to include(:node_test)
45
+ end
29
46
  end
@@ -0,0 +1,25 @@
1
+ -----BEGIN CERTIFICATE-----
2
+ MIIEITCCAwmgAwIBAgIJALROkwd1gZHQMA0GCSqGSIb3DQEBBQUAMGgxCzAJBgNV
3
+ BAYTAlVTMQswCQYDVQQIEwJDQTERMA8GA1UEChMIQ2FweWJhcmExFjAUBgNVBAMT
4
+ DWNhcHliYXJhLnRlc3QxITAfBgkqhkiG9w0BCQEWEnR3YWxwb2xlQGdtYWlsLmNv
5
+ bTAeFw0xODA1MDEyMDI5NDVaFw0yODA0MjgyMDI5NDVaMGgxCzAJBgNVBAYTAlVT
6
+ MQswCQYDVQQIEwJDQTERMA8GA1UEChMIQ2FweWJhcmExFjAUBgNVBAMTDWNhcHli
7
+ YXJhLnRlc3QxITAfBgkqhkiG9w0BCQEWEnR3YWxwb2xlQGdtYWlsLmNvbTCCASIw
8
+ DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL7icqMv9uApxRXlcIQ3hSEfmULk
9
+ 7CLT1aUAjEmTiqy8TkFqOeSuA3elnbVBhOW+emrb1uUyje20LvEOHbqYYw90ezlV
10
+ jqNWUapawqjxb+q7KVNpA5uDCtOHIC/1Z1kxQ+yZP/8St4SvnLGUMsUhu0h+ywJa
11
+ iGZ2xy8wdfjABUiUImRESdNkT7Xs0wxQGY0/FZ4K5Sec4kroOuvdxKKhyf5Js5xS
12
+ NRv2tXSMWlKHbYEvYzsVtFgv/4GjqN4wVvbfJmsS8thcyrSYSMN7eE0R6dcbJaLM
13
+ P/GTiw669zPJP164K84QoabLClgwyG+7mqjm7jutq9qXipwyrGsf/WR5fkUCAwEA
14
+ AaOBzTCByjAdBgNVHQ4EFgQU4ut9c0oB2OGMlN/nvn0Y7twBzJowgZoGA1UdIwSB
15
+ kjCBj4AU4ut9c0oB2OGMlN/nvn0Y7twBzJqhbKRqMGgxCzAJBgNVBAYTAlVTMQsw
16
+ CQYDVQQIEwJDQTERMA8GA1UEChMIQ2FweWJhcmExFjAUBgNVBAMTDWNhcHliYXJh
17
+ LnRlc3QxITAfBgkqhkiG9w0BCQEWEnR3YWxwb2xlQGdtYWlsLmNvbYIJALROkwd1
18
+ gZHQMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAANtqdDrdehBt20s
19
+ IVOsVzOp+tJI8pn6G62WJcZWGsvLLfx6Y6eJSP24r5NW4v39cqCgE76J2znzKxeo
20
+ VIShAJ1SLodR0GwzFGsl3TVKVoce6gBWZNXgkZyJTNqKGWeme8CH1EG3TqYlcybt
21
+ EXWLQ6wKndD+uHJIfqUy7HfaUv+TghJGLkv8QYqcAWILQko4xqZ1NULDQ2uhjxei
22
+ oaQlK9teHlVaH87dONesAg3f5rh9j6nvzGiC/T8ycdEhn/DxJMxRS2+mVZqKkk7U
23
+ 60+e9Foc6qTW8UaMShIFYMspoRnr9baBxzxh9V9LZznwqVTf3vuEIck2l2j2KL/R
24
+ SOBenCM=
25
+ -----END CERTIFICATE-----