capybara-widgets 0.1.0 → 0.2.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
  SHA1:
3
- metadata.gz: e196b230cb55720ba9f662b0c2b8ee8d6a18971e
4
- data.tar.gz: 63b356fc9d51fa05057123d99285935910d090f1
3
+ metadata.gz: e98613481eaf9e01a0d306a6be1bfe3cbb9a5ebb
4
+ data.tar.gz: 5e0a51ef2c632f47fed8f3314524b6223231783e
5
5
  SHA512:
6
- metadata.gz: 42fe69573483dee2b0b15d4ed193a3dd8ae1230c5f672c453963eeef6f4cb124cd5eb1e9b8b77c67a723059d547906c2cb0aa230a5716b30892350bd7183a51e
7
- data.tar.gz: 0a92d4cb0a543b119b0c664b9cf009137264fb187989a503d531c0f0e82fce047ec0bf355922783868ebd0d6a62b80ae96316e11ace9e3c0355421c73b27e15e
6
+ metadata.gz: bcbf75f3df259f41e0c0c3f5da5b9d9cbde2fb58c8777a3f9cb26add867ca519d9a7e3c3729d6c7f03f74751a29ce842e01517f62781d1a2736e3c46166cef87
7
+ data.tar.gz: 9b029d11cdfe3f98c90c7efaeef5ec0840c16e44aa2855b3bfe33e801165611fd66fa546bfa48e6eb38fa1bd046e4fb601222fc4a4e9826aaceee96a24ccdc65
@@ -1,11 +1,14 @@
1
1
  require_relative 'widget'
2
2
  require_relative 'page_collection'
3
+ require_relative '../helpers/async_helper'
3
4
  require 'active_support/core_ext/class/attribute'
4
5
 
5
6
  module Capybara
6
7
  module Widgets
7
8
  class Page < Widget
8
9
 
10
+ include Capybara::Widgets::AsyncHelper
11
+
9
12
  class_attribute :path
10
13
  class_attribute :path_matcher
11
14
 
@@ -26,7 +29,13 @@ module Capybara
26
29
  end
27
30
 
28
31
  def opened?
29
- current_path =~ %r{#{Regexp.quote(self.path)}}
32
+ eventually do
33
+ result = self.path_matcher? ?
34
+ current_path =~ self.path_matcher :
35
+ current_path =~ %r{#{Regexp.quote(self.path)}}
36
+ raise "#{self.class.name} is not opened" unless result
37
+ result
38
+ end
30
39
  end
31
40
 
32
41
  def reload!
@@ -18,14 +18,18 @@ module Capybara
18
18
  def current_page_class
19
19
  load_classes unless @loaded
20
20
  klass = registry.detect do |page_class|
21
- if page_class.path_matcher
21
+ if page_class.path_matcher?
22
22
  if page_class.path_matcher.is_a?(Regexp)
23
23
  Capybara.current_path =~ page_class.path_matcher
24
24
  elsif page_class.path_matcher.is_a?(String)
25
25
  Capybara.current_path.include?(page_class.path_matcher)
26
26
  end
27
27
  else
28
- Capybara.current_path.include?(page_class.path)
28
+ if page_class.path?
29
+ Capybara.current_path.include?(page_class.path)
30
+ else
31
+ false
32
+ end
29
33
  end
30
34
  end
31
35
  raise "Not found" if klass.nil?
@@ -50,12 +50,14 @@ module Capybara
50
50
 
51
51
  def element(name, *query)
52
52
  define_method("#{name}!") { root.find(*query).click }
53
+ define_method(name) { root.find(*query) }
53
54
  define_method("#{name}=") { |arg| root.find(*query).set(arg) }
54
- define_method("has_#{name}?") { root.has_selector?(*query) }
55
+ define_method("has_#{name}?"){|*args| root.has_selector?(*query, *args) }
56
+ define_method("has_no_#{name}?"){|*args| root.has_no_selector?(*query, *args) }
55
57
  end
56
58
 
57
59
  def required_element(*element_names)
58
- define_method(:elements_loaded?) { element_names.each {|name| self.send("has_#{name}?")} }
60
+ define_method(:elements_loaded?) { element_names.map {|name| self.send("has_#{name}?")}.count(false) == 0 }
59
61
  end
60
62
 
61
63
  alias_method :required_elements, :required_element
@@ -7,19 +7,19 @@ World Capybara::Widgets::StringHelpers
7
7
  World Capybara::Widgets::AsyncHelper
8
8
  World Capybara::Widgets::DSL
9
9
 
10
- Given(/^I am on a (.* page)/) do |page_name|
10
+ Given(/^I am on (?:a\s|an\s)?(.* page)/) do |page_name|
11
11
  within_widget(to_widget_class(page_name)) do |page|
12
12
  page.open!
13
13
  end
14
14
  end
15
15
 
16
- When(/^I navigate to a (.* page)/) do |page_name|
16
+ When(/^I navigate to (?:a\s|an\s)?(.* page)/) do |page_name|
17
17
  within_widget(to_widget_class(page_name)) do |page|
18
18
  page.open!
19
19
  end
20
20
  end
21
21
 
22
- Then(/^I should be on a (.* page)/) do |page_name|
22
+ Then(/^I should be on (?:a\s|an\s)?(.* page)/) do |page_name|
23
23
  within_widget(to_widget_class(page_name)) do |page|
24
24
  eventually { expect(page).to be_loaded }
25
25
  end
@@ -33,3 +33,13 @@ When(/^I set "([^"]*)" to "([^"]*)"$/) do |field_name, value|
33
33
  current_page.send(to_widget_action(field_name, '='), value)
34
34
  end
35
35
 
36
+ And(/^I should( not)? see( \d+)? "([^"]*)" ([^"]*s?)$/) do |negated, count, content, widget_action|
37
+ negation_prefix = (negated && negated.length > 0) ? 'no_' : ''
38
+ expected_count = (count && count.length > 0) ? count.strip.to_i : 1
39
+ if expected_count > 1
40
+ expect(current_page).to send("have_#{negation_prefix}#{to_widget_action(widget_action)}", content, count)
41
+ else
42
+ expect(current_page).to send("have_#{negation_prefix}#{to_widget_action(widget_action)}", content)
43
+ end
44
+ end
45
+
@@ -37,9 +37,9 @@ end
37
37
  # I open "My Report" from a "Reports page"
