ndr_dev_support 2.1.2 → 3.0.0
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.
- checksums.yaml +5 -5
- data/.rubocop.yml +23 -4
- data/README.md +24 -31
- data/code_safety.yml +99 -19
- data/lib/ndr_dev_support/daemon/ci_server.rb +94 -0
- data/lib/ndr_dev_support/daemon/stoppable.rb +111 -0
- data/lib/ndr_dev_support/integration_testing.rb +25 -3
- data/lib/ndr_dev_support/integration_testing/drivers/chrome.rb +9 -0
- data/lib/ndr_dev_support/integration_testing/drivers/chrome_headless.rb +17 -0
- data/lib/ndr_dev_support/integration_testing/drivers/firefox.rb +9 -0
- data/lib/ndr_dev_support/integration_testing/drivers/poltergeist.rb +15 -0
- data/lib/ndr_dev_support/integration_testing/drivers/switchable.rb +21 -0
- data/lib/ndr_dev_support/integration_testing/dsl.rb +62 -0
- data/lib/ndr_dev_support/rake_ci/brakeman_helper.rb +48 -0
- data/lib/ndr_dev_support/rake_ci/concerns/commit_metadata_persistable.rb +49 -0
- data/lib/ndr_dev_support/rake_ci/simple_cov_helper.rb +26 -0
- data/lib/ndr_dev_support/slack_message_publisher.rb +48 -0
- data/lib/ndr_dev_support/tasks.rb +12 -0
- data/lib/ndr_dev_support/version.rb +1 -1
- data/lib/tasks/audit_code.rake +94 -92
- data/lib/tasks/ci/brakeman.rake +54 -0
- data/lib/tasks/ci/bundle_audit.rake +45 -0
- data/lib/tasks/ci/bundle_install.rake +21 -0
- data/lib/tasks/ci/housekeep.rake +8 -0
- data/lib/tasks/ci/linguist.rake +42 -0
- data/lib/tasks/ci/notes.rake +30 -0
- data/lib/tasks/ci/prometheus.rake +50 -0
- data/lib/tasks/ci/rugged.rake +39 -0
- data/lib/tasks/ci/server.rake +12 -0
- data/lib/tasks/ci/simplecov.rake +37 -0
- data/lib/tasks/ci/slack.rake +30 -0
- data/lib/tasks/ci/stats.rake +24 -0
- data/ndr_dev_support.gemspec +15 -3
- metadata +164 -18
- data/lib/ndr_dev_support/integration_testing/capybara.rb +0 -3
- data/lib/ndr_dev_support/integration_testing/connection_sharing.rb +0 -47
- data/lib/ndr_dev_support/integration_testing/poltergeist.rb +0 -39
- data/lib/ndr_dev_support/integration_testing/screenshot.rb +0 -51
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ndr_dev_support
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 3.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- NCRS Development Team
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-
|
11
|
+
date: 2018-05-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: pry
|
@@ -25,19 +25,19 @@ dependencies:
|
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
|
-
name:
|
28
|
+
name: highline
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- -
|
31
|
+
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version:
|
33
|
+
version: 1.6.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:
|
40
|
+
version: 1.6.0
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: parser
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -66,6 +66,20 @@ dependencies:
|
|
66
66
|
- - ">="
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: rubocop
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - '='
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: 0.52.1
|
76
|
+
type: :runtime
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - '='
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: 0.52.1
|
69
83
|
- !ruby/object:Gem::Dependency
|
70
84
|
name: capybara
|
71
85
|
requirement: !ruby/object:Gem::Requirement
|
@@ -94,6 +108,20 @@ dependencies:
|
|
94
108
|
- - ">="
|
95
109
|
- !ruby/object:Gem::Version
|
96
110
|
version: '0'
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: chromedriver-helper
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - ">="
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0'
|
118
|
+
type: :runtime
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - ">="
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '0'
|
97
125
|
- !ruby/object:Gem::Dependency
|
98
126
|
name: poltergeist
|
99
127
|
requirement: !ruby/object:Gem::Requirement
|
@@ -108,6 +136,104 @@ dependencies:
|
|
108
136
|
- - ">="
|
109
137
|
- !ruby/object:Gem::Version
|
110
138
|
version: 1.8.0
|
139
|
+
- !ruby/object:Gem::Dependency
|
140
|
+
name: selenium-webdriver
|
141
|
+
requirement: !ruby/object:Gem::Requirement
|
142
|
+
requirements:
|
143
|
+
- - ">="
|
144
|
+
- !ruby/object:Gem::Version
|
145
|
+
version: '0'
|
146
|
+
type: :runtime
|
147
|
+
prerelease: false
|
148
|
+
version_requirements: !ruby/object:Gem::Requirement
|
149
|
+
requirements:
|
150
|
+
- - ">="
|
151
|
+
- !ruby/object:Gem::Version
|
152
|
+
version: '0'
|
153
|
+
- !ruby/object:Gem::Dependency
|
154
|
+
name: activesupport
|
155
|
+
requirement: !ruby/object:Gem::Requirement
|
156
|
+
requirements:
|
157
|
+
- - "<"
|
158
|
+
- !ruby/object:Gem::Version
|
159
|
+
version: 6.0.0
|
160
|
+
type: :runtime
|
161
|
+
prerelease: false
|
162
|
+
version_requirements: !ruby/object:Gem::Requirement
|
163
|
+
requirements:
|
164
|
+
- - "<"
|
165
|
+
- !ruby/object:Gem::Version
|
166
|
+
version: 6.0.0
|
167
|
+
- !ruby/object:Gem::Dependency
|
168
|
+
name: brakeman
|
169
|
+
requirement: !ruby/object:Gem::Requirement
|
170
|
+
requirements:
|
171
|
+
- - ">="
|
172
|
+
- !ruby/object:Gem::Version
|
173
|
+
version: 4.2.0
|
174
|
+
type: :runtime
|
175
|
+
prerelease: false
|
176
|
+
version_requirements: !ruby/object:Gem::Requirement
|
177
|
+
requirements:
|
178
|
+
- - ">="
|
179
|
+
- !ruby/object:Gem::Version
|
180
|
+
version: 4.2.0
|
181
|
+
- !ruby/object:Gem::Dependency
|
182
|
+
name: bundler-audit
|
183
|
+
requirement: !ruby/object:Gem::Requirement
|
184
|
+
requirements:
|
185
|
+
- - ">="
|
186
|
+
- !ruby/object:Gem::Version
|
187
|
+
version: '0'
|
188
|
+
type: :runtime
|
189
|
+
prerelease: false
|
190
|
+
version_requirements: !ruby/object:Gem::Requirement
|
191
|
+
requirements:
|
192
|
+
- - ">="
|
193
|
+
- !ruby/object:Gem::Version
|
194
|
+
version: '0'
|
195
|
+
- !ruby/object:Gem::Dependency
|
196
|
+
name: github-linguist
|
197
|
+
requirement: !ruby/object:Gem::Requirement
|
198
|
+
requirements:
|
199
|
+
- - ">="
|
200
|
+
- !ruby/object:Gem::Version
|
201
|
+
version: '0'
|
202
|
+
type: :runtime
|
203
|
+
prerelease: false
|
204
|
+
version_requirements: !ruby/object:Gem::Requirement
|
205
|
+
requirements:
|
206
|
+
- - ">="
|
207
|
+
- !ruby/object:Gem::Version
|
208
|
+
version: '0'
|
209
|
+
- !ruby/object:Gem::Dependency
|
210
|
+
name: prometheus-client
|
211
|
+
requirement: !ruby/object:Gem::Requirement
|
212
|
+
requirements:
|
213
|
+
- - ">="
|
214
|
+
- !ruby/object:Gem::Version
|
215
|
+
version: '0'
|
216
|
+
type: :runtime
|
217
|
+
prerelease: false
|
218
|
+
version_requirements: !ruby/object:Gem::Requirement
|
219
|
+
requirements:
|
220
|
+
- - ">="
|
221
|
+
- !ruby/object:Gem::Version
|
222
|
+
version: '0'
|
223
|
+
- !ruby/object:Gem::Dependency
|
224
|
+
name: rugged
|
225
|
+
requirement: !ruby/object:Gem::Requirement
|
226
|
+
requirements:
|
227
|
+
- - ">="
|
228
|
+
- !ruby/object:Gem::Version
|
229
|
+
version: '0'
|
230
|
+
type: :runtime
|
231
|
+
prerelease: false
|
232
|
+
version_requirements: !ruby/object:Gem::Requirement
|
233
|
+
requirements:
|
234
|
+
- - ">="
|
235
|
+
- !ruby/object:Gem::Version
|
236
|
+
version: '0'
|
111
237
|
- !ruby/object:Gem::Dependency
|
112
238
|
name: bundler
|
113
239
|
requirement: !ruby/object:Gem::Requirement
|
@@ -123,33 +249,33 @@ dependencies:
|
|
123
249
|
- !ruby/object:Gem::Version
|
124
250
|
version: '1.7'
|
125
251
|
- !ruby/object:Gem::Dependency
|
126
|
-
name:
|
252
|
+
name: minitest
|
127
253
|
requirement: !ruby/object:Gem::Requirement
|
128
254
|
requirements:
|
129
255
|
- - "~>"
|
130
256
|
- !ruby/object:Gem::Version
|
131
|
-
version: '
|
257
|
+
version: '5.0'
|
132
258
|
type: :development
|
133
259
|
prerelease: false
|
134
260
|
version_requirements: !ruby/object:Gem::Requirement
|
135
261
|
requirements:
|
136
262
|
- - "~>"
|
137
263
|
- !ruby/object:Gem::Version
|
138
|
-
version: '
|
264
|
+
version: '5.0'
|
139
265
|
- !ruby/object:Gem::Dependency
|
140
|
-
name:
|
266
|
+
name: rake
|
141
267
|
requirement: !ruby/object:Gem::Requirement
|
142
268
|
requirements:
|
143
269
|
- - "~>"
|
144
270
|
- !ruby/object:Gem::Version
|
145
|
-
version: '
|
271
|
+
version: '10.0'
|
146
272
|
type: :development
|
147
273
|
prerelease: false
|
148
274
|
version_requirements: !ruby/object:Gem::Requirement
|
149
275
|
requirements:
|
150
276
|
- - "~>"
|
151
277
|
- !ruby/object:Gem::Version
|
152
|
-
version: '
|
278
|
+
version: '10.0'
|
153
279
|
description: Provides support to developers of NDR projects
|
154
280
|
email: []
|
155
281
|
executables: []
|
@@ -169,18 +295,38 @@ files:
|
|
169
295
|
- bin/setup
|
170
296
|
- code_safety.yml
|
171
297
|
- lib/ndr_dev_support.rb
|
298
|
+
- lib/ndr_dev_support/daemon/ci_server.rb
|
299
|
+
- lib/ndr_dev_support/daemon/stoppable.rb
|
172
300
|
- lib/ndr_dev_support/integration_testing.rb
|
173
|
-
- lib/ndr_dev_support/integration_testing/
|
174
|
-
- lib/ndr_dev_support/integration_testing/
|
175
|
-
- lib/ndr_dev_support/integration_testing/
|
176
|
-
- lib/ndr_dev_support/integration_testing/
|
301
|
+
- lib/ndr_dev_support/integration_testing/drivers/chrome.rb
|
302
|
+
- lib/ndr_dev_support/integration_testing/drivers/chrome_headless.rb
|
303
|
+
- lib/ndr_dev_support/integration_testing/drivers/firefox.rb
|
304
|
+
- lib/ndr_dev_support/integration_testing/drivers/poltergeist.rb
|
305
|
+
- lib/ndr_dev_support/integration_testing/drivers/switchable.rb
|
306
|
+
- lib/ndr_dev_support/integration_testing/dsl.rb
|
307
|
+
- lib/ndr_dev_support/rake_ci/brakeman_helper.rb
|
308
|
+
- lib/ndr_dev_support/rake_ci/concerns/commit_metadata_persistable.rb
|
309
|
+
- lib/ndr_dev_support/rake_ci/simple_cov_helper.rb
|
177
310
|
- lib/ndr_dev_support/rubocop/executor.rb
|
178
311
|
- lib/ndr_dev_support/rubocop/range_augmenter.rb
|
179
312
|
- lib/ndr_dev_support/rubocop/range_finder.rb
|
180
313
|
- lib/ndr_dev_support/rubocop/reporter.rb
|
314
|
+
- lib/ndr_dev_support/slack_message_publisher.rb
|
181
315
|
- lib/ndr_dev_support/tasks.rb
|
182
316
|
- lib/ndr_dev_support/version.rb
|
183
317
|
- lib/tasks/audit_code.rake
|
318
|
+
- lib/tasks/ci/brakeman.rake
|
319
|
+
- lib/tasks/ci/bundle_audit.rake
|
320
|
+
- lib/tasks/ci/bundle_install.rake
|
321
|
+
- lib/tasks/ci/housekeep.rake
|
322
|
+
- lib/tasks/ci/linguist.rake
|
323
|
+
- lib/tasks/ci/notes.rake
|
324
|
+
- lib/tasks/ci/prometheus.rake
|
325
|
+
- lib/tasks/ci/rugged.rake
|
326
|
+
- lib/tasks/ci/server.rake
|
327
|
+
- lib/tasks/ci/simplecov.rake
|
328
|
+
- lib/tasks/ci/slack.rake
|
329
|
+
- lib/tasks/ci/stats.rake
|
184
330
|
- lib/tasks/rubocop.rake
|
185
331
|
- ndr_dev_support.gemspec
|
186
332
|
homepage: https://github.com/PublicHealthEngland/ndr_dev_support
|
@@ -203,7 +349,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
203
349
|
version: '0'
|
204
350
|
requirements: []
|
205
351
|
rubyforge_project:
|
206
|
-
rubygems_version: 2.
|
352
|
+
rubygems_version: 2.7.6
|
207
353
|
signing_key:
|
208
354
|
specification_version: 4
|
209
355
|
summary: NDR Developer Support library
|
@@ -1,47 +0,0 @@
|
|
1
|
-
module NdrDevSupport
|
2
|
-
module IntegrationTesting
|
3
|
-
# ==========================================================================
|
4
|
-
#
|
5
|
-
# !! Caution - please read carefully !!
|
6
|
-
#
|
7
|
-
# This approach to connection sharing is known to be susceptible
|
8
|
-
# to race conditions. Anecdotally, we've managed to avoid this
|
9
|
-
# being a problem with Oracle because of the use of the confuration
|
10
|
-
#
|
11
|
-
# ActiveRecord::Base.connection.raw_connection.non_blocking = false
|
12
|
-
#
|
13
|
-
# which prevents the C extension in the adapter being able to run
|
14
|
-
# non-blocking code (i.e. outside of the control of the global interpretter
|
15
|
-
# lock). On Postgres, we haven't employed an equivalent workaround.
|
16
|
-
#
|
17
|
-
# For a more resilient alternative, please use the 'database_cleaner'
|
18
|
-
# gem (see README for details).
|
19
|
-
#
|
20
|
-
# ==========================================================================
|
21
|
-
#
|
22
|
-
# Capybara starts another rails application in a new thread
|
23
|
-
# to test against. For transactional fixtures to work, we need
|
24
|
-
# to share the database connection between threads.
|
25
|
-
#
|
26
|
-
# Derived from: https://gist.github.com/josevalim/470808
|
27
|
-
#
|
28
|
-
# Modified to support multiple connection pools
|
29
|
-
#
|
30
|
-
module ConnectionSharing
|
31
|
-
def self.prepended(base)
|
32
|
-
base.mattr_accessor :shared_connections
|
33
|
-
base.shared_connections = {}
|
34
|
-
|
35
|
-
base.singleton_class.prepend(ClassMethods)
|
36
|
-
end
|
37
|
-
|
38
|
-
module ClassMethods
|
39
|
-
def connection
|
40
|
-
shared_connections[connection_config] ||= retrieve_connection
|
41
|
-
end
|
42
|
-
end
|
43
|
-
end
|
44
|
-
end
|
45
|
-
end
|
46
|
-
|
47
|
-
ActiveRecord::Base.prepend(NdrDevSupport::IntegrationTesting::ConnectionSharing)
|
@@ -1,39 +0,0 @@
|
|
1
|
-
require 'capybara/poltergeist'
|
2
|
-
|
3
|
-
module NdrDevSupport
|
4
|
-
module IntegrationTesting
|
5
|
-
module Poltergeist
|
6
|
-
# Additional testing DSL, for phantomjs-specific interactions.
|
7
|
-
module DSL
|
8
|
-
# Instruct phantomjs to clear its session:
|
9
|
-
def clear_headless_session!
|
10
|
-
page.driver.reset!
|
11
|
-
end
|
12
|
-
|
13
|
-
# Get phantomjs to delete all of the cookies
|
14
|
-
# for the current page without resetting:
|
15
|
-
def delete_all_cookies!
|
16
|
-
page.driver.cookies.each do |name, value|
|
17
|
-
page.driver.remove_cookie(name)
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
|
-
ActionDispatch::IntegrationTest.include(NdrDevSupport::IntegrationTesting::Poltergeist::DSL)
|
26
|
-
|
27
|
-
# Register poltergeist as an available driver for capybara to use:
|
28
|
-
Capybara.register_driver :poltergeist do |app|
|
29
|
-
options = { phantomjs_options: ['--proxy-type=none'], timeout: 60 }
|
30
|
-
|
31
|
-
# If Ruby warn level is high, switch on additional output.
|
32
|
-
options.merge!(debug: true, inspector: true) if $VERBOSE
|
33
|
-
|
34
|
-
Capybara::Poltergeist::Driver.new(app, options)
|
35
|
-
end
|
36
|
-
|
37
|
-
# ...and make it the default:
|
38
|
-
Capybara.default_driver = :poltergeist
|
39
|
-
Capybara.javascript_driver = :poltergeist
|
@@ -1,51 +0,0 @@
|
|
1
|
-
require 'capybara-screenshot'
|
2
|
-
|
3
|
-
module NdrDevSupport
|
4
|
-
module IntegrationTesting
|
5
|
-
module Screenshot
|
6
|
-
# Allow integration tests to open screenshotable popup windows.
|
7
|
-
module DSL
|
8
|
-
delegate :within_screenshot_compatible_window, to: :page
|
9
|
-
end
|
10
|
-
|
11
|
-
# Adds variant of Capybara's #within_window method, that doesn't return
|
12
|
-
# to the preview window on an exception. This allows us to screenshot
|
13
|
-
# a popup automatically if a test errors/fails whilst it has focus.
|
14
|
-
module SessionExtensions
|
15
|
-
def within_screenshot_compatible_window(window_or_proc)
|
16
|
-
original = current_window
|
17
|
-
|
18
|
-
case window_or_proc
|
19
|
-
when Capybara::Window
|
20
|
-
switch_to_window(window_or_proc) unless original == window_or_proc
|
21
|
-
when Proc
|
22
|
-
switch_to_window { window_or_proc.call }
|
23
|
-
else
|
24
|
-
fail ArgumentError, 'Unsupported window type!'
|
25
|
-
end
|
26
|
-
|
27
|
-
scopes << nil
|
28
|
-
yield
|
29
|
-
@scopes.pop
|
30
|
-
switch_to_window(original)
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|
34
|
-
end
|
35
|
-
end
|
36
|
-
|
37
|
-
if defined?(MiniTest)
|
38
|
-
require 'capybara-screenshot/minitest'
|
39
|
-
ActionDispatch::IntegrationTest.include(Capybara::Screenshot::MiniTestPlugin)
|
40
|
-
else
|
41
|
-
require 'capybara-screenshot/testunit'
|
42
|
-
end
|
43
|
-
|
44
|
-
Capybara::Session.include(NdrDevSupport::IntegrationTesting::Screenshot::SessionExtensions)
|
45
|
-
ActionDispatch::IntegrationTest.include(NdrDevSupport::IntegrationTesting::Screenshot::DSL)
|
46
|
-
|
47
|
-
# Save screenshots to tmp/capybara/... on integration test error/failure:
|
48
|
-
Capybara::Screenshot.register_driver(:poltergeist) do |driver, path|
|
49
|
-
# Take full-height screenshots, rather than just capturing the viewport:
|
50
|
-
driver.render(path, full: true)
|
51
|
-
end
|