form_object_model 0.1.1 → 0.1.2

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.
@@ -2,4 +2,4 @@ language: ruby
2
2
  rvm:
3
3
  - 1.9.3
4
4
  - 1.9.2
5
-
5
+ - 1.8.7
data/README.md CHANGED
@@ -1,6 +1,7 @@
1
1
  # FormObjectModel
2
2
 
3
3
  [![Build Status](https://secure.travis-ci.org/reinteractive-open/form-object-model.png?branch=master)](http://travis-ci.org/reinteractive-open/form-object-model)
4
+ [![Code Climate](https://codeclimate.com/badge.png)](https://codeclimate.com/github/reinteractive-open/form-object-model)
4
5
 
5
6
  This gem lets you construct an object model
6
7
  of a form you're using in your request specs.
@@ -35,7 +36,7 @@ So given the following form in a page:
35
36
  Forms are defined like so:
36
37
 
37
38
  ```ruby
38
- form = FormObjectModel.new do |fom|
39
+ form = FormObjectModel::Form.new do |fom|
39
40
  form.text_field :name, "Name"
40
41
  form.select :title, "Title"
41
42
  form.radio :gender, "input[name = gender]"
@@ -2,8 +2,8 @@
2
2
  require File.expand_path('../lib/form_object_model/version', __FILE__)
3
3
 
4
4
  Gem::Specification.new do |gem|
5
- gem.authors = ["Sean Geoghegan"]
6
- gem.email = ["sean@seangeo.me"]
5
+ gem.authors = ["Sean Geoghegan", "Aaron Beckerman"]
6
+ gem.email = ["sean@seangeo.me", "aaron@aaronbeckerman.com"]
7
7
  gem.description = %q{An OO form testing helper that makes Capayaba-based form testing easy.}
8
8
  gem.summary = %q{An OO form testing helper that makes Capayaba-based form testing easy.}
9
9
  gem.homepage = "https://github.com/reinteractive-open/form-object-model"
@@ -3,4 +3,9 @@ require "form_object_model/version"
3
3
  require "form_object_model/form.rb"
4
4
  require "form_object_model/helper.rb"
5
5
  require "form_object_model/matcher.rb"
6
+ require "form_object_model/field.rb"
7
+ require "form_object_model/text_field.rb"
8
+ require "form_object_model/select_field.rb"
9
+ require "form_object_model/radio_field.rb"
10
+ require "form_object_model/field_module.rb"
6
11
 
@@ -0,0 +1,12 @@
1
+ module FormObjectModel
2
+ class Field < Struct.new(:page, :name, :locator)
3
+ def ==(other)
4
+ if respond_to?(:has_value?)
5
+ has_value? other
6
+ else
7
+ super
8
+ end
9
+ end
10
+ end
11
+ end
12
+
@@ -0,0 +1,11 @@
1
+ module FormObjectModel
2
+ # A module that defines the getter and setter for the field
3
+ # properties of a form.
4
+ class FieldModule < Module
5
+ def initialize(name, field)
6
+ define_method(name.to_sym) { |*args| field }
7
+ define_method("#{name}=".to_sym) { |val| field.fill(val) }
8
+ end
9
+ end
10
+ end
11
+
@@ -1,73 +1,5 @@
1
1
  module FormObjectModel
2
2
  class Form
3
- Field = Struct.new(:page, :name, :locator)
4
- class TextField < Field
5
- def fill(value)
6
- page.fill_in(locator, :with => value.to_s)
7
- end
8
-
9
- def has_value?(value)
10
- page.has_field?(locator, :with => value.to_s)
11
- end
12
-
13
- def value
14
- page.find_field(locator).value
15
- end
16
- end
17
-
18
- class SelectField < Field
19
- def fill(value)
20
- page.select(value.to_s, :from => locator)
21
- end
22
-
23
- def has_value?(value)
24
- page.has_select?(locator, :selected => value.to_s)
25
- end
26
-
27
- def value
28
- value = nil
29
- page.within(page.find_field(locator)) do
30
- value = page.find("option[selected]").text
31
- end
32
- value
33
- end
34
- end
35
-
36
- class RadioField < Field
37
- # This lets you select the radio button by it's label instead of id
38
- def fill(value)
39
- if button = button_for(value)
40
- button.set(true)
41
- else
42
- raise "Could not find button with locator '#{locator}' and label '#{value}'"
43
- end
44
- end
45
-
46
- def has_value?(value)
47
- button = button_for(value)
48
- button && %w(checked true).include?(button['checked'])
49
- end
50
-
51
- def value
52
- element = checked_element
53
- element && element.value
54
- end
55
-
56
- private
57
- def checked_element
58
- page.all(locator).find {|b| b['checked'] == 'checked' }
59
- end
60
-
61
- def button_for(value)
62
- label_ids = label_ids_for(value)
63
- page.all(locator).find {|b| label_ids.include?(b['id']) }
64
- end
65
-
66
- def label_ids_for(value)
67
- page.all("label:contains('#{value}')").map {|label| label['for'] }
68
- end
69
- end
70
-
71
3
  attr_reader :page
72
4
 
73
5
  def initialize(page)
@@ -108,10 +40,7 @@ module FormObjectModel
108
40
  private
109
41
 
110
42
  def define_field(name, field)
111
- (class << self; self; end).class_eval do
112
- define_method(name) {|*args| field }
113
- define_method("#{name.to_s}=".to_sym) {|val| field.fill(val) }
114
- end
43
+ self.extend(FieldModule.new(name, field))
115
44
  end
116
45
  end
117
46
  end
@@ -0,0 +1,37 @@
1
+ module FormObjectModel
2
+ class RadioField < Field
3
+ # This lets you select the radio button by it's label instead of id
4
+ def fill(value)
5
+ if button = button_for(value)
6
+ button.set(true)
7
+ else
8
+ raise "Could not find button with locator '#{locator}' and label '#{value}'"
9
+ end
10
+ end
11
+
12
+ def has_value?(value)
13
+ button = button_for(value)
14
+ button && %w(checked true).include?(button['checked'])
15
+ end
16
+
17
+ def value
18
+ element = checked_element
19
+ element && element.value
20
+ end
21
+
22
+ private
23
+ def checked_element
24
+ page.all(locator).find {|b| b['checked'] == 'checked' }
25
+ end
26
+
27
+ def button_for(value)
28
+ label_ids = label_ids_for(value)
29
+ page.all(locator).find {|b| label_ids.include?(b['id']) }
30
+ end
31
+
32
+ def label_ids_for(value)
33
+ page.all("label:contains('#{value}')").map {|label| label['for'] }
34
+ end
35
+ end
36
+ end
37
+
@@ -0,0 +1,20 @@
1
+ module FormObjectModel
2
+ class SelectField < Field
3
+ def fill(value)
4
+ page.select(value.to_s, :from => locator)
5
+ end
6
+
7
+ def has_value?(value)
8
+ page.has_select?(locator, :selected => value.to_s)
9
+ end
10
+
11
+ def value
12
+ value = nil
13
+ page.within(page.find_field(locator)) do
14
+ value = page.find("option[selected]").text
15
+ end
16
+ value
17
+ end
18
+ end
19
+ end
20
+
@@ -0,0 +1,16 @@
1
+ module FormObjectModel
2
+ class TextField < Field
3
+ def fill(value)
4
+ page.fill_in(locator, :with => value.to_s)
5
+ end
6
+
7
+ def has_value?(value)
8
+ page.has_field?(locator, :with => value.to_s)
9
+ end
10
+
11
+ def value
12
+ page.find_field(locator).value
13
+ end
14
+ end
15
+ end
16
+
@@ -1,3 +1,3 @@
1
1
  module FormObjectModel
2
- VERSION = "0.1.1"
2
+ VERSION = "0.1.2"
3
3
  end
@@ -75,10 +75,20 @@ describe FormObjectModel do
75
75
  lambda { form.textfield1.should have_value("Other value") }.should raise_error(RSpec::Expectations::ExpectationNotMetError)
76
76
  end
77
77
 
78
+ it "should fail (with ==) when the value of the field is different" do
79
+ page.fill_in("Text Field 1", :with => "A value")
80
+ lambda { form.textfield1.should == "Other value" }.should raise_error(RSpec::Expectations::ExpectationNotMetError)
81
+ end
82
+
78
83
  it "should pass when the value of the field is the same" do
79
84
  page.fill_in("Text Field 1", :with => "A value")
80
85
  form.textfield1.should have_value("A value")
81
86
  end
87
+
88
+ it "should pass (with ==) when the value of the field is the same" do
89
+ page.fill_in("Text Field 1", :with => "A value")
90
+ form.textfield1.should == "A value"
91
+ end
82
92
  end
83
93
 
84
94
  context "single select" do
@@ -92,7 +102,7 @@ describe FormObjectModel do
92
102
  lambda { form.selectfield1.should have_value("Option 2") }.should raise_error(RSpec::Expectations::ExpectationNotMetError)
93
103
  end
94
104
 
95
- it "should pass with the value is the same" do
105
+ it "should pass when the value is the same" do
96
106
  page.select("Option 2", :from => "Select Field")
97
107
  form.selectfield1.should have_value("Option 2")
98
108
  end
@@ -0,0 +1,40 @@
1
+ require 'spec_helper'
2
+
3
+ describe FormObjectModel::Field do
4
+ context "when self responds to has_value?" do
5
+ before do
6
+ subject.stub(:respond_to?).with(:has_value?).and_return(true)
7
+ subject.should_receive(:has_value?).with("A value").and_return(true)
8
+ end
9
+
10
+ describe "==" do
11
+ it "calls has_value? with its argument" do
12
+ (subject == "A value").should be_true
13
+ end
14
+ end
15
+
16
+ describe "!=" do
17
+ it "calls has_value? with its argument" do
18
+ (subject != "A value").should be_false
19
+ end
20
+ end
21
+ end
22
+
23
+ context "when self does not respond to has_value?" do
24
+ before do
25
+ subject.stub(:respond_to?).with(:has_value?).and_return(false)
26
+ end
27
+
28
+ describe "== method" do
29
+ it "behaves in the conventional way" do
30
+ (subject == "A value").should be_false
31
+ end
32
+ end
33
+
34
+ describe "!= method" do
35
+ it "behaves in the conventional way" do
36
+ (subject != "A value").should be_true
37
+ end
38
+ end
39
+ end
40
+ end
metadata CHANGED
@@ -1,15 +1,16 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: form_object_model
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
8
8
  - Sean Geoghegan
9
+ - Aaron Beckerman
9
10
  autorequire:
10
11
  bindir: bin
11
12
  cert_chain: []
12
- date: 2012-08-14 00:00:00.000000000 Z
13
+ date: 2012-08-15 00:00:00.000000000 Z
13
14
  dependencies:
14
15
  - !ruby/object:Gem::Dependency
15
16
  name: capybara
@@ -62,6 +63,7 @@ dependencies:
62
63
  description: An OO form testing helper that makes Capayaba-based form testing easy.
63
64
  email:
64
65
  - sean@seangeo.me
66
+ - aaron@aaronbeckerman.com
65
67
  executables: []
66
68
  extensions: []
67
69
  extra_rdoc_files: []
@@ -74,12 +76,18 @@ files:
74
76
  - Rakefile
75
77
  - form_object_model.gemspec
76
78
  - lib/form_object_model.rb
79
+ - lib/form_object_model/field.rb
80
+ - lib/form_object_model/field_module.rb
77
81
  - lib/form_object_model/form.rb
78
82
  - lib/form_object_model/helper.rb
79
83
  - lib/form_object_model/matcher.rb
84
+ - lib/form_object_model/radio_field.rb
85
+ - lib/form_object_model/select_field.rb
86
+ - lib/form_object_model/text_field.rb
80
87
  - lib/form_object_model/version.rb
81
88
  - spec/integration/form_object_model_spec.rb
82
89
  - spec/spec_helper.rb
90
+ - spec/unit/field_spec.rb
83
91
  homepage: https://github.com/reinteractive-open/form-object-model
84
92
  licenses: []
85
93
  post_install_message:
@@ -94,7 +102,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
94
102
  version: '0'
95
103
  segments:
96
104
  - 0
97
- hash: 4303086123423288710
105
+ hash: -4576561865437419326
98
106
  required_rubygems_version: !ruby/object:Gem::Requirement
99
107
  none: false
100
108
  requirements:
@@ -103,7 +111,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
103
111
  version: '0'
104
112
  segments:
105
113
  - 0
106
- hash: 4303086123423288710
114
+ hash: -4576561865437419326
107
115
  requirements: []
108
116
  rubyforge_project:
109
117
  rubygems_version: 1.8.19
@@ -113,3 +121,4 @@ summary: An OO form testing helper that makes Capayaba-based form testing easy.
113
121
  test_files:
114
122
  - spec/integration/form_object_model_spec.rb
115
123
  - spec/spec_helper.rb
124
+ - spec/unit/field_spec.rb