38
38
  # is mapped to:
39
39
  # ReportsPage.new.open!("My Report")
40
- When(/^I (.*) "([^"]*)" from a "([^"]*)"$/) do |action_name, action_param, widget_path|
40
+ When(/^I open "([^"]*)" from a "([^"]*)"$/) do |action_param, widget_path|
41
41
  target_widget = resolve_widget(widget_path)
42
- target_widget.send(to_widget_action(action_name, '!'), action_param)
42
+ target_widget.open!(action_param)
43
43
  end
44
44
 
45
45
 
@@ -57,8 +57,9 @@ end
57
57
  # is mapped to: expect(MyWidget.new).to have_no_action("Do it")
58
58
  # I should see "Do it" value in a "My page -> page component"
59
59
  # is mapped to: expect(MyPage.new.page_component).to have_value("Do it")
60
- And(/^I should( not)? see "([^"]*)" (.*) (?:in|on) a "([^"]*)"$/) do |negated, content, widget_action, widget_path|
60
+ And(/^I should( not)? see( \d+)? "([^"]*)" (.*) (?:in|on) a "([^"]*)"$/) do |negated, count, content, widget_action, widget_path|
61
61
  negation_prefix = (negated && negated.length > 0) ? 'no_' : ''
62
+ expected_count = (count && count.length > 0) ? count.strip.to_i : 1
62
63
  target_widget = resolve_widget(widget_path)
63
64
  expect(target_widget).to send("have_#{negation_prefix}#{to_widget_action(widget_action)}", content)
64
65
  end
@@ -72,14 +73,19 @@ When(/^I fill in the following in a "([^"]*)"$/) do |widget_name, table|
72
73
  end
73
74
  end
74
75
 
75
- And(/^the "([^"]*)" should be "([^"]*)" in a "([^"]*)"$/) do |field_name, expected, widget_name|
76
+ And(/^the "([^"]*)" should( not)? be "([^"]*)" in a "([^"]*)"$/) do |field_name, negated, expected, widget_name|
76
77
  within_widget(to_widget_class(widget_name)) do |widget|
77
78
  action = to_widget_action(field_name)
78
- if widget.respond_to? "has_#{action}?"
79
- expect(widget.send("has_#{action}?", expected)).to be_true
79
+ negation_prefix = (negated && negated.length > 0) ? 'no_' : ''
80
+ if widget.respond_to? "has_#{negation_prefix}#{action}?"
81
+ expect(widget.send("has_#{negation_prefix}#{action}?", expected)).to be_truthy
80
82
  else
81
83
  actual = widget.send(action)
82
- expect(actual).to eq(expected)
84
+ if (negated && negated.length > 0)
85
+ expect(actual).not_to eq(expected)
86
+ else
87
+ expect(actual).to eq(expected)
88
+ end
83
89
  end
84
90
  end
85
91
  end
@@ -2,7 +2,7 @@ module Capybara
2
2
  module Widgets
3
3
  module AsyncHelper
4
4
  def eventually(options = {})
5
- timeout = options[:timeout] || 10
5
+ timeout = options[:timeout] || Capybara.default_max_wait_time
6
6
  interval = options[:interval] || 0.1
7
7
  time_limit = Time.now + timeout
8
8
  loop do
@@ -1,5 +1,5 @@
1
1
  module Capybara
2
2
  module Widgets
3
- VERSION = "0.1.0"
3
+ VERSION = "0.2.0"
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: capybara-widgets
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Vitalii Grygoruk
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-10-14 00:00:00.000000000 Z
11
+ date: 2015-10-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler