releaf 1.1.20 → 2.1.0

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
- SHA1:
3
- metadata.gz: eeeefdd3d3479208c2e862e1ac06617dc5a9bd8e
4
- data.tar.gz: d557b989fded089d5a180e6216e62751377fc22e
2
+ SHA256:
3
+ metadata.gz: 524b36d1ab409a1f8d9d6cde80157a304b4b3659d476145814b6446e7ede16be
4
+ data.tar.gz: cfede7d55a3f73cb458cef7bee1200a0863390734283bec3c061daa53f3328a9
5
5
  SHA512:
6
- metadata.gz: f702e960bfefbef5d6deebb14b2a40d646f377582bbff039453966eac001b734dc31037db3ad3837227677a620775aa6dd5f6e93fd9309339d92be7fd816b080
7
- data.tar.gz: d413347ab13e9041465a46e2b62d451073b7263e01ebec3e6c522b59412e8cde593703ed7cf10f74043762d79da58e9616a8c3a593c53faf6812dfc46741ce77
6
+ metadata.gz: edb91891f480ec14ea56ebd775342172eb12bcdc3f02dfd60a03c8bb2a7f8abdf2284945c0e1b21310331bf100c7ac3934bdffbbb11454111d8bac871a8ea5bc
7
+ data.tar.gz: 8d4e2075f2cca10709fe926681daabc1b90d84cd9738bb650e4af0d025208b280b6757dadf19e9204d9b8a019b46d0ffc26b59c43a04d49b0596b9d1d9cf3311
@@ -1,4 +1,5 @@
1
1
  require 'releaf/test'
2
+ require 'releaf/rspec/matchers/have_number_of_resources'
2
3
  require 'releaf/rspec/matchers/match_html'
3
4
  require 'releaf/rspec/matchers/cache_instance_method'
4
5
  require 'releaf/rspec/helpers'
@@ -20,12 +20,6 @@ module Capybara
20
20
  has_no_css?("#{primary_header_css_rule} h1", *args)
21
21
  end
22
22
 
23
-
24
- def has_number_of_resources?(count)
25
- has_css?("#{primary_header_css_rule} .totals", text: "#{count} resources found")
26
- end
27
-
28
-
29
23
  # Allows to match againg validation errors within forms
30
24
  # Support either model specific (base) errors with:
31
25
  # expect(page).to have_error('Global form error message')
@@ -40,7 +34,7 @@ module Capybara
40
34
  error_found = false
41
35
  if options[:field]
42
36
  first('.field.has-error', minimum: 1) # wait for any errors to come from validation
43
- all(".field.has-error").each do |field_container|
37
+ all(".field.has-error", wait: false).each do |field_container|
44
38
  if !error_found
45
39
  within(field_container) do
46
40
  if has_field?(options[:field], wait: false) && has_css?(".error", text: error_message, wait: false)
@@ -50,7 +44,7 @@ module Capybara
50
44
  end
51
45
  end
52
46
  else
53
- if first(".form-error-box .error", text: error_message)
47
+ if first(".form-error-box .error", text: error_message, minimum: 0)
54
48
  error_found = true
55
49
  end
56
50
  end
@@ -74,7 +68,7 @@ module Capybara
74
68
 
75
69
  def has_notification?(text, type="success")
76
70
  result = has_css?(".notifications .notification[data-type='#{type}']", text: text)
77
- if first(".notifications button.close")
71
+ if first(".notifications button.close", minimum: 0)
78
72
  find(".notifications .notification[data-type='#{type}'] button.close").click
79
73
  has_no_css?(".notifications .notification[data-type='#{type}'] button.close")
80
74
  end
@@ -54,7 +54,7 @@ module Releaf::Test
54
54
  end
55
55
 
56
56
  def create_resource
57
- click_link "Create new resource" unless first("form.new-resource")
57
+ click_link "Create new resource" unless first("form.new-resource", minimum: 0)
58
58
  within "form.new-resource" do
59
59
  yield
60
60
  end
@@ -89,11 +89,17 @@ module Releaf::Test
89
89
  def wait_for_all_richtexts
90
90
  # wait for all ckeditors to fully initialize before moving on.
91
91
  # otherwise the page sometimes produces random js errors in fast tests
92
- number_of_normal_richtexts = page.all('.field.type-richtext:not(.i18n)').length
93
- number_of_localized_richtexts = page.all('.field.type-richtext.i18n .localization', visible: false).length
94
- number_of_richtexts = number_of_normal_richtexts + number_of_localized_richtexts
95
- if (number_of_richtexts > 0)
96
- expect(page).to have_css(".ckeditor-initialized", visible: false, count: number_of_richtexts)
92
+ number_of_normal_richtexts = page.all('.field.type-richtext:not(.i18n)', wait: false).length
93
+ number_of_localized_richtexts = page.all('.field.type-richtext.i18n .localization', wait: false, visible: false).length
94
+
95
+ # some richtexts may have been inside nested association items that have been removed (they actually only get hidden).
96
+ # they must be included in the count because they retain their 'ckeditor-initialized' class even after the editor has been unloaded
97
+ number_of_removed_normal_richtexts = page.all('fieldset.item.type-association.removed .field.type-richtext:not(.i18n)', wait: false, visible: false).length
98
+
99
+ number_of_initialized_richtexts = number_of_normal_richtexts + number_of_localized_richtexts + number_of_removed_normal_richtexts
100
+ if number_of_initialized_richtexts > 0
101
+ # expect _at least_ that many richtexts. others may have been initialized and hidden by some custom code
102
+ expect(page).to have_css(".ckeditor-initialized", visible: false, minimum: number_of_initialized_richtexts)
97
103
  end
98
104
  end
99
105
 
@@ -119,13 +125,27 @@ module Releaf::Test
119
125
  wait_for_all_richtexts
120
126
  end
121
127
 
122
- def save_and_check_response(status_text)
128
+ def close_all_notifications
129
+ page.all('body > .notifications .notification[data-id="resource_status"]', wait: false).each do |notification|
130
+ within(notification) { find('button.close').click }
131
+ end
132
+ expect(page).to have_no_css('body > .notifications .notification[data-id="resource_status"]')
133
+ end
134
+
135
+ def save_and_check_response(status_text, button_text = "Save")
123
136
  wait_for_all_richtexts
124
- click_button 'Save'
125
- expect(page).to have_css('body > .notifications .notification[data-id="resource_status"][data-type="success"]', text: status_text)
137
+ # close any existing notifications
138
+ close_all_notifications
139
+ within page.document.find("form[data-remote-validation-initialized='true']") do
140
+ click_button button_text
141
+ end
142
+ notification = find('body > .notifications .notification[data-id="resource_status"][data-type="success"]', text: status_text)
143
+ within(notification) { find('button.close').click }
144
+ expect(page).to have_no_css('body > .notifications .notification[data-id="resource_status"]')
126
145
  wait_for_all_richtexts
127
146
  end
128
147
 
148
+
129
149
  # As there is no visual UI for settings update being successful
130
150
  # do check against database
131
151
  def wait_for_settings_update(key, value = true)
@@ -206,9 +226,9 @@ module Releaf::Test
206
226
 
207
227
  # locate possibly hidden textarea among active/visible richtext fields ignoring hidden localization versions
208
228
  textareas = []
209
- richtext_boxes = all(".field.type-richtext:not(.i18n), .field.type-richtext.i18n .localization.active")
229
+ richtext_boxes = all(".field.type-richtext:not(.i18n), .field.type-richtext.i18n .localization.active", wait: false)
210
230
  richtext_boxes.each do |richtext_box|
211
- textarea = richtext_box.first(:field, locator, visible: false)
231
+ textarea = richtext_box.first(:field, locator, visible: false, minimum: 0)
212
232
  textareas << textarea if textarea.present?
213
233
  end
214
234
 
@@ -231,16 +251,22 @@ module Releaf::Test
231
251
 
232
252
  def add_nested_item(block_name, expected_item_index)
233
253
  scroll_to_bottom_of_page
234
- all('button', text: 'Add item').last.click # use last button in case of multiple nested items
254
+ all('button', text: 'Add item', wait: false).last.click # use last button in case of multiple nested items
235
255
  wait_for_nested_item block_name, expected_item_index
236
256
 
237
257
  if block_given?
238
- within(".item[data-name=\"#{block_name}\"][data-index=\"#{expected_item_index}\"]") do
258
+ within_nested_item block_name, expected_item_index do
239
259
  yield
240
260
  end
241
261
  end
242
262
  end
243
263
 
264
+ def within_nested_item block_name, item_index
265
+ within(".item[data-name='#{block_name}'][data-index='#{item_index}']") do
266
+ yield
267
+ end
268
+ end
269
+
244
270
  def remove_nested_item(block_name, item_index)
245
271
  base_selector = ".item[data-name=\"#{block_name}\"][data-index=\"#{item_index}\"]"
246
272
  page.find("#{base_selector} > .remove-item-box button.remove-nested-item").click
@@ -254,5 +280,13 @@ module Releaf::Test
254
280
  expect(page).to have_css(".item[data-name=\"#{block_name}\"][data-index=\"#{item_index}\"][style=\"opacity: 1; display: block;\"]")
255
281
  end
256
282
 
283
+ def download_file(url)
284
+ require "open-uri"
285
+ file = Tempfile.new
286
+ file.binmode
287
+ file.write(URI.open(url).read)
288
+ file.flush
289
+ file
290
+ end
257
291
  end
258
292
  end
