ndr_dev_support 1.3.0 → 2.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 5ba6131ef761d1d8b2fb442bd73356f764ddc325
4
- data.tar.gz: af5629685eee9297d3ac137e8105193b4aa2c370
3
+ metadata.gz: c5e420b22dd99cb540e221868882df3dd5ed5f72
4
+ data.tar.gz: 98e632dee9557a15efb6bc0a0b471bf0c19ccd27
5
5
  SHA512:
6
- metadata.gz: 5094045b9d8b7ed2d6ae03459a1cb1e40f771d4136246ec5addc69db103e1add3d478a12e7dbffc4cdb74f8cc3c5b9563e3b82815ca0f31e9c83dbcecd3ce639
7
- data.tar.gz: 4313585e21ce9e76d2026de9addfacc0e93df926f53216597f1541de1761e31cb3c05c696b69c24c805c8b4e7e10f2a12f45b2d571b17668d0ade0e6dc9a797c
6
+ metadata.gz: 58867215bd1bb215c1a11d98b8aad7ea0bef0c647bc9aaefb30c308bf90d5a4e33560c1a74f25c879e784228a6c4da990386cb1cdfc12d54481545ba27da6335
7
+ data.tar.gz: 3847cab395ecc6bca63662a838d7191f09850c32ce87c95dbbffd470aa452151d9a56d6dab9bb15e618349a8fb90344b47054209d84e5f5d5ccac23a83a86646
data/.rubocop.yml CHANGED
@@ -7,10 +7,10 @@
7
7
  AllCops:
8
8
  # All cops should ignore files in the following locations:
9
9
  Exclude:
10
- - 'bin/*'
11
- - 'db/**/*'
12
- - 'lib/generators/**/templates/*'
13
- - 'vendor/**/*'
10
+ - 'bin/*'
11
+ - 'db/**/*'
12
+ - 'lib/generators/**/templates/*'
13
+ - 'vendor/**/*'
14
14
 
15
15
  # Run the Rails cops by default (-R/--rails not required):
16
16
  Rails:
@@ -22,10 +22,18 @@ Rails:
22
22
  Style/BlockComments:
23
23
  Enabled: false
24
24
 
25
+ Style/Documentation:
26
+ Exclude:
27
+ - 'test/**/*.rb'
28
+
25
29
  Style/DotPosition:
26
30
  # Multi-line method chaining should be done with trailing dots.
27
31
  EnforcedStyle: trailing
28
32
 
33
+ Style/FrozenStringLiteralComment:
34
+ # We're not confident enough to make this recommendation everywhere
35
+ Enabled: false
36
+
29
37
  Style/IfUnlessModifier:
30
38
  MaxLineLength: 100
31
39
 
@@ -35,7 +43,7 @@ Style/ModuleFunction:
35
43
 
36
44
  Style/NumericLiterals:
37
45
  Exclude:
38
- - 'test/**/*.rb'
46
+ - 'test/**/*.rb'
39
47
 
40
48
  Style/SingleLineBlockParams:
41
49
  # Prefer readability of contextually-named variables.
@@ -48,15 +56,23 @@ Style/WhileUntilModifier:
48
56
  # NOTE: we bump some metrics by 50%, in recognition of Rubocop's
49
57
  # desire to split that which we would consider atomic.
50
58
 
59
+ Metrics/AbcSize:
60
+ Max: 23
61
+
62
+ Metrics/BlockLength:
63
+ # We're already limiting method size, blocks outside of methods
64
+ # can legitimately be long (RuboCop defaults to max: 25 lines).
65
+ Enabled: false
66
+
51
67
  Metrics/ClassLength:
52
68
  Max: 150
53
69
  Exclude:
54
- - test/**/*.rb
70
+ - 'test/**/*.rb'
55
71
 
56
72
  Metrics/ModuleLength:
57
73
  Max: 150
58
74
  Exclude:
59
- - test/**/*.rb
75
+ - 'test/**/*.rb'
60
76
 
61
77
  Metrics/CyclomaticComplexity:
62
78
  Max: 9
@@ -64,12 +80,12 @@ Metrics/CyclomaticComplexity:
64
80
  Metrics/LineLength:
65
81
  Max: 100
66
82
  Exclude:
67
- - test/**/*.rb
83
+ - 'test/**/*.rb'
68
84
 
69
85
  Metrics/MethodLength:
70
86
  Max: 15
71
87
  Exclude:
72
- - test/**/*.rb
88
+ - 'test/**/*.rb'
73
89
 
74
90
  Metrics/PerceivedComplexity:
75
91
  Max: 12
data/README.md CHANGED
@@ -84,7 +84,7 @@ require 'ndr_dev_support/tasks'
84
84
 
85
85
  ### Integration test environment
86
86
 
87
- ndr_dev_support bundles a configured Rails integration testing environment. It uses `capybara` and `poltergeist` to drive a PhantomJS headless browser, and includes all necessary configuration (e.g. connection sharing / transactional test support).
87
+ ndr_dev_support bundles a configured Rails integration testing environment. It uses `capybara` and `poltergeist` to drive a PhantomJS headless browser, and includes some sensible configuration.
88
88
 
89
89
  If an integration test errors or fails, `capybara-screenshot` is used to automatically retrieve a full-height screenshot from PhantomJS, which is then stored in `tmp/`.
90
90
 
@@ -100,6 +100,39 @@ To use, ensure `phantomjs` is installed, and add the following to your applicati
100
100
  require 'ndr_dev_support/integration_testing'
