capybara-harness 0.0.13 → 0.0.14

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore CHANGED
@@ -1,4 +1,5 @@
1
1
  *.gem
2
+ capybara-*.html
2
3
  *.rbc
3
4
  .bundle
4
5
  .idea
@@ -18,6 +18,8 @@ Gem::Specification.new do |gem|
18
18
  gem.require_paths = ["lib"]
19
19
 
20
20
  gem.add_development_dependency('rspec')
21
+ gem.add_development_dependency('launchy')
21
22
  gem.add_runtime_dependency('capybara', '>= 1.1')
23
+ gem.add_development_dependency("sinatra", [">= 0.9.4"])
22
24
  gem.add_runtime_dependency(%q<activesupport>, [">= 3.0"])
23
25
  end
@@ -1,6 +1,5 @@
1
1
  module Capybara::Harness::Dom
2
2
  class Attribute
3
- include Capybara::DSL
4
3
 
5
4
  attr_accessor :name, :derived_value_block
6
5
 
@@ -2,22 +2,34 @@ module Capybara::Harness::Dom
2
2
  class Field
3
3
  include Capybara::DSL
4
4
 
5
- attr_accessor :name, :label, :data_type, :through
5
+ attr_accessor :name, :label, :as, :through
6
6
 
7
- def initialize(options = {})
8
- self.name = options.delete(:name)
9
- self.label = options.fetch(:label, name.to_s.titleize)
10
- self.data_type = options.fetch(:data_type, :string)
11
- self.through = options.delete(:through)
7
+ def initialize(name, options = {})
8
+ @name = name.to_sym
9
+ @through = extract_option_as_sym(:through, options)
10
+ @label = options.fetch(:label, name.to_s.titleize)
11
+ @as = options.fetch(:as, :string).to_sym
12
12
  end
13
13
 
14
14
  def fill(attrs = {})
15
15
  value = extract_value(attrs)
16
- case data_type
16
+ case as
17
17
  when :string then
18
18
  fill_in(label, :with => value)
19
19
  when :select then
20
20
  select(value, :from => label)
21
+ when :file
22
+ attach_file(label, value)
23
+ when :radio
24
+ choose(label)
25
+ when :checkbox, :checkboxes
26
+ if value.is_a?(Hash)
27
+ value.each { |label, v| checkbox(v, label) }
28
+ elsif value.is_a?(Array)
29
+ value.each { |v| checkbox(v) }
30
+ else
31
+ check(value, label)
32
+ end
21
33
  end
22
34
  end
23
35
 
@@ -25,10 +37,6 @@ module Capybara::Harness::Dom
25
37
  @through.to_sym if @through
26
38
  end
27
39
 
28
- def name
29
- @name.to_sym
30
- end
31
-
32
40
  private
33
41
 
34
42
  def has_attribute?(attrs)
@@ -41,5 +49,15 @@ module Capybara::Harness::Dom
41
49
  attrs[name.to_sym]
42
50
  end
43
51
 
52
+ def extract_option_as_sym(option_name, options)
53
+ option = options.delete(option_name)
54
+ option.nil? ? nil : option.to_sym
55
+ end
56
+
57
+ def check(value, label = nil)
58
+ label = value if label.nil?
59
+ [false, nil, 0].include?(value) ? uncheck(label) : super(label)
60
+ end
61
+
44
62
  end
45
63
  end
@@ -16,7 +16,7 @@ module Capybara::Harness::Dom
16
16
 
17
17
  # Public: Scans the DOM and finds the node that represents the subject.
18
18
  def find_element(values = {})
19
- page.find(".#{name} .#{finder_attr_name}", :text => finder_attr.derive_value(values)).find(:xpath, ".//ancestor::*[@class='#{name}']")
19
+ page.find(".#{name} .#{finder_attr_name}", :visible => true, :text => finder_attr.derive_value(values)).find(:xpath, ".//ancestor::*[@class='#{name}']")
20
20
  end
21
21
 
22
22
  # Public: Scans the DOM and finds the node that represents the subject's list element.
@@ -49,12 +49,12 @@ module Capybara::Harness::Dom
49
49
  end
50
50
 
51
51
  def has_attrs?(values = {})
52
- return false unless page.has_css?(".#{name} .#{finder_attr_name}", :text => finder_attr.derive_value(values))
52
+ return false unless page.has_css?(".#{name} .#{finder_attr_name}", :visible => true, :text => finder_attr.derive_value(values))
53
53
 
54
54
  node = find_element(values)
55
55
  attributes.each do |attr_name, attr|
56
56
  text = attr.derive_value(values)
57
- return false unless node.has_css?(".#{attr_name}", :text => text)
57
+ return false unless node.has_css?(".#{attr_name}", :visible => true, :text => text)
58
58
  end
59
59
 
60
60
  true
@@ -10,7 +10,7 @@ module Capybara::Harness::Dom
10
10
  options = args.last.is_a?(Hash) ? args.pop : {}
11
11
 
12
12
  args.each do |field_name|
13
- fields << Capybara::Harness::Dom::Field.new(options.merge(:name => field_name))
13
+ fields << Capybara::Harness::Dom::Field.new(field_name, options)
14
14
  end
15
15
  end
16
16
 
@@ -1,5 +1,5 @@
1
1
  module Capybara
2
2
  module Harness
3
- VERSION = "0.0.13"
3
+ VERSION = "0.0.14"
4
4
  end
5
5
  end