@@ -0,0 +1,13 @@
1
+ RSpec::Matchers.define :have_number_of_resources do |number_of_resources|
2
+
3
+ match do |subject|
4
+ @text = "#{number_of_resources} resources found"
5
+ @node = find "main > section header .totals"
6
+ @node.has_text? @text, exact: true
7
+ end
8
+
9
+ failure_message do |subject|
10
+ "expected #{@node.text.inspect} to match #{@text.inspect}"
11
+ end
12
+
13
+ end
@@ -1,3 +1,3 @@
1
1
  module Releaf
2
- VERSION = "1.1.20"
2
+ VERSION = "2.1.0"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: releaf
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.20
4
+ version: 2.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - CubeSystems
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-11-13 00:00:00.000000000 Z
11
+ date: 2021-01-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: releaf-core
@@ -16,58 +16,72 @@ dependencies:
16
16
  requirements:
17
17
  - - '='
18
18
  - !ruby/object:Gem::Version
19
- version: 1.1.20
19
+ version: 2.1.0
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - '='
25
25
  - !ruby/object:Gem::Version
26
- version: 1.1.20
26
+ version: 2.1.0
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: releaf-i18n_database
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - '='
32
32
  - !ruby/object:Gem::Version
33
- version: 1.1.20
33
+ version: 2.1.0
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - '='
39
39
  - !ruby/object:Gem::Version
40
- version: 1.1.20
40
+ version: 2.1.0
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: releaf-permissions
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - '='
46
46
  - !ruby/object:Gem::Version
47
- version: 1.1.20
47
+ version: 2.1.0
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - '='
53
53
  - !ruby/object:Gem::Version
54
- version: 1.1.20
54
+ version: 2.1.0
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: releaf-content
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - '='
60
60
  - !ruby/object:Gem::Version
61
- version: 1.1.20
61
+ version: 2.1.0
62
62
  type: :runtime
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - '='
67
67
  - !ruby/object:Gem::Version
68
- version: 1.1.20
68
+ version: 2.1.0
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: rspec-rails
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '4.0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '4.0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: rails-controller-testing
71
85
  requirement: !ruby/object:Gem::Requirement
72
86
  requirements:
73
87
  - - ">="
@@ -80,48 +94,62 @@ dependencies:
80
94
  - - ">="
81
95
  - !ruby/object:Gem::Version
82
96
  version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: listen
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: 3.2.1
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: 3.2.1
83
111
  - !ruby/object:Gem::Dependency
84
112
  name: capybara
85
113
  requirement: !ruby/object:Gem::Requirement
86
114
  requirements:
87
- - - ">="
115
+ - - "~>"
88
116
  - !ruby/object:Gem::Version
89
- version: '0'
117
+ version: '3.32'
90
118
  type: :development
91
119
  prerelease: false
92
120
  version_requirements: !ruby/object:Gem::Requirement
93
121
  requirements:
94
- - - ">="
122
+ - - "~>"
95
123
  - !ruby/object:Gem::Version
96
- version: '0'
124
+ version: '3.32'
97
125
  - !ruby/object:Gem::Dependency
98
- name: poltergeist
126
+ name: selenium-webdriver
99
127
  requirement: !ruby/object:Gem::Requirement
100
128
  requirements:
101
- - - ">="
129
+ - - "~>"
102
130
  - !ruby/object:Gem::Version
103
- version: '0'
131
+ version: '3.142'
104
132
  type: :development
105
133
  prerelease: false
106
134
  version_requirements: !ruby/object:Gem::Requirement
107
135
  requirements:
108
- - - ">="
136
+ - - "~>"
109
137
  - !ruby/object:Gem::Version
110
- version: '0'
138
+ version: '3.142'
111
139
  - !ruby/object:Gem::Dependency
112
- name: factory_girl_rails
140
+ name: factory_bot
113
141
  requirement: !ruby/object:Gem::Requirement
114
142
  requirements:
115
- - - '='
143
+ - - "~>"
116
144
  - !ruby/object:Gem::Version
117
- version: 4.8.0
145
+ version: '5.2'
118
146
  type: :development
119
147
  prerelease: false
120
148
  version_requirements: !ruby/object:Gem::Requirement
121
149
  requirements:
122
- - - '='
150
+ - - "~>"
123
151
  - !ruby/object:Gem::Version
124
- version: 4.8.0
152
+ version: '5.2'
125
153
  - !ruby/object:Gem::Dependency
126
154
  name: syntax
127
155
  requirement: !ruby/object:Gem::Requirement
@@ -140,16 +168,16 @@ dependencies:
140
168
  name: simplecov
141
169
  requirement: !ruby/object:Gem::Requirement
142
170
  requirements:
143
- - - ">="
171
+ - - "~>"
144
172
  - !ruby/object:Gem::Version
145
- version: '0'
173
+ version: 0.16.1
146
174
  type: :development
147
175
  prerelease: false
148
176
  version_requirements: !ruby/object:Gem::Requirement
149
177
  requirements:
