quonfig 0.0.6 → 0.0.8
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 +4 -4
- data/CHANGELOG.md +29 -0
- data/VERSION +1 -1
- data/lib/quonfig/client.rb +109 -2
- data/lib/quonfig/context.rb +10 -1
- data/lib/quonfig/datadir.rb +2 -4
- data/lib/quonfig/errors/decryption_error.rb +20 -0
- data/lib/quonfig/errors/env_var_parse_error.rb +8 -1
- data/lib/quonfig/errors/invalid_environment_error.rb +19 -0
- data/lib/quonfig/errors/missing_environment_error.rb +18 -0
- data/lib/quonfig/evaluator.rb +64 -2
- data/lib/quonfig/http_connection.rb +1 -1
- data/lib/quonfig/resolver.rb +187 -2
- data/lib/quonfig/stdlib_formatter.rb +95 -0
- data/lib/quonfig/telemetry/context_shape.rb +33 -0
- data/lib/quonfig/telemetry/context_shape_aggregator.rb +82 -0
- data/lib/quonfig/telemetry/evaluation_summaries_aggregator.rb +119 -0
- data/lib/quonfig/telemetry/example_contexts_aggregator.rb +101 -0
- data/lib/quonfig/telemetry/telemetry_reporter.rb +200 -0
- data/lib/quonfig.rb +8 -0
- data/quonfig.gemspec +20 -4
- data/test/integration/test_context_precedence.rb +35 -117
- data/test/integration/test_datadir_environment.rb +15 -37
- data/test/integration/test_enabled.rb +157 -463
- data/test/integration/test_enabled_with_contexts.rb +19 -49
- data/test/integration/test_get.rb +43 -131
- data/test/integration/test_get_feature_flag.rb +7 -13
- data/test/integration/test_get_or_raise.rb +19 -45
- data/test/integration/test_get_weighted_values.rb +9 -4
- data/test/integration/test_helpers.rb +499 -4
- data/test/integration/test_post.rb +15 -5
- data/test/integration/test_telemetry.rb +63 -21
- data/test/test_client_telemetry.rb +132 -0
- data/test/test_context.rb +4 -1
- data/test/test_context_shape.rb +37 -0
- data/test/test_context_shape_aggregator.rb +126 -0
- data/test/test_datadir.rb +6 -2
- data/test/test_evaluation_summaries_aggregator.rb +180 -0
- data/test/test_example_contexts_aggregator.rb +119 -0
- data/test/test_http_connection.rb +1 -1
- data/test/test_resolver.rb +149 -2
- data/test/test_should_log.rb +186 -0
- data/test/test_stdlib_formatter.rb +195 -0
- data/test/test_telemetry_reporter.rb +209 -0
- metadata +19 -3
- data/scripts/generate_integration_tests.rb +0 -362
data/quonfig.gemspec
CHANGED
|
@@ -2,16 +2,16 @@
|
|
|
2
2
|
# DO NOT EDIT THIS FILE DIRECTLY
|
|
3
3
|
# Instead, edit Juwelier::Tasks in Rakefile, and run 'rake gemspec'
|
|
4
4
|
# -*- encoding: utf-8 -*-
|
|
5
|
-
# stub: quonfig 0.0.
|
|
5
|
+
# stub: quonfig 0.0.8 ruby lib
|
|
6
6
|
|
|
7
7
|
Gem::Specification.new do |s|
|
|
8
8
|
s.name = "quonfig".freeze
|
|
9
|
-
s.version =
|
|
9
|
+
s.version = "0.0.8".freeze
|
|
10
10
|
|
|
11
11
|
s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
|
|
12
12
|
s.require_paths = ["lib".freeze]
|
|
13
13
|
s.authors = ["Jeff Dwyer".freeze]
|
|
14
|
-
s.date = "2026-04-
|
|
14
|
+
s.date = "2026-04-26"
|
|
15
15
|
s.description = "Quonfig \u2014 feature flags and live config, stored as files in git.".freeze
|
|
16
16
|
s.email = "jeff@quonfig.com".freeze
|
|
17
17
|
s.extra_rdoc_files = [
|
|
@@ -57,11 +57,14 @@ Gem::Specification.new do |s|
|
|
|
57
57
|
"lib/quonfig/duration.rb",
|
|
58
58
|
"lib/quonfig/encryption.rb",
|
|
59
59
|
"lib/quonfig/error.rb",
|
|
60
|
+
"lib/quonfig/errors/decryption_error.rb",
|
|
60
61
|
"lib/quonfig/errors/env_var_parse_error.rb",
|
|
61
62
|
"lib/quonfig/errors/initialization_timeout_error.rb",
|
|
63
|
+
"lib/quonfig/errors/invalid_environment_error.rb",
|
|
62
64
|
"lib/quonfig/errors/invalid_sdk_key_error.rb",
|
|
63
65
|
"lib/quonfig/errors/missing_default_error.rb",
|
|
64
66
|
"lib/quonfig/errors/missing_env_var_error.rb",
|
|
67
|
+
"lib/quonfig/errors/missing_environment_error.rb",
|
|
65
68
|
"lib/quonfig/errors/type_mismatch_error.rb",
|
|
66
69
|
"lib/quonfig/errors/uninitialized_error.rb",
|
|
67
70
|
"lib/quonfig/evaluation.rb",
|
|
@@ -80,11 +83,16 @@ Gem::Specification.new do |s|
|
|
|
80
83
|
"lib/quonfig/semantic_logger_filter.rb",
|
|
81
84
|
"lib/quonfig/semver.rb",
|
|
82
85
|
"lib/quonfig/sse_config_client.rb",
|
|
86
|
+
"lib/quonfig/stdlib_formatter.rb",
|
|
87
|
+
"lib/quonfig/telemetry/context_shape.rb",
|
|
88
|
+
"lib/quonfig/telemetry/context_shape_aggregator.rb",
|
|
89
|
+
"lib/quonfig/telemetry/evaluation_summaries_aggregator.rb",
|
|
90
|
+
"lib/quonfig/telemetry/example_contexts_aggregator.rb",
|
|
91
|
+
"lib/quonfig/telemetry/telemetry_reporter.rb",
|
|
83
92
|
"lib/quonfig/time_helpers.rb",
|
|
84
93
|
"lib/quonfig/types.rb",
|
|
85
94
|
"lib/quonfig/weighted_value_resolver.rb",
|
|
86
95
|
"quonfig.gemspec",
|
|
87
|
-
"scripts/generate_integration_tests.rb",
|
|
88
96
|
"test/fixtures/datafile.json",
|
|
89
97
|
"test/integration/test_context_precedence.rb",
|
|
90
98
|
"test/integration/test_datadir_environment.rb",
|
|
@@ -105,12 +113,17 @@ Gem::Specification.new do |s|
|
|
|
105
113
|
"test/test_caching_http_connection.rb",
|
|
106
114
|
"test/test_client.rb",
|
|
107
115
|
"test/test_client_network_mode.rb",
|
|
116
|
+
"test/test_client_telemetry.rb",
|
|
108
117
|
"test/test_config_loader.rb",
|
|
109
118
|
"test/test_context.rb",
|
|
119
|
+
"test/test_context_shape.rb",
|
|
120
|
+
"test/test_context_shape_aggregator.rb",
|
|
110
121
|
"test/test_datadir.rb",
|
|
111
122
|
"test/test_duration.rb",
|
|
112
123
|
"test/test_encryption.rb",
|
|
124
|
+
"test/test_evaluation_summaries_aggregator.rb",
|
|
113
125
|
"test/test_evaluator.rb",
|
|
126
|
+
"test/test_example_contexts_aggregator.rb",
|
|
114
127
|
"test/test_exponential_backoff.rb",
|
|
115
128
|
"test/test_fixed_size_hash.rb",
|
|
116
129
|
"test/test_helper.rb",
|
|
@@ -123,7 +136,10 @@ Gem::Specification.new do |s|
|
|
|
123
136
|
"test/test_resolver.rb",
|
|
124
137
|
"test/test_semantic_logger_filter.rb",
|
|
125
138
|
"test/test_semver.rb",
|
|
139
|
+
"test/test_should_log.rb",
|
|
126
140
|
"test/test_sse_config_client.rb",
|
|
141
|
+
"test/test_stdlib_formatter.rb",
|
|
142
|
+
"test/test_telemetry_reporter.rb",
|
|
127
143
|
"test/test_typed_getters.rb",
|
|
128
144
|
"test/test_types.rb",
|
|
129
145
|
"test/test_weighted_value_resolver.rb"
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
#
|
|
3
3
|
# AUTO-GENERATED from integration-test-data/tests/eval/context_precedence.yaml.
|
|
4
|
-
# Regenerate with
|
|
4
|
+
# Regenerate with:
|
|
5
|
+
# cd integration-test-data/generators && npm run generate -- --target=ruby
|
|
6
|
+
# Source: integration-test-data/generators/src/targets/ruby.ts
|
|
5
7
|
# Do NOT edit by hand — changes will be overwritten.
|
|
6
8
|
|
|
7
9
|
require 'test_helper'
|
|
@@ -14,181 +16,97 @@ class TestContextPrecedence < Minitest::Test
|
|
|
14
16
|
|
|
15
17
|
# returns the correct `flag` value using the global context (1)
|
|
16
18
|
def test_returns_the_correct_flag_value_using_the_global_context_1
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
IntegrationTestHelpers.assert_resolved(resolver, "mixed.case.property.name", {"user" => {"isHuman" => "verified"}}, true)
|
|
20
|
-
rescue Exception => e
|
|
21
|
-
skip("resolver not yet ported for this case: #{e.class}: #{e.message}")
|
|
22
|
-
end
|
|
19
|
+
resolver = IntegrationTestHelpers.build_resolver(@store)
|
|
20
|
+
IntegrationTestHelpers.assert_enabled(resolver, "mixed.case.property.name", {"user" => {"isHuman" => "verified"}}, true)
|
|
23
21
|
end
|
|
24
22
|
|
|
25
23
|
# returns the correct `flag` value using the global context (2)
|
|
26
24
|
def test_returns_the_correct_flag_value_using_the_global_context_2
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
IntegrationTestHelpers.assert_resolved(resolver, "mixed.case.property.name", {"user" => {"isHuman" => "?"}}, false)
|
|
30
|
-
rescue Exception => e
|
|
31
|
-
skip("resolver not yet ported for this case: #{e.class}: #{e.message}")
|
|
32
|
-
end
|
|
25
|
+
resolver = IntegrationTestHelpers.build_resolver(@store)
|
|
26
|
+
IntegrationTestHelpers.assert_enabled(resolver, "mixed.case.property.name", {"user" => {"isHuman" => "?"}}, false)
|
|
33
27
|
end
|
|
34
28
|
|
|
35
29
|
# returns the correct `flag` value when local context clobbers global context (1)
|
|
36
30
|
def test_returns_the_correct_flag_value_when_local_context_clobbers_global_context_1
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
IntegrationTestHelpers.assert_resolved(resolver, "mixed.case.property.name", {"user" => {"isHuman" => "verified"}}, true)
|
|
40
|
-
rescue Exception => e
|
|
41
|
-
skip("resolver not yet ported for this case: #{e.class}: #{e.message}")
|
|
42
|
-
end
|
|
31
|
+
resolver = IntegrationTestHelpers.build_resolver(@store)
|
|
32
|
+
IntegrationTestHelpers.assert_enabled(resolver, "mixed.case.property.name", {"user" => {"isHuman" => "verified"}}, true)
|
|
43
33
|
end
|
|
44
34
|
|
|
45
35
|
# returns the correct `flag` value when local context clobbers global context (2)
|
|
46
36
|
def test_returns_the_correct_flag_value_when_local_context_clobbers_global_context_2
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
IntegrationTestHelpers.assert_resolved(resolver, "mixed.case.property.name", {"user" => {"isHuman" => "?"}}, false)
|
|
50
|
-
rescue Exception => e
|
|
51
|
-
skip("resolver not yet ported for this case: #{e.class}: #{e.message}")
|
|
52
|
-
end
|
|
37
|
+
resolver = IntegrationTestHelpers.build_resolver(@store)
|
|
38
|
+
IntegrationTestHelpers.assert_enabled(resolver, "mixed.case.property.name", {"user" => {"isHuman" => "?"}}, false)
|
|
53
39
|
end
|
|
54
40
|
|
|
55
41
|
# returns the correct `flag` value when block context clobbers global context (1)
|
|
56
42
|
def test_returns_the_correct_flag_value_when_block_context_clobbers_global_context_1
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
IntegrationTestHelpers.assert_resolved(resolver, "mixed.case.property.name", {"user" => {"isHuman" => "?"}}, false)
|
|
60
|
-
rescue Exception => e
|
|
61
|
-
skip("resolver not yet ported for this case: #{e.class}: #{e.message}")
|
|
62
|
-
end
|
|
43
|
+
resolver = IntegrationTestHelpers.build_resolver(@store)
|
|
44
|
+
IntegrationTestHelpers.assert_enabled(resolver, "mixed.case.property.name", {"user" => {"isHuman" => "?"}}, false)
|
|
63
45
|
end
|
|
64
46
|
|
|
65
47
|
# returns the correct `flag` value when block context clobbers global context (2)
|
|
66
48
|
def test_returns_the_correct_flag_value_when_block_context_clobbers_global_context_2
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
IntegrationTestHelpers.assert_resolved(resolver, "mixed.case.property.name", {"user" => {"isHuman" => "verified"}}, true)
|
|
70
|
-
rescue Exception => e
|
|
71
|
-
skip("resolver not yet ported for this case: #{e.class}: #{e.message}")
|
|
72
|
-
end
|
|
49
|
+
resolver = IntegrationTestHelpers.build_resolver(@store)
|
|
50
|
+
IntegrationTestHelpers.assert_enabled(resolver, "mixed.case.property.name", {"user" => {"isHuman" => "verified"}}, true)
|
|
73
51
|
end
|
|
74
52
|
|
|
75
53
|
# returns the correct `flag` value when local context clobbers block context (1)
|
|
76
54
|
def test_returns_the_correct_flag_value_when_local_context_clobbers_block_context_1
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
IntegrationTestHelpers.assert_resolved(resolver, "mixed.case.property.name", {"user" => {"isHuman" => "?"}}, false)
|
|
80
|
-
rescue Exception => e
|
|
81
|
-
skip("resolver not yet ported for this case: #{e.class}: #{e.message}")
|
|
82
|
-
end
|
|
55
|
+
resolver = IntegrationTestHelpers.build_resolver(@store)
|
|
56
|
+
IntegrationTestHelpers.assert_enabled(resolver, "mixed.case.property.name", {"user" => {"isHuman" => "?"}}, false)
|
|
83
57
|
end
|
|
84
58
|
|
|
85
59
|
# returns the correct `flag` value when local context clobbers block context (2)
|
|
86
60
|
def test_returns_the_correct_flag_value_when_local_context_clobbers_block_context_2
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
IntegrationTestHelpers.assert_resolved(resolver, "mixed.case.property.name", {"user" => {"isHuman" => "verified"}}, true)
|
|
90
|
-
rescue Exception => e
|
|
91
|
-
skip("resolver not yet ported for this case: #{e.class}: #{e.message}")
|
|
92
|
-
end
|
|
61
|
+
resolver = IntegrationTestHelpers.build_resolver(@store)
|
|
62
|
+
IntegrationTestHelpers.assert_enabled(resolver, "mixed.case.property.name", {"user" => {"isHuman" => "verified"}}, true)
|
|
93
63
|
end
|
|
94
64
|
|
|
95
65
|
# returns the correct `get` value using the global context (1)
|
|
96
66
|
def test_returns_the_correct_get_value_using_the_global_context_1
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
IntegrationTestHelpers.assert_resolved(resolver, "basic.rule.config", {"user" => {"email" => "test@prefab.cloud"}}, "override")
|
|
100
|
-
rescue Exception => e
|
|
101
|
-
skip("resolver not yet ported for this case: #{e.class}: #{e.message}")
|
|
102
|
-
end
|
|
67
|
+
resolver = IntegrationTestHelpers.build_resolver(@store)
|
|
68
|
+
IntegrationTestHelpers.assert_resolved(resolver, "basic.rule.config", {"user" => {"email" => "test@prefab.cloud"}}, "override")
|
|
103
69
|
end
|
|
104
70
|
|
|
105
71
|
# returns the correct `get` value using the global context (2)
|
|
106
72
|
def test_returns_the_correct_get_value_using_the_global_context_2
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
IntegrationTestHelpers.assert_resolved(resolver, "basic.rule.config", {"user" => {"email" => "test@example.com"}}, "default")
|
|
110
|
-
rescue Exception => e
|
|
111
|
-
skip("resolver not yet ported for this case: #{e.class}: #{e.message}")
|
|
112
|
-
end
|
|
113
|
-
end
|
|
114
|
-
|
|
115
|
-
# returns the correct `get` value using the global context and api context (1)
|
|
116
|
-
def test_returns_the_correct_get_value_using_the_global_context_and_api_context_1
|
|
117
|
-
begin
|
|
118
|
-
resolver = IntegrationTestHelpers.build_resolver(@store)
|
|
119
|
-
IntegrationTestHelpers.assert_resolved(resolver, "basic.rule.config.with.api.conditional", {"user" => {"email" => "test@prefab.cloud"}}, "override")
|
|
120
|
-
rescue Exception => e
|
|
121
|
-
skip("resolver not yet ported for this case: #{e.class}: #{e.message}")
|
|
122
|
-
end
|
|
123
|
-
end
|
|
124
|
-
|
|
125
|
-
# returns the correct `get` value using the global context and api context (2)
|
|
126
|
-
def test_returns_the_correct_get_value_using_the_global_context_and_api_context_2
|
|
127
|
-
begin
|
|
128
|
-
resolver = IntegrationTestHelpers.build_resolver(@store)
|
|
129
|
-
IntegrationTestHelpers.assert_resolved(resolver, "basic.rule.config.with.api.conditional", {"user" => {"email" => "test@example.com"}}, "api-override")
|
|
130
|
-
rescue Exception => e
|
|
131
|
-
skip("resolver not yet ported for this case: #{e.class}: #{e.message}")
|
|
132
|
-
end
|
|
73
|
+
resolver = IntegrationTestHelpers.build_resolver(@store)
|
|
74
|
+
IntegrationTestHelpers.assert_resolved(resolver, "basic.rule.config", {"user" => {"email" => "test@example.com"}}, "default")
|
|
133
75
|
end
|
|
134
76
|
|
|
135
77
|
# returns the correct `get` value when local context clobbers global context (1)
|
|
136
78
|
def test_returns_the_correct_get_value_when_local_context_clobbers_global_context_1
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
IntegrationTestHelpers.assert_resolved(resolver, "basic.rule.config", {"user" => {"email" => "test@prefab.cloud"}}, "override")
|
|
140
|
-
rescue Exception => e
|
|
141
|
-
skip("resolver not yet ported for this case: #{e.class}: #{e.message}")
|
|
142
|
-
end
|
|
79
|
+
resolver = IntegrationTestHelpers.build_resolver(@store)
|
|
80
|
+
IntegrationTestHelpers.assert_resolved(resolver, "basic.rule.config", {"user" => {"email" => "test@prefab.cloud"}}, "override")
|
|
143
81
|
end
|
|
144
82
|
|
|
145
83
|
# returns the correct `get` value when local context clobbers global context (2)
|
|
146
84
|
def test_returns_the_correct_get_value_when_local_context_clobbers_global_context_2
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
IntegrationTestHelpers.assert_resolved(resolver, "basic.rule.config", {"user" => {"email" => "test@example.com"}}, "default")
|
|
150
|
-
rescue Exception => e
|
|
151
|
-
skip("resolver not yet ported for this case: #{e.class}: #{e.message}")
|
|
152
|
-
end
|
|
85
|
+
resolver = IntegrationTestHelpers.build_resolver(@store)
|
|
86
|
+
IntegrationTestHelpers.assert_resolved(resolver, "basic.rule.config", {"user" => {"email" => "test@example.com"}}, "default")
|
|
153
87
|
end
|
|
154
88
|
|
|
155
89
|
# returns the correct `get` value when block context clobbers global context (1)
|
|
156
90
|
def test_returns_the_correct_get_value_when_block_context_clobbers_global_context_1
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
IntegrationTestHelpers.assert_resolved(resolver, "basic.rule.config", {"user" => {"email" => "test@example.com"}}, "default")
|
|
160
|
-
rescue Exception => e
|
|
161
|
-
skip("resolver not yet ported for this case: #{e.class}: #{e.message}")
|
|
162
|
-
end
|
|
91
|
+
resolver = IntegrationTestHelpers.build_resolver(@store)
|
|
92
|
+
IntegrationTestHelpers.assert_resolved(resolver, "basic.rule.config", {"user" => {"email" => "test@example.com"}}, "default")
|
|
163
93
|
end
|
|
164
94
|
|
|
165
95
|
# returns the correct `get` value when block context clobbers global context (2)
|
|
166
96
|
def test_returns_the_correct_get_value_when_block_context_clobbers_global_context_2
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
IntegrationTestHelpers.assert_resolved(resolver, "basic.rule.config", {"user" => {"email" => "test@prefab.cloud"}}, "override")
|
|
170
|
-
rescue Exception => e
|
|
171
|
-
skip("resolver not yet ported for this case: #{e.class}: #{e.message}")
|
|
172
|
-
end
|
|
97
|
+
resolver = IntegrationTestHelpers.build_resolver(@store)
|
|
98
|
+
IntegrationTestHelpers.assert_resolved(resolver, "basic.rule.config", {"user" => {"email" => "test@prefab.cloud"}}, "override")
|
|
173
99
|
end
|
|
174
100
|
|
|
175
101
|
# returns the correct `get` value when local context clobbers block context (1)
|
|
176
102
|
def test_returns_the_correct_get_value_when_local_context_clobbers_block_context_1
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
IntegrationTestHelpers.assert_resolved(resolver, "basic.rule.config", {"user" => {"email" => "test@example.com"}}, "default")
|
|
180
|
-
rescue Exception => e
|
|
181
|
-
skip("resolver not yet ported for this case: #{e.class}: #{e.message}")
|
|
182
|
-
end
|
|
103
|
+
resolver = IntegrationTestHelpers.build_resolver(@store)
|
|
104
|
+
IntegrationTestHelpers.assert_resolved(resolver, "basic.rule.config", {"user" => {"email" => "test@example.com"}}, "default")
|
|
183
105
|
end
|
|
184
106
|
|
|
185
107
|
# returns the correct `get` value when local context clobbers block context (2)
|
|
186
108
|
def test_returns_the_correct_get_value_when_local_context_clobbers_block_context_2
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
IntegrationTestHelpers.assert_resolved(resolver, "basic.rule.config", {"user" => {"email" => "test@prefab.cloud"}}, "override")
|
|
190
|
-
rescue Exception => e
|
|
191
|
-
skip("resolver not yet ported for this case: #{e.class}: #{e.message}")
|
|
192
|
-
end
|
|
109
|
+
resolver = IntegrationTestHelpers.build_resolver(@store)
|
|
110
|
+
IntegrationTestHelpers.assert_resolved(resolver, "basic.rule.config", {"user" => {"email" => "test@prefab.cloud"}}, "override")
|
|
193
111
|
end
|
|
194
112
|
end
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
#
|
|
3
3
|
# AUTO-GENERATED from integration-test-data/tests/eval/datadir_environment.yaml.
|
|
4
|
-
# Regenerate with
|
|
4
|
+
# Regenerate with:
|
|
5
|
+
# cd integration-test-data/generators && npm run generate -- --target=ruby
|
|
6
|
+
# Source: integration-test-data/generators/src/targets/ruby.ts
|
|
5
7
|
# Do NOT edit by hand — changes will be overwritten.
|
|
6
8
|
|
|
7
9
|
require 'test_helper'
|
|
@@ -14,63 +16,39 @@ class TestDatadirEnvironment < Minitest::Test
|
|
|
14
16
|
|
|
15
17
|
# datadir with environment option gets environment-specific value
|
|
16
18
|
def test_datadir_with_environment_option_gets_environment_specific_value
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
assert_equal "test4", client.get("james.test.key")
|
|
20
|
-
rescue Exception => e
|
|
21
|
-
skip("datadir Client.new not yet wired: #{e.class}: #{e.message}")
|
|
22
|
-
end
|
|
19
|
+
client = Quonfig::Client.new(datadir: IntegrationTestHelpers.data_dir, environment: "Production")
|
|
20
|
+
assert_equal "test4", client.get("james.test.key")
|
|
23
21
|
end
|
|
24
22
|
|
|
25
23
|
# datadir with QUONFIG_ENVIRONMENT env var gets environment-specific value
|
|
26
24
|
def test_datadir_with_quonfig_environment_env_var_gets_environment_specific_value
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
assert_equal "test4", client.get("james.test.key")
|
|
31
|
-
end
|
|
32
|
-
rescue Exception => e
|
|
33
|
-
skip("datadir Client.new not yet wired: #{e.class}: #{e.message}")
|
|
25
|
+
IntegrationTestHelpers.with_env({"QUONFIG_ENVIRONMENT" => "Production"}) do
|
|
26
|
+
client = Quonfig::Client.new(datadir: IntegrationTestHelpers.data_dir)
|
|
27
|
+
assert_equal "test4", client.get("james.test.key")
|
|
34
28
|
end
|
|
35
29
|
end
|
|
36
30
|
|
|
37
31
|
# environment option supersedes QUONFIG_ENVIRONMENT env var
|
|
38
32
|
def test_environment_option_supersedes_quonfig_environment_env_var
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
assert_equal "test4", client.get("james.test.key")
|
|
43
|
-
end
|
|
44
|
-
rescue Exception => e
|
|
45
|
-
skip("datadir Client.new not yet wired: #{e.class}: #{e.message}")
|
|
33
|
+
IntegrationTestHelpers.with_env({"QUONFIG_ENVIRONMENT" => "nonexistent"}) do
|
|
34
|
+
client = Quonfig::Client.new(datadir: IntegrationTestHelpers.data_dir, environment: "Production")
|
|
35
|
+
assert_equal "test4", client.get("james.test.key")
|
|
46
36
|
end
|
|
47
37
|
end
|
|
48
38
|
|
|
49
39
|
# config without environment override returns default value
|
|
50
40
|
def test_config_without_environment_override_returns_default_value
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
assert_equal "hello from no env row", client.get("config.with.only.default.env.row")
|
|
54
|
-
rescue Exception => e
|
|
55
|
-
skip("datadir Client.new not yet wired: #{e.class}: #{e.message}")
|
|
56
|
-
end
|
|
41
|
+
client = Quonfig::Client.new(datadir: IntegrationTestHelpers.data_dir, environment: "Production")
|
|
42
|
+
assert_equal "hello from no env row", client.get("config.with.only.default.env.row")
|
|
57
43
|
end
|
|
58
44
|
|
|
59
45
|
# datadir without environment fails to init
|
|
60
46
|
def test_datadir_without_environment_fails_to_init
|
|
61
|
-
|
|
62
|
-
skip("init raise-case (missing_environment) — no Quonfig::Errors mapping yet")
|
|
63
|
-
rescue Exception => e
|
|
64
|
-
skip("datadir Client.new not yet wired: #{e.class}: #{e.message}")
|
|
65
|
-
end
|
|
47
|
+
assert_raises(Quonfig::Errors::MissingEnvironmentError) { Quonfig::Client.new(datadir: IntegrationTestHelpers.data_dir) }
|
|
66
48
|
end
|
|
67
49
|
|
|
68
50
|
# datadir with invalid environment fails to init
|
|
69
51
|
def test_datadir_with_invalid_environment_fails_to_init
|
|
70
|
-
|
|
71
|
-
skip("init raise-case (invalid_environment) — no Quonfig::Errors mapping yet")
|
|
72
|
-
rescue Exception => e
|
|
73
|
-
skip("datadir Client.new not yet wired: #{e.class}: #{e.message}")
|
|
74
|
-
end
|
|
52
|
+
assert_raises(Quonfig::Errors::InvalidEnvironmentError) { Quonfig::Client.new(datadir: IntegrationTestHelpers.data_dir, environment: "nonexistent") }
|
|
75
53
|
end
|
|
76
54
|
end
|