101
101
  ```
102
102
 
103
+ When using `capybara` with PhantomJS, the test database must be consistent between the test runner and the application being tested. With transactional tests in operation, this means that both must share a connection. Doing so is error-prone, and can introduce race conditions. However, some projects have had success with the approach, so it is available within `ndr_dev_support` with the following additional require statement:
104
+
105
+ ```ruby
106
+ # WARNING: can result in race conditions within the test suite
107
+ require 'ndr_dev_support/integration_testing/connection_sharing'
108
+ ```
109
+
110
+ The slower, more reliable, alternative is to use the `database_cleaner` gem. `ndr_dev_support` provides no built-in support for this approach, as configuration can be quite project-specific. However, as a starting point:
111
+
112
+ Add to the `Gemfile`:
113
+
114
+ ```ruby
115
+ group :test do
116
+ gem 'database_cleaner'
117
+ end
118
+ ```
119
+
120
+ Add to `test_helper.rb`:
121
+
122
+ ```ruby
123
+ require 'database_cleaner'
124
+ DatabaseCleaner.strategy = :deletion # anecdotally, faster than :truncation for our projects
125
+
126
+ class ActionDispatch::IntegrationTest
127
+ # Don't wrap each test case in a transaction:
128
+ self.use_transactional_tests = false
129
+
130
+ # Instead, insert fixtures afresh between each test:
131
+ setup { DatabaseCleaner.start }
132
+ teardown { DatabaseCleaner.clean }
133
+ end
134
+ ```
135
+
103
136
  ## Development
104
137
 
105
138
  After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake test` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
data/code_safety.yml CHANGED
@@ -6,8 +6,8 @@ file safety:
6
6
  safe_revision: c59a45986f8b6d087c8c21b1e889f31f7346da17
7
7
  ".rubocop.yml":
8
8
  comments:
9
- reviewed_by: timgentry
10
- safe_revision: 1cc4e768fd872e0776962c50fa220a17ee738558
9
+ reviewed_by: josh.pencheon
10
+ safe_revision: b37c9dc7871fad7c592945188b2e7307f1abedcd
11
11
  ".travis.yml":
12
12
  comments:
13
13
  reviewed_by: josh.pencheon
@@ -26,8 +26,8 @@ file safety:
26
26
  safe_revision: c59a45986f8b6d087c8c21b1e889f31f7346da17
27
27
  README.md:
28
28
  comments:
29
- reviewed_by: timgentry
30
- safe_revision: 337228acefd995d094490b51f554c74aeec69e89
29
+ reviewed_by: josh.pencheon
30
+ safe_revision: 6cf4a9cab6f8f028d45e05e256b63d9fe9d1b7fc
31
31
  Rakefile:
32
32
  comments:
33
33
  reviewed_by: josh.pencheon
@@ -47,7 +47,7 @@ file safety:
47
47
  lib/ndr_dev_support/integration_testing.rb:
48
48
  comments:
49
49
  reviewed_by: josh.pencheon
50
- safe_revision: 88ac9269eb8f0b44c5920a946708e4715421bcad
50
+ safe_revision: 5b238d73cfb0e506ced8b4e474cc2b3392838925
51
51
  lib/ndr_dev_support/integration_testing/capybara.rb:
52
52
  comments:
53
53
  reviewed_by: josh.pencheon
@@ -55,7 +55,7 @@ file safety:
55
55
  lib/ndr_dev_support/integration_testing/connection_sharing.rb:
56
56
  comments:
57
57
  reviewed_by: josh.pencheon
58
- safe_revision: 14716806f63058b1d5f3485e2380302fa6ef7526
58
+ safe_revision: 6cf4a9cab6f8f028d45e05e256b63d9fe9d1b7fc
59
59
  lib/ndr_dev_support/integration_testing/poltergeist.rb:
60
60
  comments:
61
61
  reviewed_by: josh.pencheon
@@ -86,8 +86,8 @@ file safety:
86
86
  safe_revision: a55c971cb770a8e5dc4be7ed66663dd5d695fcd1
87
87
  lib/ndr_dev_support/version.rb:
88
88
  comments:
89
- reviewed_by: timgentry
90
- safe_revision: d34d36104299c4debfd2a02cd1af050fcbbcc3e8
89
+ reviewed_by: josh.pencheon
90
+ safe_revision: 48575bd1b969dbae8bf03a645a6fa0b0ecf9bba9
91
91
  lib/tasks/audit_code.rake:
92
92
  comments: Identical to the version reviewed by josh.pencheon when contained within
93
93
  ndr_support
@@ -1,4 +1,3 @@
1
1
  require 'ndr_dev_support/integration_testing/capybara'
2
- require 'ndr_dev_support/integration_testing/connection_sharing'
3
2
  require 'ndr_dev_support/integration_testing/poltergeist'
4
3
  require 'ndr_dev_support/integration_testing/screenshot'
@@ -1,5 +1,24 @@
1
1
  module NdrDevSupport
2
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
+ #
3
22
  # Capybara starts another rails application in a new thread
4
23
  # to test against. For transactional fixtures to work, we need
5
24
  # to share the database connection between threads.
@@ -2,5 +2,5 @@
2
2
  # This defines the NdrDevSupport version. If you change it, rebuild and commit the gem.
3
3
  # Use "rake build" to build the gem, see rake -T for all bundler rake tasks (and our own).
4
4
  module NdrDevSupport
5
- VERSION = '1.3.0'.freeze
5
+ VERSION = '2.0.0'.freeze
6
6
  end
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: 1.3.0
4
+ version: 2.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: 2016-11-15 00:00:00.000000000 Z
11
+ date: 2016-11-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rubocop