150
- - - ">="
178
+ - - "~>"
151
179
  - !ruby/object:Gem::Version
152
- version: '0'
180
+ version: 0.16.1
153
181
  - !ruby/object:Gem::Dependency
154
182
  name: simplecov-rcov
155
183
  requirement: !ruby/object:Gem::Requirement
@@ -168,30 +196,30 @@ dependencies:
168
196
  name: database_cleaner
169
197
  requirement: !ruby/object:Gem::Requirement
170
198
  requirements:
171
- - - ">="
199
+ - - "~>"
172
200
  - !ruby/object:Gem::Version
173
- version: '0'
201
+ version: '1.8'
174
202
  type: :development
175
203
  prerelease: false
176
204
  version_requirements: !ruby/object:Gem::Requirement
177
205
  requirements:
178
- - - ">="
206
+ - - "~>"
179
207
  - !ruby/object:Gem::Version
180
- version: '0'
208
+ version: '1.8'
181
209
  - !ruby/object:Gem::Dependency
182
210
  name: shoulda-matchers
183
211
  requirement: !ruby/object:Gem::Requirement
184
212
  requirements:
185
213
  - - "~>"
186
214
  - !ruby/object:Gem::Version
187
- version: '2.8'
215
+ version: '4.3'
188
216
  type: :development
189
217
  prerelease: false
190
218
  version_requirements: !ruby/object:Gem::Requirement
191
219
  requirements:
192
220
  - - "~>"
193
221
  - !ruby/object:Gem::Version
194
- version: '2.8'
222
+ version: '4.3'
195
223
  - !ruby/object:Gem::Dependency
196
224
  name: db-query-matchers
197
225
  requirement: !ruby/object:Gem::Requirement
@@ -210,16 +238,16 @@ dependencies:
210
238
  name: coveralls
211
239
  requirement: !ruby/object:Gem::Requirement
212
240
  requirements:
213
- - - ">="
241
+ - - "~>"
214
242
  - !ruby/object:Gem::Version
215
- version: '0'
243
+ version: '0.8'
216
244
  type: :development
217
245
  prerelease: false
218
246
  version_requirements: !ruby/object:Gem::Requirement
219
247
  requirements:
220
- - - ">="
248
+ - - "~>"
221
249
  - !ruby/object:Gem::Version
222
- version: '0'
250
+ version: '0.8'
223
251
  - !ruby/object:Gem::Dependency
224
252
  name: timecop
225
253
  requirement: !ruby/object:Gem::Requirement
@@ -238,16 +266,16 @@ dependencies:
238
266
  name: with_model
239
267
  requirement: !ruby/object:Gem::Requirement
240
268
  requirements:
241
- - - ">="
269
+ - - "~>"
242
270
  - !ruby/object:Gem::Version
243
- version: '0'
271
+ version: '2.1'
244
272
  type: :development
245
273
  prerelease: false
246
274
  version_requirements: !ruby/object:Gem::Requirement
247
275
  requirements:
248
- - - ">="
276
+ - - "~>"
249
277
  - !ruby/object:Gem::Version
250
- version: '0'
278
+ version: '2.1'
251
279
  - !ruby/object:Gem::Dependency
252
280
  name: pry
253
281
  requirement: !ruby/object:Gem::Requirement
@@ -263,7 +291,7 @@ dependencies:
263
291
  - !ruby/object:Gem::Version
264
292
  version: '0'
265
293
  - !ruby/object:Gem::Dependency
266
- name: pry-nav
294
+ name: roo
267
295
  requirement: !ruby/object:Gem::Requirement
268
296
  requirements:
269
297
  - - ">="
@@ -277,19 +305,19 @@ dependencies:
277
305
  - !ruby/object:Gem::Version
278
306
  version: '0'
279
307
  - !ruby/object:Gem::Dependency
280
- name: roo
308
+ name: puma
281
309
  requirement: !ruby/object:Gem::Requirement
282
310
  requirements:
283
- - - ">="
311
+ - - "~>"
284
312
  - !ruby/object:Gem::Version
285
- version: '0'
313
+ version: '4.3'
286
314
  type: :development
287
315
  prerelease: false
288
316
  version_requirements: !ruby/object:Gem::Requirement
289
317
  requirements:
290
- - - ">="
318
+ - - "~>"
291
319
  - !ruby/object:Gem::Version
292
- version: '0'
320
+ version: '4.3'
293
321
  description: Administration interface for Ruby on Rails
294
322
  email: info@cubesystems.lv
295
323
  executables: []
@@ -304,32 +332,15 @@ files:
304
332
  - lib/releaf/rspec/features_matchers.rb
305
333
  - lib/releaf/rspec/helpers.rb
306
334
  - lib/releaf/rspec/matchers/cache_instance_method.rb
335
+ - lib/releaf/rspec/matchers/have_number_of_resources.rb
307
336
  - lib/releaf/rspec/matchers/match_html.rb
