pickles 0.1.0 → 0.1.1

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: 9f33295e4575421e5d5fd0d643395d666e31acf4
4
- data.tar.gz: a19ac5ac4bd3c1525ec5132521a58c920baf53aa
3
+ metadata.gz: 288501fe87bdcd1723a59483ff8763255fdc6ad5
4
+ data.tar.gz: 8d9b503a3a2b71786f5e4c9ef19febbb1af32357
5
5
  SHA512:
6
- metadata.gz: f32f96c2a0f9acf15d2c7d7ca2423394eb15ce9340e937820bcf0be9a1f0b519344d6807799add03aa2bd787eb70023ab83a7d77cbce6e934ba396cdd0d0f85e
7
- data.tar.gz: 6f63f831c3dfc9209bf2b2c39b6eaee030f0dc23efd0b33cbdfef2317dd89e37989cd6d6f16b52bb4f8f69685b32fd816ee5e2e78bfb9f01e2e85f85ecb8a2a0
6
+ metadata.gz: f0cdd2cdd431aeb9fefb68ca162f2ff56357a68417e6461be78d4e0b9491b55f247ccc7f989067caef87008ed02fb9a88704b334d9d9e12c078f6a342c207efa
7
+ data.tar.gz: 4ab2bba90221cbc0da00ebfe784c7505434565b76532ae5f7cf5bf024716023468ebdf9ca95c6e5aca62f6b453e7d571a58a3998d071bd12060758fe6235c5ab
data/.gitignore CHANGED
@@ -3,7 +3,6 @@
3
3
  /Gemfile.lock
4
4
  /_yardoc/
5
5
  /coverage/
6
- /doc/
7
6
  /pkg/
8
7
  /spec/reports/
9
8
  /tmp/
data/README.md CHANGED
@@ -7,7 +7,7 @@ This gem contains some helpers to simplify testing with capybara along with afew
7
7
  Add this line to your application's Gemfile:
8
8
 
9
9
  ```ruby
10
- gem 'pickles'
10
+ gem 'pickles', require: false
11
11
  ```
12
12
 
13
13
  And then execute:
@@ -18,15 +18,136 @@ Or install it yourself as:
18
18
 
19
19
  $ gem install pickles
20
20
 
