capybara-widgets 0.3.1 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 7b6a90efedf17b2f0960750cc217dde6d049cb80
4
- data.tar.gz: 73edd6777f2997aeafd5eed992def14d4f83d82f
3
+ metadata.gz: dc8ba6872d65c984e482da032b16bc77918c6847
4
+ data.tar.gz: e7f0e2119a36f16bbbca1c2e35b05ba6375f5229
5
5
  SHA512:
6
- metadata.gz: b40f627cd2fadf8d5b1212ba77fd738429b1c2a080a76ab950fb2661c38739d76237fa7229963f7b5f2e5db23f57abb33445621ae2ba9bbc38b15e9676a0ade8
7
- data.tar.gz: 16b63567da4888f5a77509d5d9aeaac1bd05f7d4742aeaa0e43b5194c17ff39beaf40c5d5680acaad07c92304f18b3e3123d4a26b6de01dd8c4ce786e0bb60ef
6
+ metadata.gz: 5552b63d66512fa9fe7f621c482094c2c94d4df939d3020bc38ade8775a16d1dc86f6ae191f86355b41a381e82b8d1f116ec621c3b510396448190354ca21f78
7
+ data.tar.gz: 12f25e3b3c24ed0e4935ff9a60ed3cd034aa7b6398676a6be1c68d082d271574b7242cd9c74efd38adb4dd9bd577cb68395bdab48b6e5a96a5e4b3cc5cf9f433
@@ -9,7 +9,7 @@ Gem::Specification.new do |spec|
9
9
  spec.authors = ["Vitalii Grygoruk"]
10
10
  spec.email = ["vitalii[dot]grygoruk[at]gmail[dot]com"]
11
11
  spec.summary = %q{Page objects and page components for Capybara}
12
- spec.description = %q{Easily create well-structured page and ui component classes in your Capybara + Cucumber or Rspec tests}
12
+ spec.description = %q{Easily create well-structured page and ui component classes in your Capybara, Cucumber/RSpec tests}
13
13
  spec.homepage = ""
14
14
  spec.license = "MIT"
15
15
 
@@ -20,9 +20,10 @@ Gem::Specification.new do |spec|
20
20
 
21
21
  spec.add_development_dependency "bundler", "~> 1.7"
22
22
  spec.add_development_dependency "rake", "~> 10.0"
23
- spec.add_development_dependency "rspec", "~> 3.2"
24
- spec.add_development_dependency "cucumber"
25
23
 
26
24
  spec.add_dependency "capybara", "~> 2.0"
27
25
  spec.add_dependency "activesupport"
26
+ spec.add_dependency "rspec", "~> 3.2"
27
+ spec.add_dependency "rspec-wait"
28
+ spec.add_development_dependency "cucumber"
28
29
  end
@@ -29,43 +29,51 @@ module Capybara
29
29
  @root
30
30
  end
31
31
 
32
- # override this method if you need to narrow down search context for a particular UI widget / block
32
+ # @deprecated, use :root_element method instead
33
33
  def narrow
34
34
  @root
35
35
  end
36
36
 
37
- def element(*query)
38
- root.find(*query)
39
- end
40
-
41
- def has_element?(*query)
42
- root.has_selector?(*query)
37
+ def resolve(*query_with_args)
38
+ query = query_with_args.shift
39
+ args = query_with_args
40
+ if query.is_a?(Proc)
41
+ # resolve lambda selector in scope of widget instance
42
+ return self.instance_exec(*args, &query)
43
+ else
44
+ return query, *args
45
+ end
43
46
  end
44
47
 
45
48
  class << self
49
+
50
+ ## override :narrow method if :root_element is used in a class
51
+ def root_element(*query)
52
+ define_method(:root_query) { resolve(*query) }
53
+ define_method(:narrow) { root.find(*resolve(*query)) }
54
+ define_method(:has_root_element?) { page.has_selector?(*resolve(*query))}
55
+ define_method(:has_no_root_element?) { page.has_no_selector?(*resolve(*query))}
56
+ end
57
+
46
58
  def component(name, klass, *query)
47
59
  define_method name do |*args|
48
- component_root = query.length > 0 ? root.find(*query, *args) : root
60
+ component_root = query.length > 0 ? root.find(*resolve(*query, *args)) : root
49
61
  klass.new(component_root)
50
62
  end
51
- end
52
-
53
- def resolve(*query_with_args)
54
- query = query_with_args.shift
55
- args = query_with_args
56
- if query.is_a?(Proc)
57
- return query.(*args)
58
- else
59
- return query, *args
63
+ define_method "has_#{name}?".to_sym do |*args|
64
+ root.has_selector?(*resolve(*query, *args))
65
+ end
66
+ define_method "has_no_#{name}?" do |*args|
67
+ root.has_no_selector?(*resolve(*query, *args))
60
68
  end
61
69
  end
62
70
 
63
71
  def element(name, *query)
64
- define_method("#{name}!") { |*args| root.find(*Widget.resolve(*query, *args)).click }
65
- define_method(name) { |*args| root.find(*Widget.resolve(*query, *args)) }
66
- define_method("#{name}=") { |arg| root.find(*Widget.resolve(*query)).set(arg) }
67
- define_method("has_#{name}?") { |*args| root.has_selector?(*Widget.resolve(*query, *args)) }
68
- define_method("has_no_#{name}?") { |*args| root.has_no_selector?(*Widget.resolve(*query, *args)) }
72
+ define_method("#{name}!") { |*args| root.find(*resolve(*query, *args)).click }
73
+ define_method(name) { |*args| root.find(*resolve(*query, *args)) }
74
+ define_method("#{name}=") { |arg| root.find(*resolve(*query)).set(arg) }
75
+ define_method("has_#{name}?") { |*args| root.has_selector?(*resolve(*query, *args)) }
76
+ define_method("has_no_#{name}?") { |*args| root.has_no_selector?(*resolve(*query, *args)) }
69
77
  end