308
337
  - lib/releaf/test.rb
309
338
  - lib/releaf/version.rb
310
- - spec/factories/author.rb
311
- - spec/factories/banner_page.rb
312
- - spec/factories/book.rb
313
- - spec/factories/chapter.rb
314
- - spec/factories/common.rb
315
- - spec/factories/home_page.rb
316
- - spec/factories/node.rb
317
- - spec/factories/node_route.rb
318
- - spec/factories/publisher.rb
319
- - spec/factories/role.rb
320
- - spec/factories/text_page.rb
321
- - spec/factories/user.rb
322
- - spec/rails_helper.rb
323
- - spec/spec_helper.rb
324
- - spec/support/controller_macros.rb
325
- - spec/support/excel_helpers.rb
326
- - spec/support/shared/service_includer.rb
327
- - spec/support/wait_steps.rb
328
339
  homepage: https://github.com/cubesystems/releaf
329
340
  licenses:
330
341
  - MIT
331
342
  metadata: {}
332
- post_install_message:
343
+ post_install_message:
333
344
  rdoc_options: []
334
345
  require_paths:
335
346
  - lib
@@ -337,34 +348,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
337
348
  requirements:
338
349
  - - ">="
339
350
  - !ruby/object:Gem::Version
340
- version: 2.2.0
351
+ version: 2.5.0
341
352
  required_rubygems_version: !ruby/object:Gem::Requirement
342
353
  requirements:
343
354
  - - ">="
344
355
  - !ruby/object:Gem::Version
345
356
  version: '0'
346
357
  requirements: []
347
- rubyforge_project:
348
- rubygems_version: 2.6.10
349
- signing_key:
358
+ rubygems_version: 3.1.4
359
+ signing_key:
350
360
  specification_version: 4
351
361
  summary: Administration interface for Ruby on Rails
