capybara-harness 0.0.13 → 0.0.14

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.
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