rspec-html-matchers 0.8.0 → 0.9.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,274 @@
1
+ # encoding: UTF-8
2
+ # frozen_string_literal: true
3
+
4
+ require 'nokogiri'
5
+
6
+ module RSpecHtmlMatchers
7
+ # @api
8
+ # @private
9
+ class HaveTag # rubocop:disable Metrics/ClassLength
10
+ DESCRIPTIONS = {
11
+ :have_at_least_1 => %(have at least 1 element matching "%s"),
12
+ :have_n => %(have %i element(s) matching "%s"),
13
+ }.freeze
14
+
15
+ MESSAGES = {
16
+ :expected_tag => %(expected following:\n%s\nto #{DESCRIPTIONS[:have_at_least_1]}, found 0.),
17
+ :unexpected_tag => %(expected following:\n%s\nto NOT have element matching "%s", found %s.),
18
+
19
+ :expected_count => %(expected following:\n%s\nto #{DESCRIPTIONS[:have_n]}, found %s.),
20
+ :unexpected_count => %(expected following:\n%s\nto NOT have %i element(s) matching "%s", but found.),
21
+
22
+ :expected_btw_count => %(expected following:\n%s\nto have at least %i and at most %i element(s) matching "%s", found %i.),
23
+ :unexpected_btw_count => %(expected following:\n%s\nto NOT have at least %i and at most %i element(s) matching "%s", but found %i.),
24
+
25
+ :expected_at_most => %(expected following:\n%s\nto have at most %i element(s) matching "%s", found %i.),
26
+ :unexpected_at_most => %(expected following:\n%s\nto NOT have at most %i element(s) matching "%s", but found %i.),
27
+
28
+ :expected_at_least => %(expected following:\n%s\nto have at least %i element(s) matching "%s", found %i.),
29
+ :unexpected_at_least => %(expected following:\n%s\nto NOT have at least %i element(s) matching "%s", but found %i.),
30
+
31
+ :expected_blank => %(expected following template to contain empty tag %s:\n%s),
32
+ :unexpected_blank => %(expected following template to contain tag %s with other tags:\n%s),
33
+
34
+ :expected_regexp => %(%s regexp expected within "%s" in following template:\n%s),
35
+ :unexpected_regexp => %(%s regexp unexpected within "%s" in following template:\n%s\nbut was found.),
36
+
37
+ :expected_text => %("%s" expected within "%s" in following template:\n%s),
38
+ :unexpected_text => %("%s" unexpected within "%s" in following template:\n%s\nbut was found.),
39
+
40
+ :wrong_count_error => %(:count with :minimum or :maximum has no sence!),
41
+ :min_max_error => %(:minimum should be less than :maximum!),
42
+ :bad_range_error => %(Your :count range(%s) has no sence!),
43
+ }.freeze
44
+
45
+ def initialize tag, options = {}, &block
46
+ @tag = tag.to_s
47
+ @options = options
48
+ @block = block
49
+
50
+ if with_attrs = @options.delete(:with)
51
+ if classes = with_attrs.delete(:class)
52
+ @tag += '.' + classes_to_selector(classes)
53
+ end
54
+ selector = with_attrs.inject('') do |html_attrs_string, (k, v)|
55
+ html_attrs_string += "[#{k}='#{v}']"
56
+ html_attrs_string
57
+ end
58
+ @tag += selector
59
+ end
60
+
61
+ if without_attrs = @options.delete(:without)
62
+ if classes = without_attrs.delete(:class)
63
+ @tag += ":not(.#{classes_to_selector(classes)})"
64
+ end
65
+ end
66
+
67
+ validate_options!
68
+ organize_options!
69
+ end
70
+
71
+ attr_reader :failure_message
72
+ attr_reader :failure_message_when_negated
73
+ attr_reader :current_scope
74
+
75
+ def matches? src, &block
76
+ @block = block if block
77
+
78
+ src = src.html if defined?(Capybara::Session) && src.is_a?(Capybara::Session)
79
+
80
+ case src
81
+ when String
82
+ parent_scope = Nokogiri::HTML::DocumentFragment.parse(src)
83
+ @document = src
84
+ else
85
+ parent_scope = src.current_scope
86
+ @document = parent_scope.to_html
87
+ end
88
+
89
+ @current_scope = begin
90
+ parent_scope.css(tag)
91
+ # on jruby this produce exception if css was not found:
92
+ # undefined method `decorate' for nil:NilClass
93
+ rescue NoMethodError
94
+ Nokogiri::XML::NodeSet.new(Nokogiri::XML::Document.new)
95
+ end
96
+ if tag_presents? && proper_content? && count_right?
97
+ @block.call(self) if @block
98
+ true
99
+ else
100
+ false
101
+ end
102
+ end
103
+
104
+ def description
105
+ # TODO: should it be more complicated?
106
+ if options.key?(:count)
107
+ format(DESCRIPTIONS[:have_n], options[:count], tag)
108
+ else
109
+ DESCRIPTIONS[:have_at_least_1] % tag
110
+ end
111
+ end
112
+
113
+ private
114
+
115
+ attr_reader :tag
116
+ attr_reader :options
117
+ attr_reader :document
118
+
119
+ def classes_to_selector classes
120
+ case classes
121
+ when Array
122
+ classes.join('.')
123
+ when String
124
+ classes.gsub(/\s+/, '.')
125
+ end
126
+ end
127
+
128
+ def tag_presents?
129
+ if current_scope.first
130
+ @count = current_scope.count
131
+ match_succeeded! :unexpected_tag, document, tag, @count
132
+ else
133
+ match_failed! :expected_tag, document, tag
134
+ end
135
+ end
136
+
137
+ def count_right? # rubocop:disable Metrics/AbcSize, Metrics/MethodLength
138
+ case options[:count]
139
+ when Integer
140
+ if @count == options[:count]
141
+ match_succeeded! :unexpected_count, document, @count, tag
142
+ else
143
+ match_failed! :expected_count, document, options[:count], tag, @count
144
+ end
145
+ when Range
146
+ if options[:count].member? @count
147
+ match_succeeded! :unexpected_btw_count, document, options[:count].min, options[:count].max, tag, @count
148
+ else
149
+ match_failed! :expected_btw_count, document, options[:count].min, options[:count].max, tag, @count
150
+ end
151
+ when nil
152
+ if options[:maximum]
153
+ if @count <= options[:maximum]
154
+ match_succeeded! :unexpected_at_most, document, options[:maximum], tag, @count
155
+ else
156
+ match_failed! :expected_at_most, document, options[:maximum], tag, @count
157
+ end
158
+ elsif options[:minimum]
159
+ if @count >= options[:minimum]
160
+ match_succeeded! :unexpected_at_least, document, options[:minimum], tag, @count
161
+ else
162
+ match_failed! :expected_at_least, document, options[:minimum], tag, @count
163
+ end
164
+ else
165
+ true
166
+ end
167
+ end
168
+ end
169
+
170
+ def proper_content?
171
+ if options.key?(:blank)
172
+ maybe_empty?
173
+ else
174
+ text_right?
175
+ end
176
+ end
177
+
178
+ def maybe_empty?
179
+ if options[:blank] && current_scope.children.empty?
180
+ match_succeeded! :unexpected_blank, tag, document
181
+ else
182
+ match_failed! :expected_blank, tag, document
183
+ end
184
+ end
185
+
186
+ def text_right?
187
+ return true unless options[:text]
188
+
189
+ case text = options[:text]
190
+ when Regexp
191
+ new_scope = current_scope.css(':regexp()', NokogiriRegexpHelper.new(text))
192
+ if new_scope.empty?
193
+ match_failed! :expected_regexp, text.inspect, tag, document
194
+ else
195
+ @count = new_scope.count
196
+ match_succeeded! :unexpected_regexp, text.inspect, tag, document
197
+ end
198
+ else
199
+ new_scope = current_scope.css(':content()', NokogiriTextHelper.new(text, options[:squeeze_text]))
200
+ if new_scope.empty?
201
+ match_failed! :expected_text, text, tag, document
202
+ else
203
+ @count = new_scope.count
204
+ match_succeeded! :unexpected_text, text, tag, document
205
+ end
206
+ end
207
+ end
208
+
209
+ def validate_options!
210
+ validate_text_options!
211
+ validate_count_presence!
212
+ validate_count_when_set_min_max!
213
+ validate_count_when_set_range!
214
+ end
215
+
216
+ def validate_text_options!
217
+ # TODO: test these options validations
218
+ if options.key?(:blank) && options[:blank] && options.key?(:text) # rubocop:disable Style/GuardClause, Style/IfUnlessModifier
219
+ raise ':text option is not accepted when :blank => true'
220
+ end
221
+ end
222
+
223
+ def validate_count_presence!
224
+ raise 'wrong :count specified' unless [Range, NilClass].include?(options[:count].class) || options[:count].is_a?(Integer)
225
+
226
+ [:min, :minimum, :max, :maximum].each do |key|
227
+ raise MESSAGES[:wrong_count_error] if options.key?(key) && options.key?(:count)
228
+ end
229
+ end
230
+
231
+ def validate_count_when_set_min_max!
232
+ raise MESSAGES[:min_max_error] if options[:minimum] > options[:maximum]
233
+ rescue NoMethodError # nil > 4 # rubocop:disable Lint/HandleExceptions
234
+ rescue ArgumentError # 2 < nil # rubocop:disable Lint/HandleExceptions
235
+ end
236
+
237
+ def validate_count_when_set_range!
238
+ begin
239
+ raise format(MESSAGES[:bad_range_error], options[:count].to_s) if count_is_range_but_no_min?
240
+ rescue ArgumentError, 'comparison of String with' # if options[:count] == 'a'..'z' # rubocop:disable Lint/RescueType
241
+ raise format(MESSAGES[:bad_range_error], options[:count].to_s)
242
+ end
243
+ rescue TypeError # fix for 1.8.7 for 'rescue ArgumentError, "comparison of String with"' stroke
244
+ raise format(MESSAGES[:bad_range_error], options[:count].to_s)
245
+ end
246
+
247
+ def count_is_range_but_no_min?
248
+ options[:count].is_a?(Range) &&
249
+ (options[:count].min.nil? || (options[:count].min < 0))
250
+ end
251
+
252
+ def organize_options!
253
+ @options[:minimum] ||= @options.delete(:min)
254
+ @options[:maximum] ||= @options.delete(:max)
255
+
256
+ @options[:text] = @options[:text].to_s if @options.key?(:text) && !@options[:text].is_a?(Regexp)
257
+
258
+ if @options.key?(:seen) && !@options[:seen].is_a?(Regexp) # rubocop:disable Style/GuardClause
259
+ @options[:text] = @options[:seen].to_s
260
+ @options[:squeeze_text] = true
261
+ end
262
+ end
263
+
264
+ def match_succeeded! message, *args
265
+ @failure_message_when_negated = format MESSAGES[message], *args
266
+ true
267
+ end
268
+
269
+ def match_failed! message, *args
270
+ @failure_message = format MESSAGES[message], *args
271
+ false
272
+ end
273
+ end
274
+ end
@@ -0,0 +1,17 @@
1
+ # encoding: UTF-8
2
+ # frozen_string_literal: true
3
+
4
+ module RSpecHtmlMatchers
5
+ # @api
6
+ # @private
7
+ # for nokogiri regexp matching
8
+ class NokogiriRegexpHelper
9
+ def initialize regex
10
+ @regex = regex
11
+ end
12
+
13
+ def regexp node_set
14
+ node_set.find_all { |node| node.content =~ @regex }
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,24 @@
1
+ # encoding: UTF-8
2
+ # frozen_string_literal: true
3
+
4
+ module RSpecHtmlMatchers
5
+ # @api
6
+ # @private
7
+ class NokogiriTextHelper
8
+ NON_BREAKING_SPACE = "\u00a0"
9
+
10
+ def initialize text, squeeze_text = false
11
+ @text = text
12
+ @squeeze_text = squeeze_text
13
+ end
14
+
15
+ def content node_set
16
+ node_set.find_all do |node|
17
+ actual_content = node.content.gsub(NON_BREAKING_SPACE, ' ')
18
+ actual_content = node.content.gsub(/\s+/, ' ').strip if @squeeze_text
19
+
20
+ actual_content == @text
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RSpecHtmlMatchers
4
+ VERSION = '0.9.3'
5
+ end
@@ -1,299 +1,301 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
 
3
- describe "have_form" do
5
+ describe 'have_form' do
4
6
  asset 'form'
5
7
 
6
- context "without &block" do
7
- it "should find form" do
8
+ context 'without &block' do
9
+ it 'should find form' do
8
10
  # sanity check
9
- expect(rendered).to have_form("/books", :post)
10
- expect(rendered).to have_form("/books", "post", with: { id: "new_book", class: %w(book formtastic) })
11
+ expect(rendered).to have_form('/books', :post)
12
+ expect(rendered).to have_form('/books', 'post', :with => { :id => 'new_book', :class => %w[book formtastic] })
11
13
  end
12
14
 
13
- it "should not find form" do
14
- expect(rendered).to_not have_form("/some_url", :post)
15
- expect(rendered).to_not have_form("/books", :get)
15
+ it 'should not find form' do
16
+ expect(rendered).to_not have_form('/some_url', :post)
17
+ expect(rendered).to_not have_form('/books', :get)
16
18
  end
17
19
  end
18
20
 
19
- context "with &block" do
20
- context "with_select" do
21
- it "should find select" do
22
- expect(rendered).to have_form("/books", :post) do
23
- with_select("book[publisher_id]", with: { id: "book_publisher_id" })
24
- with_select("book[publisher_id]", with: { id: "book_publisher_id" })
21
+ context 'with &block' do
22
+ context 'with_select' do
23
+ it 'should find select' do
24
+ expect(rendered).to have_form('/books', :post) do
25
+ with_select('book[publisher_id]', :with => { :id => 'book_publisher_id' })
26
+ with_select('book[publisher_id]', :with => { :id => 'book_publisher_id' })
25
27
  end
26
28
  end
27
29
 
28
- it "should not find select" do
29
- expect(rendered).to have_form("/books", :post) do
30
- without_select("book[publisher_id]", with: { id: "other_id" })
31
- without_select("koob[publisher_id]", with: { id: "book_publisher_id" })
30
+ it 'should not find select' do
31
+ expect(rendered).to have_form('/books', :post) do
32
+ without_select('book[publisher_id]', :with => { :id => 'other_id' })
33
+ without_select('koob[publisher_id]', :with => { :id => 'book_publisher_id' })
32
34
  end
33
35
  end
34
36
 
35
- context "with_option" do
36
- it "should find options" do
37
- expect(rendered).to have_form("/books", :post) do
38
- with_select("book[publisher_id]") do
37
+ context 'with_option' do
38
+ it 'should find options' do
39
+ expect(rendered).to have_form('/books', :post) do
40
+ with_select('book[publisher_id]') do
39
41
  with_option(nil)
40
- with_option("The Pragmatic Bookshelf", selected: true)
41
- with_option(/sitepoint/,2)
42
- with_option("O'Reilly", 3, selected: false)
42
+ with_option('The Pragmatic Bookshelf', :selected => true)
43
+ with_option(/sitepoint/, 2)
44
+ with_option("O'Reilly", 3, :selected => false)
43
45
  end
44
46
  end
45
47
  end
46
48
 
47
- it "should not find options" do
48
- expect(rendered).to have_form("/books", :post) do
49
- with_select("book[publisher_id]") do
50
- without_option("blah blah")
51
- without_option("O'Reilly", 3, selected: true)
49
+ it 'should not find options' do
50
+ expect(rendered).to have_form('/books', :post) do
51
+ with_select('book[publisher_id]') do
52
+ without_option('blah blah')
53
+ without_option("O'Reilly", 3, :selected => true)
52
54
  without_option("O'Reilly", 100500)
53
55
  end
54
56
  end
55
57
  end
56
58
  end
57
59
 
58
- context "with_button" do
59
- it "should find button" do
60
- expect(rendered).to have_form("/books", :post) do
61
- with_button("Cancel Book")
60
+ context 'with_button' do
61
+ it 'should find button' do
62
+ expect(rendered).to have_form('/books', :post) do
63
+ with_button('Cancel Book')
62
64
  end
63
65
  end
64
66
 
65
- it "should not find button" do
66
- expect(rendered).to have_form("/books", :post) do
67
- without_button("Create Book")
67
+ it 'should not find button' do
68
+ expect(rendered).to have_form('/books', :post) do
69
+ without_button('Create Book')
68
70
  end
69
71
  end
70
72
  end
71
73
  end
72
74
 
73
- context "with_hidden_field" do
74
- it "should find hidden field" do
75
- expect(rendered).to have_form("/books", :post) do
76
- with_hidden_field("authenticity_token")
77
- with_hidden_field("authenticity_token", '718WaH76RAbIVhDlnOidgew62ikn8IUCOyWLEqjw1GE=')
75
+ context 'with_hidden_field' do
76
+ it 'should find hidden field' do
77
+ expect(rendered).to have_form('/books', :post) do
78
+ with_hidden_field('authenticity_token')
79
+ with_hidden_field('authenticity_token', '718WaH76RAbIVhDlnOidgew62ikn8IUCOyWLEqjw1GE=')
78
80
  end
79
81
  end
80
82
 
81
- it "should not find hidden field" do
82
- expect(rendered).to have_form("/books", :post) do
83
+ it 'should not find hidden field' do
84
+ expect(rendered).to have_form('/books', :post) do
83
85
  without_hidden_field('user_id')
84
86
  without_hidden_field('authenticity_token', 'blabla')
85
87
  end
86
88
  end
87
89
  end
88
90
 
89
- context "with_text_field" do
90
- it "should find text field" do
91
- expect(rendered).to have_form("/books", :post) do
91
+ context 'with_text_field' do
92
+ it 'should find text field' do
93
+ expect(rendered).to have_form('/books', :post) do
92
94
  with_text_field('book[title]')
93
- with_text_field('book[title]',nil)
94
- with_text_field('book[author]','Authorname')
95
+ with_text_field('book[title]', nil)
96
+ with_text_field('book[author]', 'Authorname')
95
97
  end
96
98
  end
97
99
 
98
- it "should not find text field" do
99
- expect(rendered).to have_form("/books", :post) do
100
- without_text_field('book[title]','title does not exist')
100
+ it 'should not find text field' do
101
+ expect(rendered).to have_form('/books', :post) do
102
+ without_text_field('book[title]', 'title does not exist')
101
103
  without_text_field('book[authoRR]')
102
104
  without_text_field('book[blabla]')
103
105
  end
104
106
  end
105
107
  end
106
108
 
107
- context "with_email_field" do
108
- it "should find email field" do
109
- expect(rendered).to have_form("/books", :post) do
109
+ context 'with_email_field' do
110
+ it 'should find email field' do
111
+ expect(rendered).to have_form('/books', :post) do
110
112
  with_email_field('user[email]')
111
113
  with_email_field('user[email]', 'email@example.com')
112
114
  with_email_field('user[email_confirmation]', nil)
113
115
  end
114
116
  end
115
117
 
116
- it "should not find email field" do
117
- expect(rendered).to have_form("/books", :post) do
118
- without_email_field('book[author]','Authorname')
118
+ it 'should not find email field' do
119
+ expect(rendered).to have_form('/books', :post) do
120
+ without_email_field('book[author]', 'Authorname')
119
121
  without_email_field('user[emaiL]')
120
122
  without_email_field('user[apocalyptiq]')
121
123
  end
122
124
  end
123
125
  end
124
126
 
125
- context "with_url_field" do
126
- it "should find url field" do
127
- expect(rendered).to have_form("/books", :post) do
127
+ context 'with_url_field' do
128
+ it 'should find url field' do
129
+ expect(rendered).to have_form('/books', :post) do
128
130
  with_url_field('user[url]')
129
131
  with_url_field('user[url]', 'http://user.com')
130
132
  end
131
133
  end
132
134
 
133
- it "should not find url field" do
134
- expect(rendered).to have_form("/books", :post) do
135
- without_url_field('user[url]','Authorname')
135
+ it 'should not find url field' do
136
+ expect(rendered).to have_form('/books', :post) do
137
+ without_url_field('user[url]', 'Authorname')
136
138
  without_url_field('user[emaiL]')
137
139
  without_url_field('user[apocalyptiq]')
138
140
  end
139
141
  end
140
142
  end
141
143
 
142
- context "with_number_field" do
143
- it "should find number field" do
144
- expect(rendered).to have_form("/books", :post) do
144
+ context 'with_number_field' do
145
+ it 'should find number field' do
146
+ expect(rendered).to have_form('/books', :post) do
145
147
  with_number_field('number')
146
148
  with_number_field('number_defined', 3)
147
149
  with_number_field('number_defined', '3')
148
150
  end
149
151
  end
150
152
 
151
- it "should not find number field" do
152
- expect(rendered).to have_form("/books", :post) do
153
- without_number_field('number',400)
154
- without_number_field('number','400')
153
+ it 'should not find number field' do
154
+ expect(rendered).to have_form('/books', :post) do
155
+ without_number_field('number', 400)
156
+ without_number_field('number', '400')
155
157
  without_number_field('user[emaiL]')
156
158
  without_number_field('user[apocalyptiq]')
157
159
  end
158
160
  end
159
161
  end
160
162
 
161
- context "with_range_field" do
162
- it "should find range field" do
163
- expect(rendered).to have_form("/books", :post) do
163
+ context 'with_range_field' do
164
+ it 'should find range field' do
165
+ expect(rendered).to have_form('/books', :post) do
164
166
  with_range_field('range1', 1, 3)
165
- with_range_field('range1','1','3')
166
- with_range_field('range2', 1, 3, with: { value: 2 } )
167
- with_range_field('range2', 1, 3, with: { value: '2' } )
167
+ with_range_field('range1', '1', '3')
168
+ with_range_field('range2', 1, 3, :with => { :value => 2 })
169
+ with_range_field('range2', 1, 3, :with => { :value => '2' })
168
170
  end
169
171
  end
170
172
 
171
- it "should not find range field" do
172
- expect(rendered).to have_form("/books", :post) do
173
+ it 'should not find range field' do
174
+ expect(rendered).to have_form('/books', :post) do
173
175
  without_range_field('number')
174
176
  without_range_field('range1', 1, 5)
175
- without_range_field('range2', 1, 3, with: { value: 5 } )
177
+ without_range_field('range2', 1, 3, :with => { :value => 5 })
176
178
  end
177
179
  end
178
180
  end
179
181
 
180
- context "with_date_field" do
181
- it "should find date field" do
182
- expect(rendered).to have_form("/books", :post) do
182
+ context 'with_date_field' do
183
+ it 'should find date field' do
184
+ expect(rendered).to have_form('/books', :post) do
183
185
  with_date_field(:date)
184
186
  with_date_field(:date, 'book_date')
185
- with_date_field(:month, 'book_month', with: { value: 5 })
186
- with_date_field(:week,'book_week')
187
+ with_date_field(:month, 'book_month', :with => { :value => 5 })
188
+ with_date_field(:week, 'book_week')
187
189
  with_date_field(:time, 'book_time')
188
190
  with_date_field(:datetime, 'book_datetime')
189
191
  with_date_field('datetime-local', 'book_datetime_local')
190
192
  end
191
193
  end
192
194
 
193
- it "should not find date field" do
194
- expect(rendered).to have_form("/books", :post) do
195
+ it 'should not find date field' do
196
+ expect(rendered).to have_form('/books', :post) do
195
197
  without_date_field(:date, 'book_something')
196
- without_date_field(:month, 'book_month', with: { value: 100500 })
198
+ without_date_field(:month, 'book_month', :with => { :value => 100500 })
197
199
  end
198
200
  end
199
201
 
200
- it "should raise exception if wrong date field type specified" do
202
+ it 'should raise exception if wrong date field type specified' do
201
203
  expect do
202
- expect(rendered).to have_form("/books", :post) do
204
+ expect(rendered).to have_form('/books', :post) do
203
205
  without_date_field(:unknown, 'book_something')
204
206
  end
205
207
  end.to raise_error('unknown type `unknown` for date picker')
206
208
  expect do
207
- expect(rendered).to have_form("/books", :post) do
209
+ expect(rendered).to have_form('/books', :post) do
208
210
  with_date_field(:unknown, 'book_something')
209
211
  end
210
212
  end.to raise_error('unknown type `unknown` for date picker')
211
213
  end
212
214
  end
213
215
 
214
- context "with_password_field" do
215
- it "should find password field" do
216
- expect(rendered).to have_form("/books", :post) do
216
+ context 'with_password_field' do
217
+ it 'should find password field' do
218
+ expect(rendered).to have_form('/books', :post) do
217
219
  with_password_field('user[password]')
218
220
  end
219
221
  end
220
222
 
221
- it "should not find password field" do
222
- expect(rendered).to have_form("/books", :post) do
223
+ it 'should not find password field' do
224
+ expect(rendered).to have_form('/books', :post) do
223
225
  without_password_field('account[password]')
224
226
  end
225
227
  end
226
228
  end
227
229
 
228
- context "with_file_field" do
229
- it "should find file field" do
230
- expect(rendered).to have_form("/books", :post) do
230
+ context 'with_file_field' do
231
+ it 'should find file field' do
232
+ expect(rendered).to have_form('/books', :post) do
231
233
  with_file_field('form[file]')
232
234
  end
233
235
  end
234
236
 
235
- it "should not find file field" do
236
- expect(rendered).to have_form("/books", :post) do
237
+ it 'should not find file field' do
238
+ expect(rendered).to have_form('/books', :post) do
237
239
  without_file_field('user[file]')
238
240
  end
239
241
  end
240
242
  end
241
243
 
242
- context "with_text_area" do
243
- it "should find text area" do
244
- expect(rendered).to have_form("/books", :post) do
244
+ context 'with_text_area' do
245
+ it 'should find text area' do
246
+ expect(rendered).to have_form('/books', :post) do
245
247
  with_text_area('book[description]')
246
248
  end
247
249
  end
248
250
 
249
- it "should not find text area" do
250
- expect(rendered).to have_form("/books", :post) do
251
+ it 'should not find text area' do
252
+ expect(rendered).to have_form('/books', :post) do
251
253
  without_text_area('user[bio]')
252
254
  end
253
255
  end
254
256
  end
255
257
 
256
- context "with_check_box" do
257
- it "should find check box" do
258
- expect(rendered).to have_form("/books", :post) do
259
- with_checkbox("book[still_in_print]")
260
- with_checkbox("book[still_in_print]","1")
258
+ context 'with_check_box' do
259
+ it 'should find check box' do
260
+ expect(rendered).to have_form('/books', :post) do
261
+ with_checkbox('book[still_in_print]')
262
+ with_checkbox('book[still_in_print]', '1')
261
263
  end
262
264
  end
263
265
 
264
- it "should not find check box" do
265
- expect(rendered).to have_form("/books", :post) do
266
- without_checkbox("book[book]")
267
- without_checkbox("book[still_in_print]","500")
266
+ it 'should not find check box' do
267
+ expect(rendered).to have_form('/books', :post) do
268
+ without_checkbox('book[book]')
269
+ without_checkbox('book[still_in_print]', '500')
268
270
  end
269
271
  end
270
272
  end
271
273
 
272
- context "with_radio_button" do
273
- it "should find radio button" do
274
- expect(rendered).to have_form("/books", :post) do
275
- with_radio_button("form[name]","true")
274
+ context 'with_radio_button' do
275
+ it 'should find radio button' do
276
+ expect(rendered).to have_form('/books', :post) do
277
+ with_radio_button('form[name]', 'true')
276
278
  end
277
279
  end
278
280
 
279
- it "should not find radio button" do
280
- expect(rendered).to have_form("/books", :post) do
281
- without_radio_button("form[name]","100500")
282
- without_radio_button("form[item]","false")
281
+ it 'should not find radio button' do
282
+ expect(rendered).to have_form('/books', :post) do
283
+ without_radio_button('form[name]', '100500')
284
+ without_radio_button('form[item]', 'false')
283
285
  end
284
286
  end
285
287
  end
286
288
 
287
- context "with_submit" do
288
- it "should find submit" do
289
- expect(rendered).to have_form("/books", :post) do
290
- with_submit("Create Book")
289
+ context 'with_submit' do
290
+ it 'should find submit' do
291
+ expect(rendered).to have_form('/books', :post) do
292
+ with_submit('Create Book')
291
293
  end
292
294
  end
293
295
 
294
- it "should not find submit" do
295
- expect(rendered).to have_form("/books", :post) do
296
- without_submit("Destroy Book")
296
+ it 'should not find submit' do
297
+ expect(rendered).to have_form('/books', :post) do
298
+ without_submit('Destroy Book')
297
299
  end
298
300
  end
299
301
  end