webvalve 0.10.0 → 0.11.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
  SHA256:
3
- metadata.gz: 3bf83f303a9549cb99552f7fc6810ac73ad574d551247d9b7b00f637290e34e8
4
- data.tar.gz: 110b2a233b4abcf9a59a49f0354202b274dd6056561ed9aff9e985c9f8335a7a
3
+ metadata.gz: 467554297c4382a3f12ce68e32c1b9fed9b2d69afa2b97fb46d3f98be5437dc7
4
+ data.tar.gz: cb6a4ee0e1a8db1cb37c78737a9d3822b8a4da3e864217612599174b6687e8ee
5
5
  SHA512:
6
- metadata.gz: a62b2b9f6a2956445f9235b88eaa5abd425845da985952394bc0844d951308f556d54d13432df941f59a9047f62dd9ee4053a5b91d770bf6532a403297d0d8cc
7
- data.tar.gz: ea441eb2ba4de0f1a84c8ab6648dd1a6c25c6858985b15ebd090bb277a3a9d637df8d439992934bf9671ea99c57625d9abce457d4f2b5a43a96de3b3af9ceb06
6
+ metadata.gz: 44fd3a16ea1499de33242bbb8a37dcff77e1af8b7a70ea220fda9c29fce8505f19fc2739f48fdb9f47471fe4f5057ed8ffa8d6918949d8e6d6491160b3e79c1d
7
+ data.tar.gz: ad0bdc05029b4fdb3e58428186841bcfc6bbeba9e7f21e2df8ab4e4fd2ded9fba0af2aa592b8d1fe0752b141b30d5c8020fd7b57efe65620033a942f9eb9bd98
data/CHANGELOG.md CHANGED
@@ -9,6 +9,15 @@ and this project aims to adhere to [Semantic Versioning](http://semver.org/spec/
9
9
  ### Added
10
10
  ### Removed
11
11
 
12
+ ## [0.11.0] - 2019-09-23
13
+ ### Changed
14
+ - rework configuration so that WebValve has 3 operating modes: off,
15
+ on+allowing, and on+intercepting. support toggling the latter two
16
+ modes with
17
+ `WEBVALVED_ENABLED=1`+`WEBVALVE_SERVICE_ENABLED_DEFAULT=1` and
18
+ `WEBVALVED_ENABLED=1`+`WEBVALVE_SERVICE_ENABLED_DEFAULT=0`.
19
+ (https://github.com/Betterment/webvalve/pull/34)
20
+
12
21
  ## [0.10.0] - 2019-09-23
13
22
  ### Changed
14
23
  - `Webvalve.register` no longer accepts classes; you must provide class names as strings. Fixes a Rails 6 deprecation warning. (https://github.com/Betterment/webvalve/pull/35)
data/README.md CHANGED
@@ -227,12 +227,22 @@ not registered.
227
227
 
228
228
  ## Frequently Asked Questions
229
229
 
230
- > Can I use WebValve in environments like staging and demo?
230
+ > Can I use WebValve in environments like staging, demo, and production?
231
231
 
232
232
  Yes! By default WebValve is only enabled in test and development
233
233
  environments; however, it can be enabled in other environments by
234
- setting `WEBVALVE_ENABLED=true`. This can be useful for spinning up
235
- cheap, one-off environments for user-testing or demos.
234
+ setting `WEBVALVE_ENABLED=true` (actually, any of 1/t/true will work).
235
+ This can be useful for spinning up cheap, one-off environments for
236
+ user-testing or demos. When WebValve is enabled in any environment other
237
+ than development/test it will default services to enabled rather than
238
+ disabled, allowing all traffic to pass-thru. This ensures that
239
+ production-like environments are run integrated by default. You can
240
+ change this behavior by setting `WEBVALVE_SERVICE_ENABLED_DEFAULT=false`
241
+ (any of 0/f/false will work). This will default to the same experience
242
+ as local development, defaulting services to disabled, intercepting all
243
+ traffic. In either of these modes, you can use the
244
+ `$SERVICE_ENABLED=true/false` to toggle a specific service into the
245
+ desired state.
236
246
 
237
247
  > Can I use WebValve without Rails?
238
248
 
data/lib/webvalve.rb CHANGED
@@ -3,9 +3,6 @@ require 'active_support'
3
3
  require 'active_support/core_ext'
4
4
 
5
5
  module WebValve
6
- ALWAYS_ENABLED_ENVS = %w(development test).freeze
7
- ENABLED_VALUES = %w(1 t true).freeze
8
-
9
6
  class << self
10
7
  # @!method setup
11
8
  # @see WebValve::Manager#setup
@@ -15,23 +12,11 @@ module WebValve
15
12
  # @see WebValve::Manager#allow_url
16
13
  # @!method reset
17
14
  # @see WebValve::Manager#reset
18
- delegate :setup, :register, :allow_url, :reset, to: :manager
15
+ # @!method enabled?
16
+ # @see WebValve::Manager#enabled?
17
+ delegate :setup, :register, :allow_url, :reset, :enabled?, to: :manager
19
18
  attr_writer :logger
20
19
 
21
- def enabled?
22
- if env.in?(ALWAYS_ENABLED_ENVS)
23
- if ENV.key? 'WEBVALVE_ENABLED'
24
- logger.warn(<<~MESSAGE)
25
- WARNING: Ignoring WEBVALVE_ENABLED environment variable setting (#{ENV['WEBVALVE_ENABLED']})
26
- WebValve is always enabled in development and test environments.
27
- MESSAGE
28
- end
29
- true
30
- else
31
- ENABLED_VALUES.include?(ENV['WEBVALVE_ENABLED'])
32
- end
33
- end
34
-
35
20
  def config_paths
36
21
  @config_paths ||= Set.new
37
22
  end
@@ -7,9 +7,12 @@ module WebValve
7
7
  @custom_service_url = url
8
8
  end
9
9
 
10
- def should_intercept?
11
- WebValve.env.test? || # always intercept in test
12
- (WebValve.enabled? && !service_enabled_in_env?)
10
+ def explicitly_enabled?
11
+ value_from_env.present? && WebValve::ENABLED_VALUES.include?(value_from_env.to_s)
12
+ end
13
+
14
+ def explicitly_disabled?
15
+ value_from_env.present? && WebValve::DISABLED_VALUES.include?(value_from_env.to_s)
13
16
  end
14
17
 
15
18
  def service_url
@@ -24,6 +27,10 @@ module WebValve
24
27
 
25
28
  attr_reader :custom_service_url
26
29
 
30
+ def value_from_env
31
+ ENV["#{service_name.to_s.upcase}_ENABLED"]
32
+ end
33
+
27
34
  def missing_url_message
28
35
  <<~MESSAGE
29
36
  There is no URL defined for #{service_class_name}.
@@ -36,10 +43,6 @@ module WebValve
36
43
  url.to_s.sub(%r(\Ahttp(s)?://[^@/]+@), 'http\1://')
37
44
  end
38
45
 
39
- def service_enabled_in_env?
40
- WebValve::ENABLED_VALUES.include?(ENV["#{service_name.to_s.upcase}_ENABLED"])
41
- end
42
-
43
46
  def default_service_url
44
47
  ENV["#{service_name.to_s.upcase}_API_URL"]
45
48
  end
@@ -3,6 +3,10 @@ require 'singleton'
3
3
  require 'set'
4
4
 
5
5
  module WebValve
6
+ ALWAYS_ENABLED_ENVS = %w(development test).freeze
7
+ ENABLED_VALUES = %w(1 t true).freeze
8
+ DISABLED_VALUES = %w(0 f false).freeze
9
+
6
10
  # @api private
7
11
  class Manager
8
12
  include Singleton
@@ -19,16 +23,46 @@ module WebValve
19
23
  end
20
24
 
21
25
  def setup
22
- fake_service_configs.each do |config|
23
- if config.should_intercept?
24
- webmock_service config
25
- else
26
- allowlist_service config
26
+ return unless enabled?
27
+
28
+ if intercepting?
29
+ fake_service_configs.each do |config|
30
+ if !WebValve.env.test? && config.explicitly_enabled?
31
+ allowlist_service config
32
+ else
33
+ webmock_service config
34
+ end
35
+ end
36
+ WebMock.disable_net_connect! webmock_disable_options
37
+ WebMock.enable!
38
+ end
39
+
40
+ if allowing?
41
+ fake_service_configs.each do |config|
42
+ if config.explicitly_disabled?
43
+ webmock_service config
44
+ end
45
+ end
46
+ if fake_service_configs.any?(&:explicitly_disabled?)
47
+ WebMock.allow_net_connect!
48
+ WebMock.enable!
27
49
  end
28
50
  end
51
+ end
52
+
53
+ # @api private
54
+ def enabled?
55
+ in_always_intercepting_env? || explicitly_enabled?
56
+ end
57
+
58
+ # @api private
59
+ def intercepting?
60
+ in_always_intercepting_env? || (explicitly_enabled? && !services_enabled_by_default?)
61
+ end
29
62
 
30
- WebMock.enable!
31
- WebMock.disable_net_connect! webmock_disable_options
63
+ # @api private
64
+ def allowing?
65
+ !in_always_intercepting_env? && explicitly_enabled? && services_enabled_by_default?
32
66
  end
33
67
 
34
68
  # @api private
@@ -49,6 +83,38 @@ module WebValve
49
83
 
50
84
  private
51
85
 
86
+ def explicitly_enabled?
87
+ ENABLED_VALUES.include?(ENV['WEBVALVE_ENABLED'])
88
+ end
89
+
90
+ def services_enabled_by_default?
91
+ if WebValve.env.in?(ALWAYS_ENABLED_ENVS)
92
+ if ENV.key? 'WEBVALVE_SERVICE_ENABLED_DEFAULT'
93
+ WebValve.logger.warn(<<~MESSAGE)
94
+ WARNING: Ignoring WEBVALVE_SERVICE_ENABLED_DEFAULT environment variable setting (#{ENV['WEBVALVE_SERVICE_ENABLED_DEFAULT']})
95
+ WebValve is always enabled in intercepting mode in development and test environments.
96
+ MESSAGE
97
+ end
98
+ false
99
+ else
100
+ ENABLED_VALUES.include?(ENV.fetch('WEBVALVE_SERVICE_ENABLED_DEFAULT', '1'))
101
+ end
102
+ end
103
+
104
+ def in_always_intercepting_env?
105
+ if WebValve.env.in?(ALWAYS_ENABLED_ENVS)
106
+ if ENV.key? 'WEBVALVE_ENABLED'
107
+ WebValve.logger.warn(<<~MESSAGE)
108
+ WARNING: Ignoring WEBVALVE_ENABLED environment variable setting (#{ENV['WEBVALVE_ENABLED']})
109
+ WebValve is always enabled in development and test environments.
110
+ MESSAGE
111
+ end
112
+ true
113
+ else
114
+ false
115
+ end
116
+ end
117
+
52
118
  def webmock_disable_options
53
119
  { allow_localhost: true }.tap do |opts|
54
120
  opts[:allow] = allowlisted_url_regexps unless WebValve.env.test?
@@ -1,3 +1,3 @@
1
1
  module WebValve
2
- VERSION = "0.10.0"
2
+ VERSION = "0.11.0"
3
3
  end
@@ -0,0 +1,3 @@
1
+ //= link_tree ../images
2
+ //= link_directory ../javascripts .js
3
+ //= link_directory ../stylesheets .css
@@ -6,3 +6,19 @@
6
6
  WebValve Request Captured (19.5ms) dummy.dev GET /widgets [200]
7
7
  WebValve Request Captured (0.4ms) dummy.dev GET /foos []
8
8
  WebValve Request Captured (1.8ms) dummy.dev GET /widgets [200]
9
+ WebValve Request Captured (5.2ms) dummy.dev GET /widgets [200]
10
+ WebValve Request Captured (0.3ms) dummy.dev GET /foos []
11
+ WebValve Request Captured (0.3ms) dummy.dev GET /foos []
12
+ WebValve Request Captured (2.9ms) dummy.dev GET /widgets [200]
13
+ WebValve Request Captured (7.0ms) dummy.dev GET /widgets [200]
14
+ WebValve Request Captured (0.3ms) dummy.dev GET /foos []
15
+ WebValve Request Captured (2.7ms) dummy.dev GET /widgets [200]
16
+ WebValve Request Captured (0.4ms) dummy.dev GET /foos []
17
+ WebValve Request Captured (0.5ms) dummy.dev GET /foos []
18
+ WebValve Request Captured (4.3ms) dummy.dev GET /widgets [200]
19
+ WebValve Request Captured (2.1ms) dummy.dev GET /widgets [200]
20
+ WebValve Request Captured (0.3ms) dummy.dev GET /foos []
21
+ WebValve Request Captured (1.7ms) dummy.dev GET /widgets [200]
22
+ WebValve Request Captured (0.4ms) dummy.dev GET /foos []
23
+ WebValve Request Captured (4.2ms) dummy.dev GET /widgets [200]
24
+ WebValve Request Captured (0.3ms) dummy.dev GET /foos []
data/spec/examples.txt CHANGED
@@ -1,32 +1,61 @@
1
- example_id | status | run_time |
2
- ------------------------------------------------------ | ------ | --------------- |
3
- ./spec/webvalve/fake_service_config_spec.rb[1:1:1:1] | passed | 0.00011 seconds |
4
- ./spec/webvalve/fake_service_config_spec.rb[1:1:1:2] | passed | 0.00014 seconds |
5
- ./spec/webvalve/fake_service_config_spec.rb[1:1:2:1] | passed | 0.00012 seconds |
6
- ./spec/webvalve/fake_service_config_spec.rb[1:1:2:2] | passed | 0.00014 seconds |
7
- ./spec/webvalve/fake_service_config_spec.rb[1:1:2:3] | passed | 0.00015 seconds |
8
- ./spec/webvalve/fake_service_config_spec.rb[1:1:3:1] | passed | 0.00012 seconds |
9
- ./spec/webvalve/fake_service_config_spec.rb[1:1:3:2] | passed | 0.00011 seconds |
10
- ./spec/webvalve/fake_service_config_spec.rb[1:1:3:3:1] | passed | 0.00016 seconds |
11
- ./spec/webvalve/fake_service_config_spec.rb[1:1:3:3:2] | passed | 0.00024 seconds |
12
- ./spec/webvalve/fake_service_config_spec.rb[1:2:1] | passed | 0.00132 seconds |
13
- ./spec/webvalve/fake_service_config_spec.rb[1:2:2] | passed | 0.00061 seconds |
14
- ./spec/webvalve/fake_service_config_spec.rb[1:2:3] | passed | 0.00016 seconds |
15
- ./spec/webvalve/fake_service_spec.rb[1:1] | passed | 0.0031 seconds |
16
- ./spec/webvalve/fake_service_spec.rb[1:2:1] | passed | 0.00281 seconds |
17
- ./spec/webvalve/fake_service_spec.rb[1:2:2] | passed | 0.02529 seconds |
18
- ./spec/webvalve/manager_spec.rb[1:1] | passed | 0.00005 seconds |
19
- ./spec/webvalve/manager_spec.rb[1:2:1] | passed | 0.00622 seconds |
20
- ./spec/webvalve/manager_spec.rb[1:3:1] | passed | 0.00033 seconds |
21
- ./spec/webvalve/manager_spec.rb[1:4:1] | passed | 0.00018 seconds |
22
- ./spec/webvalve/manager_spec.rb[1:5:1] | passed | 0.02341 seconds |
23
- ./spec/webvalve/manager_spec.rb[1:5:2] | passed | 0.00039 seconds |
24
- ./spec/webvalve/manager_spec.rb[1:5:3] | passed | 0.00063 seconds |
25
- ./spec/webvalve/manager_spec.rb[1:5:4:1] | passed | 0.00038 seconds |
26
- ./spec/webvalve/manager_spec.rb[1:5:5:1] | passed | 0.00122 seconds |
27
- ./spec/webvalve/manager_spec.rb[1:5:5:2] | passed | 0.00129 seconds |
28
- ./spec/webvalve/manager_spec.rb[1:5:5:3] | passed | 0.00181 seconds |
29
- ./spec/webvalve_spec.rb[1:1] | passed | 0.0001 seconds |
30
- ./spec/webvalve_spec.rb[1:2] | passed | 0.00449 seconds |
31
- ./spec/webvalve_spec.rb[1:3] | passed | 0.00014 seconds |
32
- ./spec/webvalve_spec.rb[1:4] | passed | 0.00009 seconds |
1
+ example_id | status | run_time |
2
+ -------------------------------------------------- | ------ | --------------- |
3
+ ./spec/webvalve/fake_service_config_spec.rb[1:1:1] | passed | 0.00032 seconds |
4
+ ./spec/webvalve/fake_service_config_spec.rb[1:1:2] | passed | 0.00406 seconds |
5
+ ./spec/webvalve/fake_service_config_spec.rb[1:2:1] | passed | 0.00014 seconds |
6
+ ./spec/webvalve/fake_service_config_spec.rb[1:2:2] | passed | 0.00015 seconds |
7
+ ./spec/webvalve/fake_service_config_spec.rb[1:3:1] | passed | 0.00215 seconds |
8
+ ./spec/webvalve/fake_service_config_spec.rb[1:3:2] | passed | 0.00019 seconds |
9
+ ./spec/webvalve/fake_service_config_spec.rb[1:3:3] | passed | 0.00013 seconds |
10
+ ./spec/webvalve/fake_service_spec.rb[1:1] | passed | 0.01281 seconds |
11
+ ./spec/webvalve/fake_service_spec.rb[1:2:1] | passed | 0.02669 seconds |
12
+ ./spec/webvalve/fake_service_spec.rb[1:2:2] | passed | 0.03046 seconds |
13
+ ./spec/webvalve/manager_spec.rb[1:1] | passed | 0.0002 seconds |
14
+ ./spec/webvalve/manager_spec.rb[1:2:1] | passed | 0.00387 seconds |
15
+ ./spec/webvalve/manager_spec.rb[1:3:1] | passed | 0.00026 seconds |
16
+ ./spec/webvalve/manager_spec.rb[1:4:1] | passed | 0.00015 seconds |
17
+ ./spec/webvalve/manager_spec.rb[1:5:1:1] | passed | 0.00027 seconds |
18
+ ./spec/webvalve/manager_spec.rb[1:5:2:1] | passed | 0.00027 seconds |
19
+ ./spec/webvalve/manager_spec.rb[1:5:2:2] | passed | 0.00036 seconds |
20
+ ./spec/webvalve/manager_spec.rb[1:5:2:3] | passed | 0.00681 seconds |
21
+ ./spec/webvalve/manager_spec.rb[1:5:2:4] | passed | 0.00042 seconds |
22
+ ./spec/webvalve/manager_spec.rb[1:5:2:5] | passed | 0.01559 seconds |
23
+ ./spec/webvalve/manager_spec.rb[1:5:2:6] | passed | 0.00192 seconds |
24
+ ./spec/webvalve/manager_spec.rb[1:5:3:1:1] | passed | 0.00026 seconds |
25
+ ./spec/webvalve/manager_spec.rb[1:5:3:2:1] | passed | 0.00053 seconds |
26
+ ./spec/webvalve/manager_spec.rb[1:5:3:2:2] | passed | 0.00066 seconds |
27
+ ./spec/webvalve/manager_spec.rb[1:5:3:2:3] | passed | 0.0004 seconds |
28
+ ./spec/webvalve/manager_spec.rb[1:5:4:1] | passed | 0.00036 seconds |
29
+ ./spec/webvalve/manager_spec.rb[1:5:4:2] | passed | 0.0007 seconds |
30
+ ./spec/webvalve/manager_spec.rb[1:6:1:1] | passed | 0.0002 seconds |
31
+ ./spec/webvalve/manager_spec.rb[1:6:1:2] | passed | 0.00149 seconds |
32
+ ./spec/webvalve/manager_spec.rb[1:6:2:1] | passed | 0.00014 seconds |
33
+ ./spec/webvalve/manager_spec.rb[1:6:2:2] | passed | 0.00109 seconds |
34
+ ./spec/webvalve/manager_spec.rb[1:6:2:3] | passed | 0.00037 seconds |
35
+ ./spec/webvalve/manager_spec.rb[1:6:3:1] | passed | 0.00013 seconds |
36
+ ./spec/webvalve/manager_spec.rb[1:6:3:2] | passed | 0.00012 seconds |
37
+ ./spec/webvalve/manager_spec.rb[1:6:3:3] | passed | 0.0001 seconds |
38
+ ./spec/webvalve/manager_spec.rb[1:6:3:4] | passed | 0.00011 seconds |
39
+ ./spec/webvalve/manager_spec.rb[1:6:3:5] | passed | 0.00011 seconds |
40
+ ./spec/webvalve/manager_spec.rb[1:7:1:1] | passed | 0.00011 seconds |
41
+ ./spec/webvalve/manager_spec.rb[1:7:1:2] | passed | 0.00045 seconds |
42
+ ./spec/webvalve/manager_spec.rb[1:7:2:1] | passed | 0.00011 seconds |
43
+ ./spec/webvalve/manager_spec.rb[1:7:2:2] | passed | 0.00031 seconds |
44
+ ./spec/webvalve/manager_spec.rb[1:7:2:3] | passed | 0.0001 seconds |
45
+ ./spec/webvalve/manager_spec.rb[1:7:3:1] | passed | 0.00013 seconds |
46
+ ./spec/webvalve/manager_spec.rb[1:7:3:2] | passed | 0.00012 seconds |
47
+ ./spec/webvalve/manager_spec.rb[1:7:3:3] | passed | 0.00016 seconds |
48
+ ./spec/webvalve/manager_spec.rb[1:7:3:4] | passed | 0.00016 seconds |
49
+ ./spec/webvalve/manager_spec.rb[1:7:3:5] | passed | 0.00011 seconds |
50
+ ./spec/webvalve/manager_spec.rb[1:8:1:1] | passed | 0.00008 seconds |
51
+ ./spec/webvalve/manager_spec.rb[1:8:1:2] | passed | 0.00028 seconds |
52
+ ./spec/webvalve/manager_spec.rb[1:8:2:1] | passed | 0.0001 seconds |
53
+ ./spec/webvalve/manager_spec.rb[1:8:2:2] | passed | 0.00034 seconds |
54
+ ./spec/webvalve/manager_spec.rb[1:8:3:1] | passed | 0.0001 seconds |
55
+ ./spec/webvalve/manager_spec.rb[1:8:3:2] | passed | 0.00009 seconds |
56
+ ./spec/webvalve/manager_spec.rb[1:8:3:3] | passed | 0.00008 seconds |
57
+ ./spec/webvalve/manager_spec.rb[1:8:3:4] | passed | 0.00007 seconds |
58
+ ./spec/webvalve_spec.rb[1:1] | passed | 0.0001 seconds |
59
+ ./spec/webvalve_spec.rb[1:2] | passed | 0.00326 seconds |
60
+ ./spec/webvalve_spec.rb[1:3] | passed | 0.00021 seconds |
61
+ ./spec/webvalve_spec.rb[1:4] | passed | 0.00042 seconds |
@@ -19,114 +19,50 @@ RSpec.describe WebValve::FakeServiceConfig do
19
19
 
20
20
  subject { described_class.new service_class_name: fake_service.name }
21
21
 
22
- describe '.should_intercept?' do
23
- context 'in test env' do
24
- around do |ex|
25
- with_rails_env 'test' do
26
- ex.run
27
- end
28
- end
29
-
30
- it 'returns true when DUMMY_ENABLED is unset' do
31
- expect(subject.should_intercept?).to eq true
32
- end
33
-
34
- it 'returns true regardless of DUMMY_ENABLED value' do
35
- with_env 'DUMMY_ENABLED' => '1' do
36
- expect(subject.should_intercept?).to eq true
37
- end
38
-
39
- with_env 'DUMMY_ENABLED' => '0' do
40
- expect(subject.should_intercept?).to eq true
41
- end
42
- end
22
+ describe '.explicitly_enabled?' do
23
+ it 'returns false when DUMMY_ENABLED is unset' do
24
+ expect(subject.explicitly_enabled?).to eq false
43
25
  end
44
26
 
45
- context 'in development env' do
46
- around do |ex|
47
- with_rails_env 'development' do
48
- ex.run
49
- end
27
+ it 'returns true when DUMMY_ENABLED is truthy' do
28
+ with_env 'DUMMY_ENABLED' => '1' do
29
+ expect(subject.explicitly_enabled?).to eq true
50
30
  end
51
31
 
52
- it 'returns true when DUMMY_ENABLED is unset' do
53
- expect(subject.should_intercept?).to eq true
32
+ with_env 'DUMMY_ENABLED' => 't' do
33
+ expect(subject.explicitly_enabled?).to eq true
54
34
  end
55
35
 
56
- it 'returns false when DUMMY_ENABLED is truthy' do
57
- with_env 'DUMMY_ENABLED' => '1' do
58
- expect(subject.should_intercept?).to eq false
59
- end
60
-
61
- with_env 'DUMMY_ENABLED' => 't' do
62
- expect(subject.should_intercept?).to eq false
63
- end
64
-
65
- with_env 'DUMMY_ENABLED' => 'true' do
66
- expect(subject.should_intercept?).to eq false
67
- end
36
+ with_env 'DUMMY_ENABLED' => 'true' do
37
+ expect(subject.explicitly_enabled?).to eq true
68
38
  end
69
39
 
70
- it 'returns true when DUMMY_ENABLED is not truthy' do
71
- with_env 'DUMMY_ENABLED' => '0' do
72
- expect(subject.should_intercept?).to eq true
73
- end
74
-
75
- with_env 'DUMMY_ENABLED' => 'f' do
76
- expect(subject.should_intercept?).to eq true
77
- end
78
-
79
- with_env 'DUMMY_ENABLED' => 'false' do
80
- expect(subject.should_intercept?).to eq true
81
- end
82
-
83
- with_env 'DUMMY_ENABLED' => 'not true or false' do
84
- expect(subject.should_intercept?).to eq true
85
- end
40
+ with_env 'DUMMY_ENABLED' => 'not true or false' do
41
+ expect(subject.explicitly_enabled?).to eq false
86
42
  end
87
43
  end
44
+ end
88
45
 
89
- context 'in production enviroment' do
90
- around do |ex|
91
- with_rails_env 'production' do
92
- ex.run
93
- end
94
- end
46
+ describe '.explicitly_disabled?' do
47
+ it 'returns false when DUMMY_ENABLED is unset' do
48
+ expect(subject.explicitly_disabled?).to eq false
49
+ end
95
50
 
96
- it 'returns false' do
97
- expect(subject.should_intercept?).to eq false
51
+ it 'returns true when DUMMY_ENABLED is falsey' do
52
+ with_env 'DUMMY_ENABLED' => '0' do
53
+ expect(subject.explicitly_disabled?).to eq true
98
54
  end
99
55
 
100
- it 'returns false regardless of DUMMY_ENABLED value' do
101
- with_env 'DUMMY_ENABLED' => '1' do
102
- expect(subject.should_intercept?).to eq false
103
- end
56
+ with_env 'DUMMY_ENABLED' => 'f' do
57
+ expect(subject.explicitly_disabled?).to eq true
58
+ end
104
59
 
105
- with_env 'DUMMY_ENABLED' => '0' do
106
- expect(subject.should_intercept?).to eq false
107
- end
60
+ with_env 'DUMMY_ENABLED' => 'false' do
61
+ expect(subject.explicitly_disabled?).to eq true
108
62
  end
109
63
 
110
- context 'when WEBVALVE_ENABLED is true' do
111
- around do |ex|
112
- with_env 'WEBVALVE_ENABLED' => '1' do
113
- ex.run
114
- end
115
- end
116
-
117
- it 'returns true' do
118
- expect(subject.should_intercept?).to eq true
119
- end
120
-
121
- it 'respects DUMMY_ENABLED flag' do
122
- with_env 'DUMMY_ENABLED' => '1' do
123
- expect(subject.should_intercept?).to eq false
124
- end
125
-
126
- with_env 'DUMMY_ENABLED' => '0' do
127
- expect(subject.should_intercept?).to eq true
128
- end
129
- end
64
+ with_env 'DUMMY_ENABLED' => 'not true or false' do
65
+ expect(subject.explicitly_disabled?).to eq false
130
66
  end
131
67
  end
132
68
  end
@@ -32,44 +32,67 @@ RSpec.describe WebValve::Manager do
32
32
  it 'stores the url' do
33
33
  fake = class_double(WebValve::FakeService, name: "FooService")
34
34
 
35
- subject.register fake.name, url: 'http://manual.dev'
36
- expect(subject.fake_service_configs.first.service_url).to eq 'http://manual.dev'
35
+ subject.register fake.name, url: 'http://foo.dev'
36
+ expect(subject.fake_service_configs.first.service_url).to eq 'http://foo.dev'
37
37
  end
38
38
  end
39
39
 
40
40
  describe '#setup' do
41
- it 'enables webmock' do
42
- allow(WebMock).to receive(:enable!)
41
+ context 'when WebValve is disabled' do
42
+ around do |ex|
43
+ with_rails_env 'production' do
44
+ # unset
45
+ with_env 'WEBVALVE_ENABLED' => nil do
46
+ ex.run
47
+ end
48
+ end
49
+ end
43
50
 
44
- subject.setup
51
+ it 'does not setup webmock' do
52
+ allow(WebMock).to receive(:allow_net_connect!)
53
+ allow(WebMock).to receive(:enable!)
45
54
 
46
- expect(WebMock).to have_received(:enable!)
55
+ subject.setup
56
+
57
+ expect(WebMock).not_to have_received(:allow_net_connect!)
58
+ expect(WebMock).not_to have_received(:enable!)
59
+ end
47
60
  end
48
61
 
49
- it 'disables network connections' do
50
- allow(WebMock).to receive(:disable_net_connect!)
62
+ context 'when WebValve is on and intercepting traffic' do
63
+ around do |ex|
64
+ with_rails_env 'production' do
65
+ with_env 'WEBVALVE_ENABLED' => '1', 'WEBVALVE_SERVICE_ENABLED_DEFAULT' => '0' do
66
+ ex.run
67
+ end
68
+ end
69
+ end
51
70
 
52
- subject.setup
71
+ it 'enables webmock' do
72
+ allow(WebMock).to receive(:enable!)
53
73
 
54
- expect(WebMock).to have_received(:disable_net_connect!)
55
- end
74
+ subject.setup
56
75
 
57
- it 'allows localhost connections' do
58
- allow(WebMock).to receive(:disable_net_connect!)
76
+ expect(WebMock).to have_received(:enable!)
77
+ end
59
78
 
60
- subject.setup
79
+ it 'disables network connections' do
80
+ allow(WebMock).to receive(:disable_net_connect!)
61
81
 
62
- expect(WebMock).to have_received(:disable_net_connect!).with(hash_including(allow_localhost: true))
63
- end
82
+ subject.setup
64
83
 
65
- context 'in test environment' do
66
- around do |example|
67
- with_rails_env 'test' do
68
- example.run
69
- end
84
+ expect(WebMock).to have_received(:disable_net_connect!)
70
85
  end
71
86
 
72
- it 'does not allowlist configured urls in webmock' do
87
+ it 'allows localhost connections' do
88
+ allow(WebMock).to receive(:disable_net_connect!)
89
+
90
+ subject.setup
91
+
92
+ expect(WebMock).to have_received(:disable_net_connect!).with(hash_including(allow_localhost: true))
93
+ end
94
+
95
+ it 'allowlists configured urls in webmock' do
73
96
  allow(WebMock).to receive(:disable_net_connect!)
74
97
  results = [%r{\Ahttp://foo\.dev}, %r{\Ahttp://bar\.dev}]
75
98
 
@@ -78,19 +101,112 @@ RSpec.describe WebValve::Manager do
78
101
 
79
102
  subject.setup
80
103
 
81
- expect(WebMock).not_to have_received(:disable_net_connect!)
104
+ expect(WebMock).to have_received(:disable_net_connect!)
82
105
  .with(hash_including(allow: results))
83
106
  end
107
+
108
+ it 'mocks registered fakes that are not enabled in ENV' do
109
+ disabled_service = class_double(WebValve::FakeService, name: 'FakeSomething')
110
+ web_mock_stubble = double(to_rack: true)
111
+ allow(WebMock).to receive(:stub_request).and_return(web_mock_stubble)
112
+
113
+ with_env 'SOMETHING_API_URL' => 'http://something.dev' do
114
+ subject.register disabled_service.name
115
+ subject.setup
116
+ end
117
+
118
+ expect(WebMock).to have_received(:stub_request).with(:any, %r{\Ahttp://something\.dev})
119
+ expect(web_mock_stubble).to have_received(:to_rack)
120
+ end
121
+
122
+ it 'allowlists registered fakes that are enabled in ENV' do
123
+ enabled_service = class_double(WebValve::FakeService, name: 'FakeSomething')
124
+
125
+ with_env 'SOMETHING_ENABLED' => '1', 'SOMETHING_API_URL' => 'http://something.dev' do
126
+ subject.register enabled_service.name
127
+ subject.setup
128
+ end
129
+
130
+ expect(subject.allowlisted_urls).to include 'http://something.dev'
131
+ end
132
+ end
133
+
134
+ context 'when WebValve is on and allowing traffic' do
135
+ around do |ex|
136
+ with_rails_env 'production' do
137
+ with_env 'WEBVALVE_ENABLED' => '1', 'WEBVALVE_SERVICE_ENABLED_DEFAULT' => '1' do
138
+ ex.run
139
+ end
140
+ end
141
+ end
142
+
143
+ context 'when there are no services disabled' do
144
+ it 'does not setup webmock' do
145
+ allow(WebMock).to receive(:allow_net_connect!)
146
+ allow(WebMock).to receive(:enable!)
147
+
148
+ subject.setup
149
+
150
+ expect(WebMock).not_to have_received(:allow_net_connect!)
151
+ expect(WebMock).not_to have_received(:enable!)
152
+ end
153
+ end
154
+
155
+ context 'when there are explicitly disabled fake services to stub' do
156
+ it 'allows network connections and enables webmock' do
157
+ allow(WebMock).to receive(:allow_net_connect!)
158
+ allow(WebMock).to receive(:enable!)
159
+
160
+ enabled_service = class_double(WebValve::FakeService, name: 'FakeSomething')
161
+
162
+ with_env 'SOMETHING_ENABLED' => '0', 'SOMETHING_API_URL' => 'http://something.dev' do
163
+ subject.register enabled_service.name
164
+ subject.setup
165
+ end
166
+
167
+ expect(WebMock).to have_received(:allow_net_connect!)
168
+ expect(WebMock).to have_received(:enable!)
169
+ end
170
+
171
+ it 'mocks registered fakes that are explicitly disabled in ENV' do
172
+ disabled_service = class_double(WebValve::FakeService, name: 'FakeSomething')
173
+ other_service = class_double(WebValve::FakeService, name: 'FakeOther')
174
+
175
+ web_mock_stubble = double(to_rack: true)
176
+ allow(WebMock).to receive(:stub_request).and_return(web_mock_stubble)
177
+
178
+ with_env 'SOMETHING_API_URL' => 'http://something.dev', 'SOMETHING_ENABLED' => '0', 'OTHER_API_URL' => 'http://other.dev' do
179
+ subject.register disabled_service.name
180
+ subject.register other_service.name
181
+ subject.setup
182
+ end
183
+
184
+ expect(WebMock).to have_received(:stub_request).with(:any, %r{\Ahttp://something\.dev})
185
+ expect(WebMock).not_to have_received(:stub_request).with(:any, %r{\Ahttp://other\.dev})
186
+ expect(web_mock_stubble).to have_received(:to_rack).once
187
+ end
188
+
189
+ it 'does not allowlist registered fakes because the network is enabled' do
190
+ some_service = class_double(WebValve::FakeService, name: 'FakeSomething')
191
+
192
+ with_env 'SOMETHING_API_URL' => 'http://something.dev' do
193
+ subject.register some_service.name
194
+ subject.setup
195
+ end
196
+
197
+ expect(subject.allowlisted_urls).not_to include 'http://something.dev'
198
+ end
199
+ end
84
200
  end
85
201
 
86
- context 'in non-test environment' do
202
+ context 'in test environment' do
87
203
  around do |example|
88
- with_rails_env 'development' do
204
+ with_rails_env 'test' do
89
205
  example.run
90
206
  end
91
207
  end
92
208
 
93
- it 'allowlists configured urls in webmock' do
209
+ it 'does not allowlist configured urls in webmock' do
94
210
  allow(WebMock).to receive(:disable_net_connect!)
95
211
  results = [%r{\Ahttp://foo\.dev}, %r{\Ahttp://bar\.dev}]
96
212
 
@@ -99,33 +215,405 @@ RSpec.describe WebValve::Manager do
99
215
 
100
216
  subject.setup
101
217
 
102
- expect(WebMock).to have_received(:disable_net_connect!)
218
+ expect(WebMock).not_to have_received(:disable_net_connect!)
103
219
  .with(hash_including(allow: results))
104
220
  end
105
221
 
106
- it 'mocks registered fakes that are not enabled in ENV' do
107
- disabled_service = class_double(WebValve::FakeService, name: 'FakeSomething')
222
+ it 'fakes all services regardless of ENV settings' do
223
+ enabled_service = class_double(WebValve::FakeService, name: 'FakeSomething')
224
+ disabled_service = class_double(WebValve::FakeService, name: 'FakeSomethingElse')
225
+ other_service = class_double(WebValve::FakeService, name: 'FakeOther')
226
+
108
227
  web_mock_stubble = double(to_rack: true)
109
228
  allow(WebMock).to receive(:stub_request).and_return(web_mock_stubble)
110
229
 
111
- with_env 'SOMETHING_API_URL' => 'http://fake.dev' do
112
- subject.register disabled_service.name
230
+ with_env 'SOMETHING_ENABLED' => '1', 'SOMETHING_ELSE_ENABLED' => '0', 'OTHER_ENABLED' => nil do
231
+ subject.register disabled_service.name, url: 'http://something.dev'
232
+ subject.register enabled_service.name, url: 'http://something-else.dev'
233
+ subject.register other_service.name, url: 'http://other.dev'
113
234
  subject.setup
114
235
  end
115
236
 
116
- expect(WebMock).to have_received(:stub_request).with(:any, %r{\Ahttp://fake\.dev})
117
- expect(web_mock_stubble).to have_received(:to_rack)
237
+ expect(WebMock).to have_received(:stub_request).with(:any, %r{\Ahttp://something\.dev})
238
+ expect(WebMock).to have_received(:stub_request).with(:any, %r{\Ahttp://something\-else\.dev})
239
+ expect(WebMock).to have_received(:stub_request).with(:any, %r{\Ahttp://other\.dev})
240
+ expect(web_mock_stubble).to have_received(:to_rack).exactly(3).times
118
241
  end
242
+ end
243
+ end
119
244
 
120
- it 'allowlists registered fakes that are enabled in ENV' do
121
- enabled_service = class_double(WebValve::FakeService, name: 'FakeSomething')
245
+ describe '.intercepting?' do
246
+ context 'in test env' do
247
+ around do |ex|
248
+ with_rails_env 'test' do
249
+ ex.run
250
+ end
251
+ end
122
252
 
123
- with_env 'SOMETHING_ENABLED' => '1', 'SOMETHING_API_URL' => 'http://real.dev' do
124
- subject.register enabled_service.name
125
- subject.setup
253
+ it 'returns true when WEBVALVE_ENABLED is unset' do
254
+ expect(subject.intercepting?).to eq true
255
+ end
256
+
257
+ it 'returns true regardless of WEBVALVE_ENABLED value' do
258
+ allow(WebValve.logger).to receive(:warn)
259
+
260
+ with_env 'WEBVALVE_ENABLED' => '1' do
261
+ expect(subject.intercepting?).to eq true
262
+ expect(WebValve.logger).to have_received(:warn).at_least(1)
263
+ end
264
+
265
+ with_env 'WEBVALVE_ENABLED' => '0' do
266
+ expect(subject.intercepting?).to eq true
267
+ expect(WebValve.logger).to have_received(:warn).at_least(1)
268
+ end
269
+ end
270
+ end
271
+
272
+ context 'in development env' do
273
+ around do |ex|
274
+ with_rails_env 'development' do
275
+ ex.run
276
+ end
277
+ end
278
+
279
+ it 'returns true when WEBVALVE_ENABLED is unset' do
280
+ expect(subject.intercepting?).to eq true
281
+ end
282
+
283
+ it 'returns true regardless of WEBVALVE_ENABLED value' do
284
+ allow(WebValve.logger).to receive(:warn)
285
+
286
+ with_env 'WEBVALVE_ENABLED' => '1' do
287
+ expect(subject.intercepting?).to eq true
288
+ expect(WebValve.logger).to have_received(:warn).at_least(1)
289
+ end
290
+
291
+ with_env 'WEBVALVE_ENABLED' => '0' do
292
+ expect(subject.intercepting?).to eq true
293
+ expect(WebValve.logger).to have_received(:warn).at_least(1)
294
+ end
295
+ end
296
+
297
+ it 'returns true when WEBVALVE_ENABLED is unset' do
298
+ with_env 'WEBVALVE_ENABLED' => nil do
299
+ expect(subject.intercepting?).to eq true
300
+ end
301
+ end
302
+ end
303
+
304
+ context 'in production enviroment' do
305
+ around do |ex|
306
+ with_rails_env 'production' do
307
+ ex.run
308
+ end
309
+ end
310
+
311
+ it 'return false when WEBVALVE_ENABLED is unset' do
312
+ with_env 'WEBVALVE_ENABLED' => nil do
313
+ expect(subject.intercepting?).to eq false
314
+ end
315
+ end
316
+
317
+ it 'returns true when WEBVALVE_ENABLED is truthy and WEBVALVE_SERVICE_ENABLED_DEFAULT is set and falsey' do
318
+ with_env 'WEBVALVE_ENABLED' => '1', 'WEBVALVE_SERVICE_ENABLED_DEFAULT' => '0' do
319
+ expect(subject.intercepting?).to eq true
320
+ end
321
+
322
+ with_env 'WEBVALVE_ENABLED' => 't', 'WEBVALVE_SERVICE_ENABLED_DEFAULT' => 'f' do
323
+ expect(subject.intercepting?).to eq true
324
+ end
325
+
326
+ with_env 'WEBVALVE_ENABLED' => 'true', 'WEBVALVE_SERVICE_ENABLED_DEFAULT' => 'false' do
327
+ expect(subject.intercepting?).to eq true
328
+ end
329
+ end
330
+
331
+ it 'returns false when WEBVALVE_ENABLED is truthy and WEBVALVE_SERVICE_ENABLED_DEFAULT is set and truthy' do
332
+ with_env 'WEBVALVE_ENABLED' => '1', 'WEBVALVE_SERVICE_ENABLED_DEFAULT' => '1' do
333
+ expect(subject.intercepting?).to eq false
334
+ end
335
+
336
+ with_env 'WEBVALVE_ENABLED' => 't', 'WEBVALVE_SERVICE_ENABLED_DEFAULT' => 't' do
337
+ expect(subject.intercepting?).to eq false
338
+ end
339
+
340
+ with_env 'WEBVALVE_ENABLED' => 'true', 'WEBVALVE_SERVICE_ENABLED_DEFAULT' => 'true' do
341
+ expect(subject.intercepting?).to eq false
342
+ end
343
+ end
344
+
345
+ it 'returns false when WEBVALVE_ENABLED is truthy but WEBVALVE_SERVICE_ENABLED_DEFAULT is unset' do
346
+ with_env 'WEBVALVE_ENABLED' => '1' do
347
+ expect(subject.intercepting?).to eq false
348
+ end
349
+
350
+ with_env 'WEBVALVE_ENABLED' => 't' do
351
+ expect(subject.intercepting?).to eq false
352
+ end
353
+
354
+ with_env 'WEBVALVE_ENABLED' => 'true' do
355
+ expect(subject.intercepting?).to eq false
356
+ end
357
+ end
358
+
359
+ it 'returns false when WEBVALVE_ENABLED is not truthy' do
360
+ with_env 'WEBVALVE_ENABLED' => '0' do
361
+ expect(subject.intercepting?).to eq false
362
+ end
363
+
364
+ with_env 'WEBVALVE_ENABLED' => 'f' do
365
+ expect(subject.intercepting?).to eq false
366
+ end
367
+
368
+ with_env 'WEBVALVE_ENABLED' => 'false' do
369
+ expect(subject.intercepting?).to eq false
370
+ end
371
+
372
+ with_env 'WEBVALVE_ENABLED' => 'not true or false' do
373
+ expect(subject.intercepting?).to eq false
374
+ end
375
+ end
376
+ end
377
+ end
378
+
379
+ describe '.allowing?' do
380
+ context 'in test env' do
381
+ around do |ex|
382
+ with_rails_env 'test' do
383
+ ex.run
384
+ end
385
+ end
386
+
387
+ it 'returns false when WEBVALVE_ENABLED is unset' do
388
+ expect(subject.allowing?).to eq false
389
+ end
390
+
391
+ it 'returns false regardless of WEBVALVE_ENABLED value' do
392
+ allow(WebValve.logger).to receive(:warn)
393
+
394
+ with_env 'WEBVALVE_ENABLED' => '1' do
395
+ expect(subject.allowing?).to eq false
396
+ expect(WebValve.logger).to have_received(:warn).at_least(1)
397
+ end
398
+
399
+ with_env 'WEBVALVE_ENABLED' => '0' do
400
+ expect(subject.allowing?).to eq false
401
+ expect(WebValve.logger).to have_received(:warn).at_least(1)
402
+ end
403
+ end
404
+ end
405
+
406
+ context 'in development env' do
407
+ around do |ex|
408
+ with_rails_env 'development' do
409
+ ex.run
410
+ end
411
+ end
412
+
413
+ it 'returns false when WEBVALVE_ENABLED is unset' do
414
+ expect(subject.allowing?).to eq false
415
+ end
416
+
417
+ it 'returns false regardless of WEBVALVE_ENABLED value' do
418
+ allow(WebValve.logger).to receive(:warn)
419
+
420
+ with_env 'WEBVALVE_ENABLED' => '1' do
421
+ expect(subject.allowing?).to eq false
422
+ expect(WebValve.logger).to have_received(:warn).at_least(1)
423
+ end
424
+
425
+ with_env 'WEBVALVE_ENABLED' => '0' do
426
+ expect(subject.allowing?).to eq false
427
+ expect(WebValve.logger).to have_received(:warn).at_least(1)
428
+ end
429
+ end
430
+
431
+ it 'returns false when WEBVALVE_ENABLED is unset' do
432
+ with_env 'WEBVALVE_ENABLED' => nil do
433
+ expect(subject.allowing?).to eq false
434
+ end
435
+ end
436
+ end
437
+
438
+ context 'in production enviroment' do
439
+ around do |ex|
440
+ with_rails_env 'production' do
441
+ ex.run
442
+ end
443
+ end
444
+
445
+ it 'returns false when WEBVALVE_ENABLED is unset' do
446
+ with_env 'WEBVALVE_ENABLED' => nil do
447
+ expect(subject.allowing?).to eq false
448
+ end
449
+ end
450
+
451
+
452
+ it 'returns true when WEBVALVE_ENABLED is truthy and WEBVALVE_SERVICE_ENABLED_DEFAULT is unset' do
453
+ with_env 'WEBVALVE_ENABLED' => '1' do
454
+ expect(subject.allowing?).to eq true
455
+ end
456
+
457
+ with_env 'WEBVALVE_ENABLED' => 't' do
458
+ expect(subject.allowing?).to eq true
459
+ end
460
+
461
+ with_env 'WEBVALVE_ENABLED' => 'true' do
462
+ expect(subject.allowing?).to eq true
463
+ end
464
+ end
465
+
466
+ it 'returns true when WEBVALVE_ENABLED is truthy and WEBVALVE_SERVICE_ENABLED_DEFAULT is truthy' do
467
+ with_env 'WEBVALVE_ENABLED' => '1', 'WEBVALVE_SERVICE_ENABLED_DEFAULT' => '1' do
468
+ expect(subject.allowing?).to eq true
469
+ end
470
+
471
+ with_env 'WEBVALVE_ENABLED' => 't', 'WEBVALVE_SERVICE_ENABLED_DEFAULT' => 't' do
472
+ expect(subject.allowing?).to eq true
473
+ end
474
+
475
+ with_env 'WEBVALVE_ENABLED' => 'true', 'WEBVALVE_SERVICE_ENABLED_DEFAULT' => 'true' do
476
+ expect(subject.allowing?).to eq true
477
+ end
478
+ end
479
+
480
+ it 'returns false when WEBVALVE_ENABLED is truthy and WEBVALVE_SERVICE_ENABLED_DEFAULT is set and falsey' do
481
+ with_env 'WEBVALVE_ENABLED' => '1', 'WEBVALVE_SERVICE_ENABLED_DEFAULT' => '0' do
482
+ expect(subject.allowing?).to eq false
483
+ end
484
+
485
+ with_env 'WEBVALVE_ENABLED' => 't', 'WEBVALVE_SERVICE_ENABLED_DEFAULT' => 'f' do
486
+ expect(subject.allowing?).to eq false
487
+ end
488
+
489
+ with_env 'WEBVALVE_ENABLED' => 'true', 'WEBVALVE_SERVICE_ENABLED_DEFAULT' => 'false' do
490
+ expect(subject.allowing?).to eq false
491
+ end
492
+ end
493
+
494
+ it 'returns false when WEBVALVE_ENABLED is falsey' do
495
+ with_env 'WEBVALVE_ENABLED' => '0' do
496
+ expect(subject.allowing?).to eq false
497
+ end
498
+
499
+ with_env 'WEBVALVE_ENABLED' => 'f' do
500
+ expect(subject.allowing?).to eq false
501
+ end
502
+
503
+ with_env 'WEBVALVE_ENABLED' => 'false' do
504
+ expect(subject.allowing?).to eq false
126
505
  end
127
506
 
128
- expect(subject.allowlisted_urls).to include 'http://real.dev'
507
+ with_env 'WEBVALVE_ENABLED' => 'not true or false' do
508
+ expect(subject.allowing?).to eq false
509
+ end
510
+ end
511
+ end
512
+ end
513
+
514
+ describe '.enabled?' do
515
+ context 'in test env' do
516
+ around do |ex|
517
+ with_rails_env 'test' do
518
+ ex.run
519
+ end
520
+ end
521
+
522
+ it 'returns true when WEBVALVE_ENABLED is unset' do
523
+ with_env 'WEBVALVE_ENABLED' => nil do
524
+ expect(subject.enabled?).to eq true
525
+ end
526
+ end
527
+
528
+ it 'returns true regardless of WEBVALVE_ENABLED value' do
529
+ allow(WebValve.logger).to receive(:warn)
530
+
531
+ with_env 'WEBVALVE_ENABLED' => '1' do
532
+ expect(subject.enabled?).to eq true
533
+ expect(WebValve.logger).to have_received(:warn).at_least(1)
534
+ end
535
+
536
+ with_env 'WEBVALVE_ENABLED' => '0' do
537
+ expect(subject.enabled?).to eq true
538
+ expect(WebValve.logger).to have_received(:warn).at_least(1)
539
+ end
540
+ end
541
+ end
542
+
543
+ context 'in development env' do
544
+ around do |ex|
545
+ with_rails_env 'development' do
546
+ ex.run
547
+ end
548
+ end
549
+
550
+ it 'returns true when WEBVALVE_ENABLED is unset' do
551
+ with_env 'WEBVALVE_ENABLED' => nil do
552
+ expect(subject.enabled?).to eq true
553
+ end
554
+ end
555
+
556
+ it 'returns true regardless of WEBVALVE_ENABLED value' do
557
+ allow(WebValve.logger).to receive(:warn)
558
+
559
+ with_env 'WEBVALVE_ENABLED' => '1' do
560
+ expect(subject.enabled?).to eq true
561
+ expect(WebValve.logger).to have_received(:warn).at_least(1)
562
+ end
563
+
564
+ with_env 'WEBVALVE_ENABLED' => '0' do
565
+ expect(subject.enabled?).to eq true
566
+ expect(WebValve.logger).to have_received(:warn).at_least(1)
567
+ end
568
+ end
569
+ end
570
+
571
+ context 'in production enviroment' do
572
+ around do |ex|
573
+ with_rails_env 'production' do
574
+ ex.run
575
+ end
576
+ end
577
+
578
+ it 'returns false when WEBVALVE_ENABLED is unset' do
579
+ with_env 'WEBVALVE_ENABLED' => nil do
580
+ expect(subject.enabled?).to eq false
581
+ end
582
+ end
583
+
584
+
585
+ it 'returns false when WEBVALVE_ENABLED is falsey' do
586
+ with_env 'WEBVALVE_ENABLED' => '0' do
587
+ expect(subject.enabled?).to eq false
588
+ end
589
+
590
+ with_env 'WEBVALVE_ENABLED' => 'f' do
591
+ expect(subject.enabled?).to eq false
592
+ end
593
+
594
+ with_env 'WEBVALVE_ENABLED' => 'false' do
595
+ expect(subject.enabled?).to eq false
596
+ end
597
+ end
598
+
599
+ it 'returns true when WEBVALVE_ENABLED is truthy' do
600
+ with_env 'WEBVALVE_ENABLED' => '1' do
601
+ expect(subject.enabled?).to eq true
602
+ end
603
+
604
+ with_env 'WEBVALVE_ENABLED' => 't' do
605
+ expect(subject.enabled?).to eq true
606
+ end
607
+
608
+ with_env 'WEBVALVE_ENABLED' => 'true' do
609
+ expect(subject.enabled?).to eq true
610
+ end
611
+ end
612
+
613
+ it 'returns false when WEBVALVE_ENABLED is an invalid value' do
614
+ with_env 'WEBVALVE_ENABLED' => 'not true or false' do
615
+ expect(subject.enabled?).to eq false
616
+ end
129
617
  end
130
618
  end
131
619
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: webvalve
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.10.0
4
+ version: 0.11.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sam Moore
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-09-22 00:00:00.000000000 Z
11
+ date: 2019-11-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -162,6 +162,7 @@ files:
162
162
  - lib/webvalve/version.rb
163
163
  - spec/dummy/README.rdoc
164
164
  - spec/dummy/Rakefile
165
+ - spec/dummy/app/assets/config/manifest.js
165
166
  - spec/dummy/app/assets/javascripts/application.js
166
167
  - spec/dummy/app/assets/stylesheets/application.css
167
168
  - spec/dummy/app/controllers/application_controller.rb
@@ -229,6 +230,7 @@ test_files:
229
230
  - spec/spec_helper.rb
230
231
  - spec/dummy/app/controllers/application_controller.rb
231
232
  - spec/dummy/app/views/layouts/application.html.erb
233
+ - spec/dummy/app/assets/config/manifest.js
232
234
  - spec/dummy/app/assets/javascripts/application.js
233
235
  - spec/dummy/app/assets/stylesheets/application.css
234
236
  - spec/dummy/app/helpers/application_helper.rb