352
- test_files:
353
- - spec/factories/author.rb
354
- - spec/factories/banner_page.rb
355
- - spec/factories/book.rb
356
- - spec/factories/chapter.rb
357
- - spec/factories/common.rb
358
- - spec/factories/home_page.rb
359
- - spec/factories/node.rb
360
- - spec/factories/node_route.rb
361
- - spec/factories/publisher.rb
362
- - spec/factories/role.rb
363
- - spec/factories/text_page.rb
364
- - spec/factories/user.rb
365
- - spec/support/controller_macros.rb
366
- - spec/support/excel_helpers.rb
367
- - spec/support/shared/service_includer.rb
368
- - spec/support/wait_steps.rb
369
- - spec/rails_helper.rb
370
- - spec/spec_helper.rb
362
+ test_files: []
@@ -1,6 +0,0 @@
1
- FactoryGirl.define do
2
- factory :author do
3
- name "Aleksandrs"
4
- surname "Lielais"
5
- end
6
- end
@@ -1,5 +0,0 @@
1
- FactoryGirl.define do
2
- factory :banner_page do
3
-
4
- end
5
- end
@@ -1,5 +0,0 @@
1
- FactoryGirl.define do
2
- factory :book do
3
- title "some book"
4
- end
5
- end
@@ -1,7 +0,0 @@
1
- FactoryGirl.define do
2
- factory :chapter do
3
- sequence(:title) { |n| "Chapter #{n}" }
4
- text 'Some awesome text for great test'
5
- sample_html '<strong>heavy</strong> words'
6
- end
7
- end
@@ -1,5 +0,0 @@
1
- FactoryGirl.define do
2
- sequence(:name) {|n| "name-#{n}" }
3
- sequence(:surname) {|n| "surname-#{n}" }
4
- sequence(:email) {|n| "email-#{n}@example.com" }
5
- end
@@ -1,5 +0,0 @@
1
- FactoryGirl.define do
2
- factory :home_page do
3
- text_html "xx duper"
4
- end
5
- end
@@ -1,50 +0,0 @@
1
- FactoryGirl.define do
2
- factory :node, class: ::Node do
3
- sequence(:name) {|n| "node #{n}"}
4
- sequence(:slug) {|n| "node-#{n}"}
5
- content_type "HomePage"
6
- end
7
-
8
- factory :other_node, class: ::OtherSite::OtherNode do
9
- sequence(:name) {|n| "node #{n}"}
10
- sequence(:slug) {|n| "node-#{n}"}
11
- content_type "HomePage"
12
- end
13
-
14
- factory :home_page_node, class: ::Node do
15
- sequence(:name) {|n| "node #{n}"}
16
- sequence(:slug) {|n| "node-#{n}"}
17
- content_type "HomePage"
18
- content_attributes ({ intro_text_html: "some <strong>STRRRONG</strong> text" })
19
- end
20
-
21
- factory :other_home_page_node, class: ::OtherSite::OtherNode do
22
- sequence(:name) {|n| "node #{n}"}
23
- sequence(:slug) {|n| "node-#{n}"}
24
- content_type "HomePage"
25
- content_attributes ({ intro_text_html: "some <strong>STRRRONG</strong> text" })
26
- end
27
-
28
- factory :text_page_node, class: ::Node do
29
- sequence(:name) {|n| "node #{n}"}
30
- sequence(:slug) {|n| "node-#{n}"}
31
- content_type "TextPage"
32
- content_attributes ({ text_html: "some <strong>STRIONG</strong> text" })
33
- end
34
-
35
- factory :other_text_page_node, class: ::OtherSite::OtherNode do
36
- sequence(:name) {|n| "node #{n}"}
37
- sequence(:slug) {|n| "node-#{n}"}
38
- content_type "TextPage"
39
- content_attributes ({ text_html: "some <strong>STRIONG</strong> text" })
40
- end
41
-
42
- factory :banner_page_node, class: ::Node do
43
- sequence(:name) {|n| "node #{n}"}
44
- sequence(:slug) {|n| "node-#{n}"}
45
- content_type "BannerPage"
46
- content_attributes ({})
47
- end
48
-
49
-
50
- end
@@ -1,7 +0,0 @@
1
- FactoryGirl.define do
2
- factory :node_route, class: ::Releaf::Content::Route do
3
- sequence(:node_id) {|n| n}
4
- sequence(:path) {|n| "path-#{n}"}
5
- locale "en"
6
- end
7
- end
@@ -1,5 +0,0 @@
1
- FactoryGirl.define do
2
- factory :publisher do
3
- title "Good publisher"
4
- end
5
- end
@@ -1,21 +0,0 @@
1
- FactoryGirl.define do
2
- factory :roles, :class => Releaf::Permissions::Role do
3
- sequence(:name) {|n| "role #{n}"}
4
-
5
- factory :admin_role do
6
- default_controller "releaf/permissions/users"
7
- after(:create) do |role|
8
- Releaf.application.config.available_controllers.each do|controller|
9
- role.permissions.create!(permission: "controller.#{controller}")
10
- end
11
- end
12
- end
13
-
14
- factory :content_role do
15
- default_controller "admin/nodes"
16
- after(:create) do |role|
17
- role.permissions.create!(permission: "controller.admin/nodes")
18
- end
19
- end
20
- end
21
- end
@@ -1,5 +0,0 @@
1
- FactoryGirl.define do
2
- factory :text_page do
3
- text_html "super duper"
4
- end
5
- end
@@ -1,22 +0,0 @@
1
- FactoryGirl.define do
2
- factory :users, class: Releaf::Permissions::User do
3
- trait :user_basic do
4
- email
5
- name
6
- surname
7
- locale 'en'
8
- password 'password'
9
- password_confirmation 'password'
10
- end
11
-
12
- factory :user do
13
- user_basic
14
- association :role, factory: :admin_role
15
- end
16
-
17
- factory :content_user do
18
- user_basic
19
- association :role, factory: :content_role
20
- end
21
- end
22
- end
@@ -1,121 +0,0 @@
1
- require 'simplecov'
2
- require 'simplecov-rcov'
3
- require 'coveralls'
4
- require 'pry'
5
- require 'pry-nav'
6
- SimpleCov.command_name 'rspec'
7
-
8
- Coveralls.wear!('rails')
9
-
10
- if ENV["COVERAGE"]
11
- SimpleCov.formatter = SimpleCov::Formatter::MultiFormatter.new([
12
- SimpleCov::Formatter::HTMLFormatter,
13
- SimpleCov::Formatter::RcovFormatter,
14
- Coveralls::SimpleCov::Formatter
15
- ])
16
- SimpleCov.start do
17
- add_filter '/lib/releaf/rspec'
18
- add_filter '/spec/'
19
- end
20
- end
21
-
22
- ENV["RAILS_ENV"] ||= 'test'
23
- require 'spec_helper'
24
- require File.expand_path("../dummy/config/environment.rb", __FILE__)
25
- require 'rspec/rails'
26
- require 'factory_girl'
27
- require "shoulda-matchers"
28
- require 'db-query-matchers'
29
- require 'capybara/poltergeist'
30
- require 'with_model'
31
- require 'timecop'
32
- require 'with_model'
33
- require 'database_cleaner'
34
- require 'releaf/rspec'
35
- require 'sass' # To stop these warnings: WARN: tilt autoloading 'sass' in a non thread-safe way; explicit require 'sass' suggested.
36
-
37
- Rails.backtrace_cleaner.remove_silencers!
38
- # Load support files
39
- Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each { |f| require f }
40
-
41
- # for devise testing
42
- include Warden::Test::Helpers
43
-
44
-
45
- Capybara.register_driver :poltergeist do |app|
46
- Capybara::Poltergeist::Driver.new(app, js_errors: true, inspector: true, phantomjs_logger: WarningSuppressor)
47
- end
48
-
49
- class WarningSuppressor
50
- IGNOREABLE = /CoreText performance|userSpaceScaleFactor/
51
-
52
- def write(message)
53
- if message =~ IGNOREABLE
54
- 0
55
- else
56
- puts(message)
57
- 1
58
- end
59
- end
60
- end
61
-
62
- RSpec.configure do |config|
63
- config.use_transactional_fixtures = false
64
- config.infer_base_class_for_anonymous_controllers = false
65
- config.order = "random"
66
- config.infer_spec_type_from_file_location!
67
-
68
- config.color = true
69
-
70
- if ENV['COVERAGE']
71
- config.add_formatter(:progress)
72
- end
73
-
74
- config.include Releaf::Test::Helpers
75
- config.include WaitSteps
76
- config.include ExcelHelpers
77
- config.extend WithModel
78
-
79
- config.include Rails.application.routes.url_helpers
80
-
81
- # DEVISE
82
- config.include Devise::Test::ControllerHelpers, type: :controller
83
- config.extend ControllerMacros, type: :controller
84
- config.include Devise::Test::ControllerHelpers, type: :helper
85
- config.extend ControllerMacros, type: :helper
86
-
87
-
88
- # FactoryGirl
89
- config.include FactoryGirl::Syntax::Methods
90
-
91
- Capybara.javascript_driver = :poltergeist
92
- Capybara.server = :webrick
93
-
94
- # disable empty translation creation
95
-
96
- config.before(:each) do |example|
97
- Rails.cache.clear
98
- allow( Releaf.application.config.i18n_database ).to receive(:translation_auto_creation).and_return(false)
99
-
100
- if example.metadata[:db_strategy]
101
- DatabaseCleaner.strategy = example.metadata[:db_strategy]
102
- elsif Capybara.current_driver == :rack_test
103
- DatabaseCleaner.strategy = :transaction
104
- else
105
- DatabaseCleaner.strategy = :truncation
106
- end
107
-
108
- DatabaseCleaner.start
109
- # set settings
110
- I18n.locale = Releaf.application.config.available_locales.first
111
- I18n.default_locale = Releaf.application.config.available_locales.first
112
- end
113
-
114
- config.after do
115
- Timecop.return
116
- DatabaseCleaner.clean
117
- Releaf::Test.reset!
118
- end
119
- end
120
-
121
- Dir["#{File.dirname(__FILE__)}/factories/*.rb"].each { |f| require f }
@@ -1,86 +0,0 @@
1
- # This file was generated by the `rails generate rspec:install` command. Conventionally, all
2
- # specs live under a `spec` directory, which RSpec adds to the `$LOAD_PATH`.
3
- # The generated `.rspec` file contains `--require spec_helper` which will cause this
4
- # file to always be loaded, without a need to explicitly require it in any files.
5
- #
6
- # Given that it is always loaded, you are encouraged to keep this file as
7
- # light-weight as possible. Requiring heavyweight dependencies from this file
8
- # will add to the boot time of your test suite on EVERY test run, even for an
9
- # individual file that may not need all of that loaded. Instead, consider making
10
- # a separate helper file that requires the additional dependencies and performs
11
- # the additional setup, and require it from the spec files that actually need it.
12
- #
13
- # The `.rspec` file also contains a few flags that are not defaults but that
14
- # users commonly want.
15
- #
16
- # See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration
17
- RSpec.configure do |config|
18
- # rspec-expectations config goes here. You can use an alternate
19
- # assertion/expectation library such as wrong or the stdlib/minitest
20
- # assertions if you prefer.
21
- config.expect_with :rspec do |expectations|
22
- # This option will default to `true` in RSpec 4. It makes the `description`
23
- # and `failure_message` of custom matchers include text for helper methods
24
- # defined using `chain`, e.g.:
25
- # be_bigger_than(2).and_smaller_than(4).description
26
- # # => "be bigger than 2 and smaller than 4"
27
- # ...rather than:
28
- # # => "be bigger than 2"
29
- expectations.include_chain_clauses_in_custom_matcher_descriptions = true
30
- end
31
-
32
- # rspec-mocks config goes here. You can use an alternate test double
33
- # library (such as bogus or mocha) by changing the `mock_with` option here.
34
- config.mock_with :rspec do |mocks|
35
- # Prevents you from mocking or stubbing a method that does not exist on
36
- # a real object. This is generally recommended, and will default to
37
- # `true` in RSpec 4.
38
- mocks.verify_partial_doubles = true
39
- end
40
-
41
- # The settings below are suggested to provide a good initial experience
42
- # with RSpec, but feel free to customize to your heart's content.
43
- =begin
44
- # These two settings work together to allow you to limit a spec run
45
- # to individual examples or groups you care about by tagging them with
46
- # `:focus` metadata. When nothing is tagged with `:focus`, all examples
47
- # get run.
48
- config.filter_run :focus
49
- config.run_all_when_everything_filtered = true
50
-
51
- # Limits the available syntax to the non-monkey patched syntax that is recommended.
52
- # For more details, see:
53
- # - http://myronmars.to/n/dev-blog/2012/06/rspecs-new-expectation-syntax
54
- # - http://teaisaweso.me/blog/2013/05/27/rspecs-new-message-expectation-syntax/
55
- # - http://myronmars.to/n/dev-blog/2014/05/notable-changes-in-rspec-3#new__config_option_to_disable_rspeccore_monkey_patching
56
- config.disable_monkey_patching!
57
-
58
- # Many RSpec users commonly either run the entire suite or an individual
59
- # file, and it's useful to allow more verbose output when running an
60
- # individual spec file.
61
- if config.files_to_run.one?
62
- # Use the documentation formatter for detailed output,
63
- # unless a formatter has already been configured
64
- # (e.g. via a command-line flag).
65
- config.default_formatter = 'doc'
66
- end
67
-
68
- # Print the 10 slowest examples and example groups at the
69
- # end of the spec run, to help surface which specs are running
70
- # particularly slow.
71
- config.profile_examples = 10
72
-
73
- # Run specs in random order to surface order dependencies. If you find an
74
- # order dependency and want to debug it, you can fix the order by providing
75
- # the seed, which is printed after each run.
76
- # --seed 1234
77
- config.order = :random
78
-
79
- # Seed global randomization in this process using the `--seed` CLI option.
80
- # Setting this allows you to use `--seed` to deterministically reproduce
81
- # test failures related to randomization by passing the same `--seed` value
82
- # as the one that triggered the failure.
83
- Kernel.srand config.seed
84
- =end
85
- end
86
-
@@ -1,8 +0,0 @@
1
- module ControllerMacros
2
- def login_as_user factory
3
- before(:each) do
4
- @request.env["devise.mapping"] = Devise.mappings[:admin]
5
- sign_in FactoryGirl.create(factory) # Using factory girl as an example
6
- end
7
- end
8
- end
@@ -1,63 +0,0 @@
1
- module ExcelHelpers
2
- class ExcelMatcher
3
- require 'roo'
4
-
5
- def initialize(fixture_path)
6
- @fixture_path = fixture_path
7
- @errors = []
8
- end
9
-
10
- def matches?(actual_path)
11
- match_excel(actual_path)
12
-
13
- @errors.empty?
14
- end
15
-
16
- def failure_message
17
- "Following cells differ from expected: #{error_messages}"
18
- end
19
-
20
- private
21
-
22
- def error_messages
23
- messages = []
24
- @errors.each do |error|
25
- messages << "#{error[:cell]} (expect: #{error[:fixture_value]} was: #{error[:actual_value]})"
26
- end
27
-
28
- messages.join(', ')
29
- end
30
-
31
- def match_excel actual_path
32
- fixture = Roo::Spreadsheet.open(@fixture_path)
33
- fixture.default_sheet = fixture.sheets.first
34
-
35
- actual = Roo::Spreadsheet.open(actual_path)
36
- actual.default_sheet = actual.sheets.first
37
-
38
- match_sheet(actual, fixture)
39
- end
40
-
41
- def match_sheet actual, fixture
42
- rows = fixture.first_row..fixture.last_row
43
- columns = fixture.first_column..fixture.last_column
44
- for row in rows
45
- for column in columns
46
- fixture_value = fixture.cell(row, column)
47
- actual_value = actual.cell(row, column)
48
- if fixture_value != actual_value
49
- @errors << {
50
- cell: "#{Roo::Base.number_to_letter(column)}#{row}",
51
- fixture_value: fixture_value,
52
- actual_value: actual_value
53
- }
54
- end
55
- end
56
- end
57
- end
58
- end
59
-
60
- def match_excel(fixture_path)
61
- ExcelMatcher.new(fixture_path)
62
- end
63
- end
@@ -1,9 +0,0 @@
1
- shared_examples "an Releaf::Service includer" do
2
- it "includes InternalUpdate module" do
3
- expect(described_class.included_modules).to include Releaf::Service
4
- end
5
-
6
- it "has instance #call method" do
7
- expect(subject.respond_to?(:call)).to be true
8
- end
9
- end
@@ -1,23 +0,0 @@
1
- require "timeout"
2
-
3
- module WaitSteps
4
- extend RSpec::Matchers::DSL
5
-
6
- matcher :become_true do
7
- match do |block|
8
- begin
9
- Timeout.timeout(Capybara.default_max_wait_time) do
10
- sleep(0.1) until value = block.call
11
- sleep(0.2)
12
- value
13
- end
14
- rescue TimeoutError
15
- false
16
- end
17
- end
18
-
19
- def supports_block_expectations?
20
- true
21
- end
22
- end
23
- end