@@ -0,0 +1,92 @@
1
+ require 'spec_helper'
2
+
3
+ describe Capybara::Harness::Dom::Field do
4
+
5
+ include Capybara::DSL
6
+ include Capybara::RSpecMatchers
7
+
8
+ before do
9
+ visit('/form')
10
+ end
11
+
12
+ describe "#fill" do
13
+ context "when only name is specified" do
14
+ it "fills in the field" do
15
+ field = Capybara::Harness::Dom::Field.new(:zipcode)
16
+ field.fill({ zipcode: '12345'})
17
+ page.find_field('Zipcode').value.should == '12345'
18
+ end
19
+ end
20
+
21
+ context "when the :label option is specified" do
22
+ it "fills in the field" do
23
+ field = Capybara::Harness::Dom::Field.new(:explanation, label: 'Explanation of Name')
24
+ field.fill({ explanation: 'None'})
25
+ page.find_field('Explanation of Name').value.should == 'None'
26
+ end
27
+ end
28
+
29
+ context "when the :as option is specified" do
30
+ describe ":select" do
31
+ it "selects the field" do
32
+ field = Capybara::Harness::Dom::Field.new(:other_title, as: :select, label: 'Other title')
33
+ field.fill({ other_title: 'Miss'})
34
+ page.should have_select('Other title', :selected => 'Miss')
35
+ end
36
+
37
+ it "selects multiple values"
38
+ end
39
+
40
+ describe ":checkbox" do
41
+ context "when the supplied value is boolean" do
42
+ let(:field) { Capybara::Harness::Dom::Field.new(:terms, as: :checkbox, label: 'Terms of Use') }
43
+
44
+ it "checks the box when true" do
45
+ page.uncheck('Terms of Use')
46
+ field.fill({ terms: true })
47
+ page.find_field('Terms of Use').should be_checked
48
+ end
49
+
50
+ it "unchecks the box when false" do
51
+ page.check('Terms of Use')
52
+ field.fill({ terms: false })
53
+ page.find_field('Terms of Use').should_not be_checked
54
+ end
55
+ end
56
+
57
+ context "when the supplied value is an integer" do
58
+
59
+ end
60
+
61
+
62
+ context "when the supplied value is an array" do
63
+
64
+ end
65
+
66
+ context "when the supplied value is a hash" do
67
+
68
+ end
69
+
70
+
71
+ it "checks multiple values" do
72
+ field = Capybara::Harness::Dom::Field.new(:pets, as: :checkboxes)
73
+ field.fill({ pets: { }})
74
+ page.find_field('Terms of Use').should_not be_checked
75
+ end
76
+
77
+ it "unchecks multiple values"
78
+ end
79
+
80
+ describe ":radio" do
81
+ it "selects the radio option"
82
+ end
83
+
84
+ describe ":file" do
85
+ it "fills in the field"
86
+ end
87
+ end
88
+
89
+ end
90
+
91
+
92
+ end
@@ -1,7 +1,13 @@
1
+ require "capybara"
2
+ require "capybara/rspec" # Required here instead of in rspec_spec to avoid RSpec deprecation warning
3
+ require "capybara/spec/test_app"
4
+ require "capybara/spec/spec_helper"
1
5
  require 'capybara-harness'
2
6
 
3
7
  RSpec.configure do |config|
4
8
  config.treat_symbols_as_metadata_keys_with_true_values = true
5
9
  config.run_all_when_everything_filtered = true
6
10
  config.filter_run :focus
7
- end
11
+ config.before { Capybara::SpecHelper.reset! }
12
+ config.after { Capybara::SpecHelper.reset! }
13
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: capybara-harness
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.13
4
+ version: 0.0.14
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-01-29 00:00:00.000000000 Z
12
+ date: 2013-02-05 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rspec
@@ -27,6 +27,22 @@ dependencies:
27
27
  - - ! '>='
28
28
  - !ruby/object:Gem::Version
29
29
  version: '0'
30
+ - !ruby/object:Gem::Dependency
31
+ name: launchy
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
37
+ version: '0'
38
+ type: :development
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
30
46
  - !ruby/object:Gem::Dependency
31
47
  name: capybara
32
48
  requirement: !ruby/object:Gem::Requirement
@@ -43,6 +59,22 @@ dependencies:
43
59
  - - ! '>='
44
60
  - !ruby/object:Gem::Version
45
61
  version: '1.1'
62
+ - !ruby/object:Gem::Dependency
63
+ name: sinatra
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ! '>='
68
+ - !ruby/object:Gem::Version
69
+ version: 0.9.4
70
+ type: :development
71
+ prerelease: false
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ! '>='
76
+ - !ruby/object:Gem::Version
77
+ version: 0.9.4
46
78
  - !ruby/object:Gem::Dependency
47
79
  name: activesupport
48
80
  requirement: !ruby/object:Gem::Requirement
@@ -84,6 +116,7 @@ files:
84
116
  - lib/capybara/harness/dom_harness.rb
85
117
  - lib/capybara/harness/version.rb
86
118
  - spec/dom/attribute_spec.rb
119
+ - spec/dom/field_spec.rb
87
120
  - spec/dom/reader_spec.rb
88
121
  - spec/spec_helper.rb
89
122
  homepage: https://github.com/twmills/capybara-harness
@@ -113,5 +146,6 @@ summary: A test harness strategy to easily query and manipulate DOM elements as
113
146
  objects in the context of feature or acceptance tests.
114
147
  test_files:
115
148
  - spec/dom/attribute_spec.rb
149
+ - spec/dom/field_spec.rb
116
150
  - spec/dom/reader_spec.rb
117
151
  - spec/spec_helper.rb