21
- # Usage
21
+ ```rb
22
+ require 'cucumber/pickles/helpers' # require only helpers without steps
23
+ # or
24
+ require 'cucumber/pickles' # require everything alltogether
25
+ ```
26
+
27
+ ## Configure
28
+
29
+ ```rb
30
+ Pickles.configure do |c|
31
+
32
+ #
33
+ # Usually referring to elements on page as .some-css-class is a bad practice.
34
+ #
35
+ # You can provide a map with aliases pointing to that stuff in this config
36
+ # Ex: c.css_node_map = { some_block: '.some-css-class' }
37
+ #
38
+ # And refer to it across within blocks in every predefined step or by manually using detect_node_helper
39
+ #
40
+ c.css_node_map = {}
41
+ # Same as above but shouled be aliased to xpath selector
42
+ c.xpath_node_map = {}
43
+
44
+ #
45
+ # Log xhr error response to browser console,
46
+ #
47
+ # You can configure capybara to log this to your console: ( For example if example failed )
48
+ #
49
+ # puts page.driver.browser.manage.logs.get('browser').select { |log| log.level == 'SEVERE' }.map(&:message).map(&:red)
50
+ #
51
+ c.log_xhr_response = false
52
+
53
+ #
54
+ # In some table steps you can provide '(...)' identifier to override how that step should be handled
55
+ #
56
+ # See 'I fill in the following:' for explaination
57
+ #
58
+ c.fill_tag_steps_map = { 'select' => Select }
59
+
60
+ #
61
+ # Same as above for 'fields are filled with:' step
62
+ #
63
+ c.check_tag_steps_map = { 'text' => Text }
64
+
65
+ end
66
+ ```
67
+
68
+ ### Capybara test helpers
69
+
70
+ Bunch of usefull helpers for everyday testing with capybara.
71
+
72
+ Mostly usefull if you're building a SPA app or just have tons of javascript and standard Capybara helper methods isnt enough.
73
+
74
+ #### Start with:
75
+ If you're using cucumber you may want to:
76
+ ```rb
77
+ World(Pickles)
78
+ ```
79
+
80
+ Or you can use it through:
81
+ ```rb
82
+ Pickles.helper_name
83
+ ```
84
+
85
+ ### Index:
86
+
87
+ 1. [wait_for_ajax](#wait_for_ajax)
88
+ 2. [Locator string](#locator-string-text2)
89
+ 3. [find_node](#find_nodelocator-within-nil)
90
+ 4. [detect_node](#detect_nodeel_alias-locator--nil-within-nil)
91
+ 5. [find_input](#find_inputlocator-within-nil)
92
+ 6. [blur](#blurnode)
93
+ 7. [select_input](#select_inputinput-value--nil)
94
+ 8. [attach_file](#attach_fileinput-file_name)
95
+
96
+ + #### Locator string: `Ex: "=Text[2]"`:
97
+ + 'Text' - required - text to look up by
98
+ + '=' - optional - lookup exact text in node if given
99
+ + '[2]' - optional - index of element on page. If found 4 elements than 3rd will be selected - indexed from 0.
100
+
101
+ + #### find_node(locator, within: nil)
102
+
103
+ Find node on page by [Locator string](#locator-string-text2)
104
+
105
+ within - capybara node to limit lookup
106
+
107
+ returns: capybara node
108
+
109
+ + #### find_input(locator, within: nil)
22
110
 
23
- ## Supported cucumber steps:
111
+ Find `input | textarea | [contenteditable]` on page identified by [Locator string](#locator-string-text2)
112
+
113
+ + #### detect_node(el_alias, locator = nil, within: nil)
114
+
115
+ Does lookup based on provided in config maps
116
+
117
+ if within.present? => limit search to within
118
+ if locator.present? => use locator in step location
119
+
120
+ Use el_alias to find needed xpath / css in maps provided to config.
121
+ Priority xpath_map => css_map => el_alias as it is
122
+
123
+ locator and el_alias can use index configuration from [Locator string](#locator-string-text2)
124
+
125
+ + #### wait_for_ajax
126
+
127
+ Waits for ajax requests to end before proceeding further.
128
+ Terminated with `Capybara::ElementNotFound` after `Capybara.default_wait_time` seconds
129
+
130
+ + #### blur(node)
131
+
132
+ Triggers *node* blur event and clicks on body to perform blur
133
+
134
+ + #### select_input(input, value = nil)
135
+
136
+ Selects *input*[type="checkbox"] OR *input*[type="radio"] on form
137
+
138
+ Triggers click after selection to trigger javascript events ( may change in future )
139
+
140
+ + #### attach_file(input, file_name)
141
+
142
+ Attaches file with *file_name* to *input*[type="file"]
143
+
144
+ *file_name* is fetched from `features/support/attachments/*file_name*` and raises RuntimeError if file not found
145
+
146
+ ### Supported cucumber steps:
24
147
 
25
148
  + Navigation
26
149
 
27
- 1. ```rb
28
- When I (?:click|navigate) "([^"]*)"( within (?:.*))?
29
- ```
150
+ 1. `When I (?:click|navigate) "([^"]*)"( within (?:.*))?`
30
151
 
31
152
  ##### Examples:
32
153
  ```rb
@@ -52,30 +173,27 @@ Or install it yourself as:
52
173
  ##### Description:
53
174
  + for within checkout docs
54
175
 
55
- 2. ```rb
56
- I (?:click|navigate):( within (?:.*))?
57
- ```
176
+ 2. `When I (?:click|navigate):( within (?:.*))?`
58
177
 
59
178
  ##### Examples:
60
- ```rb
61
- I navigate:
62
- | click | My button |
63
- | hover | My span |
64
- | hover | Your span |
65
- | click | Your button |
66
- ```
179
+ ```rb
180
+ When I navigate:
181
+ | click | My button |
182
+ | hover | My span |
183
+ | hover | Your span |
184
+ | click | Your button |
185
+
186
+ When I navigate: within form "User data"
187
+ | click | Submit |
188
+ ```
67
189
 
68
190
  ##### Description:
69
- + alias for previous, but accepts table as argument to allow multiple arguments.
70
- + note ':' in definition
71
- + for within checkout docs
72
-
191
+ + Same as previous, but allows table as argument.
192
+ + note ` : ` in the definition
73
193
 
74
194
  + Forms:
75
195
  + Fill:
76
- 1. ```rb
77
- When (?:|I )fill in the following:( within (?:.*))?
78
- ```
196
+ 1. `When (?:|I )fill in the following:( within (?:.*))?`
79
197
 
80
198
  ##### Examples:
81
199
  ```rb
@@ -95,96 +213,92 @@ Or install it yourself as:
95
213
  ##### Description:
96
214
  + Fills form fields identified by second column.
97
215
  + First column is optional and defines 'within block' - see docs for within
98
- + Add custom (...) block for second column to define your own form fill steps
216
+ + Add custom (...) block for second column to define your own form fill steps in `config.fill_tag_steps_map`
99
217
  supported by default:
100
- (select) - uses 'I select ".." from ".."' under the hood. Check it out
101
-
102
- 2. ```rb
103
- When (?:|I ) select "([^"]*)" from "([^"]*)"( within (?:.*))?
104
- ```
218
+ (select) - uses `When I select ".." with ".."` under the hood.
219
+ Ex:
220
+ ```rb
221
+ class FillDatepicker
222
+
223
+ def initialize(label, value, within)
224
+ # label = 'Date of birth'
225
+ @label = label
226
+ # value = '23.12.1998'
227
+ @value = Date.parse(value)
228
+ # within = detect_node("form", "User profile", within: page)
229
+ @within = within
230
+ end
231
+
232
+ def call
233
+ # implement datepicker selecting logic
234
+ end
235
+ end
236
+
237
+ Pickles.configure do |c|
238
+ c.fill_tag_steps_map = { datepicker: FillDatepicker }
239
+ end
240
+
241
+ When I fill in the following:
242
+ | form "User profile" | Date of birth (datepicker) | 23.12.1998 |
243
+ ```
244
+
245
+
246
+ 2. `When (?:|I )attach the file "([^"]*)" to "([^"]*)"( within (?:.*))?`
105
247
 
106
248
  ##### Examples:
107
249
  ```rb
108
- When I select "Male" from "sex" within "User data"
250
+ When I attach the file "test.png" to "Avatar" within "User data"
109
251
  ```
110
252
 
111
253
  ##### Description:
112
- + Fills javascript-like custom selectors(inputs with blocks)
254
+ + Attaches given file to identified fields
113
255
  + Params:
114
- 1. value to select identifier for block with select result( see [find_node](#find_nodelocator-within-nil) )
115
- 2. field identifier ( used by [find_node](#find_nodelocator-within-nil) )
256
+ 1. `features/support/attachments/` + `file_name` is used to identify file
257
+ 2. Input identifier. see `find_input` helper for searching details
116
258
  3. within block identifier
117
- 3. ```rb
118
- When (?:|I )(?:select|unselect) "([^"]*)"( within (?:.*))?
119
- ```
259
+ + within part is optional
260
+
261
+ 4. `When (?:|I )(?:fill|select)(?: "([^"]*)")?(?: with "([^"]*)")?( within (?:.*))?`
120
262
 
121
263
  ##### Examples:
122
264
  ```rb
123
- When I select "Male" within "User data"
124
- ```
265
+ When I fill "Name" with "Peter" within "User data" # input[type="text"]
266
+ When I fill "Avatar" with "test.png" within "User data" # input[type="file"]
125
267
 
126
- ##### Description:
127
- + Fills checkboxes/radio buttons
128
- + Params:
129
- 1. identifier for block with selected select ( see [find_node](#find_nodelocator-within-nil) )
130
- 4. ```rb
131
- When (?:|I )attach the file "([^"]*)" to "([^"]*)"( within (?:.*))?
132
- ```
133
-
134
- ##### Examples:
135
- ```rb
136
- When I attach the file "test.png" to "Avatar" within "User data"
137
- ```
268
+ When I fill "Male" within "User data" # input[type="checkbox"] || input[type="radio"]
269
+ When I select "Male"
138
270
 
139
- ##### Description:
140
- + Attaches given file to identified fields
141
- + Params:
142
- 1. relative file name. see attach_file
143
- 2. file input identifier. see [find_node](#find_nodelocator-within-nil)
144
- 3. within block identifier. see [find_node](#find_nodelocator-within-nil)
145
-
146
- 5. ```rb
147
- When (?:|I )(?:fill|select|unselect)(select)?(?: "([^"]*)")?(?: with "([^"]*)")?( within (?:.*))?
148
- ```
271
+ When I select "sex" with "Male" # selector
149
272
 
150
- ##### Examples:
151
- ```rb
152
- When I fill "Name" with "Peter" within "User data"
153
- When I fill "Avatar" with "test.png" within "User data"
154
- When I fill "Male" within "User data"
155
- When I fill "sex" with "Male" within "User data"
156
273
  ```
157
274
 
158
275
  ##### Description:
159
276
  + Tries to fill data by guessing field type from found input type(text|checkbox|radio|etc)
160
277
  + There MUST always be an input identified by identifier
278
+ + within part is optional
161
279
 
162
280
  + Check
163
- 1. ```rb
164
- Then fields are filled with:( within (?:.*))?
165
- ```
166
281
 
167
- ##### Examples:
168
- ```rb
169
- Then fields are filled with:
170
- | Account Number | 5002 |
171
- | Expiry date | 2009-11-01 |
172
- | Note | Nice guy |
173
- | Wants Email? | true |
174
- | Sex | Male |
175
- | Accept user agrement | true |
176
- | Send me letters | false |
177
- | radio 1 | true |
178
- | Avatar | avatar.png |
179
- | Due date | 12:35 |
180
- ```
181
-
182
- ##### Description:
183
- + Check fields filled by 'I fill in the folllwing'
184
- + Supports exact same table syntax and optional column
185
-
186
- ## Development
282
+ `Then fields are filled with:( within (?:.*))?`
283
+
284
+ ##### Examples:
285
+ ```rb
286
+ Then fields are filled with:
287
+ | Account Number | 5002 |
288
+ | Expiry date | 2009-11-01 |
289
+ | Note | Nice guy |
290
+ | Wants Email? | true |
291
+ | Sex | Male |
292
+ | Accept user agrement | true |
293
+ | Send me letters | false |
294
+ | radio 1 | true |
295
+ | Avatar | avatar.png |
296
+ | Due date | 12:35 |
297
+ ```
187
298
 
299
+ ##### Description:
300
+ + Check fields filled by `I fill in the folllwing`
301
+ + Supports exact same table syntax and optional column
188
302
 
189
303
  ## Contributing
190
304
 
@@ -12,7 +12,7 @@ module Pickles::StepDef
12
12
  module_function
13
13
 
14
14
  def define_table_step(allowed_table_cols)
15
- -> do |within, table|
15
+ -> ( within, table ) do
16
16
 
17
17
  Waiter.wait_for_ajax
18
18
 
@@ -57,7 +57,7 @@ end)
57
57
  # FillIN::Select.new(label, value, within).call
58
58
  # end
59
59
 
60
- When /^(?:|I )(fill|select|unselect)(?: "([^"]*)")?(?: with "([^"]*)")?( within (?:.*))?$/ do |type, labels, value, within|
60
+ When /^(?:|I )(fill|select)(?: "([^"]*)")?(?: with "([^"]*)")?( within (?:.*))?$/ do |type, labels, value, within|
61
61
  if type == 'select' && value.present?
62
62
  FillIN::Select.new(labels, value, within).call
63
63
  else
@@ -1,3 +1,3 @@
1
1
  module Pickles
2
- VERSION = "0.1.0"
2
+ VERSION = "0.1.1"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pickles
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - vs
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-08-24 00:00:00.000000000 Z
11
+ date: 2017-08-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: capybara