70
78
 
71
79
  def required_element(*element_names)
@@ -90,10 +98,6 @@ module Capybara
90
98
  alias_method :required_components, :required_component
91
99
  end
92
100
 
93
- def displayed?
94
- root.visible?
95
- end
96
-
97
101
  # delegate missing methods to the @root node
98
102
  def method_missing(method_sym, *arguments, &block)
99
103
  if root.respond_to? method_sym
@@ -21,12 +21,12 @@ When(/^I click "([^"]*)" [o|i]n a "([^"]*)"$/) do |action, widget_path|
21
21
  target_widget.send(to_widget_action(action, '!'))
22
22
  end
23
23
 
24
- Then(/^the "([^"]*)" should( not)? be displayed$/) do |widget_path, negated|
24
+ Then(/^the "([^"]*)" should( not)? (be .*)$/) do |widget_path, negated, action|
25
25
  target_widget = resolve_widget(widget_path)
26
26
  if negated
27
- expect(target_widget).to be_not_displayed, "#{target_widget} should not be displayed"
27
+ expect(target_widget).not_to send(to_widget_action(action))
28
28
  else
29
- expect(target_widget).to be_displayed, "#{target_widget} should be displayed"
29
+ expect(target_widget).to send(to_widget_action(action))
30
30
  end
31
31
  end
32
32
 
@@ -21,6 +21,24 @@ module Capybara
21
21
  "Expected that '#{widget.class.name}' does not have '#{element}' element"
22
22
  end
23
23
  end
24
+
25
+ RSpec::Matchers.define :be_visible do
26
+ match do |widget|
27
+ widget.has_root_element?
28
+ end
29
+
30
+ match_when_negated do |widget|
31
+ widget.has_no_root_element?
32
+ end
33
+
34
+ failure_message do |widget|
35
+ "Expected that '#{widget.class.name}' to be visible"
36
+ end
37
+
38
+ failure_message_when_negated do |widget|
39
+ "Expected that '#{widget.class.name}' not to be visible"
40
+ end
41
+ end
24
42
  end
25
43
  end
26
44
  end
@@ -1,5 +1,5 @@
1
1
  module Capybara
2
2
  module Widgets
3
- VERSION = "0.3.1"
3
+ VERSION = "0.4.0"
4
4
  end
5
5
  end
@@ -5,7 +5,7 @@ describe Capybara::Widgets::Widget do
5
5
  let(:stub_node) { Capybara::Node::Base.new(nil, nil) }
6
6
 
7
7
  it 'has capybara page as a default root node' do
8
- expect(subject.root).to eq(page)
8
+ expect(klass.new.root).to eq(page)
9
9
  end
10
10
 
11
11
  it 'can be initialized with Capybara::Node::Base' do
@@ -26,7 +26,7 @@ describe Capybara::Widgets::Widget do
26
26
 
27
27
  it 'can have lazy-initialized root node' do
28
28
  # Arrange
29
- class MyWidget < klass
29
+ class MyWidget < Capybara::Widgets::Widget
30
30
  attr_accessor :loaded
31
31
  def initialize; self.loaded = false; end
32
32
  def narrow; self.loaded = true; @root; 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.3.1
4
+ version: 0.4.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-11-16 00:00:00.000000000 Z
11
+ date: 2015-11-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -39,27 +39,27 @@ dependencies:
39
39
  - !ruby/object:Gem::Version
40
40
  version: '10.0'
41
41
  - !ruby/object:Gem::Dependency
42
- name: rspec
42
+ name: capybara
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '3.2'
48
- type: :development
47
+ version: '2.0'
48
+ type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: '3.2'
54
+ version: '2.0'
55
55
  - !ruby/object:Gem::Dependency
56
- name: cucumber
56
+ name: activesupport
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - ">="
60
60
  - !ruby/object:Gem::Version
61
61
  version: '0'
62
- type: :development
62
+ type: :runtime
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
@@ -67,21 +67,21 @@ dependencies:
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0'
69
69
  - !ruby/object:Gem::Dependency
70
- name: capybara
70
+ name: rspec
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
73
  - - "~>"
74
74
  - !ruby/object:Gem::Version
75
- version: '2.0'
75
+ version: '3.2'
76
76
  type: :runtime
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
80
  - - "~>"
81
81
  - !ruby/object:Gem::Version
82
- version: '2.0'
82
+ version: '3.2'
83
83
  - !ruby/object:Gem::Dependency
84
- name: activesupport
84
+ name: rspec-wait
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
87
  - - ">="
@@ -94,8 +94,22 @@ dependencies:
94
94
  - - ">="
95
95
  - !ruby/object:Gem::Version
96
96
  version: '0'
97
- description: Easily create well-structured page and ui component classes in your Capybara
98
- + Cucumber or Rspec tests
97
+ - !ruby/object:Gem::Dependency
98
+ name: cucumber
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ description: Easily create well-structured page and ui component classes in your Capybara,
112
+ Cucumber/RSpec tests
99
113
  email:
100
114
  - vitalii[dot]grygoruk[at]gmail[dot]com
101
115
  executables: []