quonfig 0.0.9 → 0.0.11

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.
Files changed (84) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +43 -0
  3. data/README.md +4 -4
  4. data/lib/quonfig/evaluation_details.rb +60 -0
  5. data/lib/quonfig/options.rb +37 -16
  6. data/lib/quonfig/sse_config_client.rb +1 -1
  7. data/lib/quonfig/version.rb +5 -0
  8. data/lib/quonfig.rb +2 -1
  9. data/quonfig.gemspec +30 -163
  10. metadata +29 -182
  11. data/.claude/rules/constitution.md +0 -81
  12. data/.claude/rules/git-safety.md +0 -11
  13. data/.claude/rules/issue-tracking.md +0 -13
  14. data/.claude/rules/testing-workflow.md +0 -28
  15. data/.envrc.sample +0 -3
  16. data/.github/CODEOWNERS +0 -2
  17. data/.github/pull_request_template.md +0 -8
  18. data/.github/workflows/release.yml +0 -49
  19. data/.github/workflows/ruby.yml +0 -60
  20. data/.github/workflows/test.yaml +0 -40
  21. data/.rubocop.yml +0 -13
  22. data/.tool-versions +0 -1
  23. data/CLAUDE.md +0 -29
  24. data/CODEOWNERS +0 -1
  25. data/Gemfile +0 -26
  26. data/Gemfile.lock +0 -177
  27. data/Rakefile +0 -64
  28. data/VERSION +0 -1
  29. data/dev/allocation_stats +0 -60
  30. data/dev/benchmark +0 -40
  31. data/dev/console +0 -12
  32. data/dev/script_setup.rb +0 -18
  33. data/test/fixtures/datafile.json +0 -87
  34. data/test/integration/test_context_precedence.rb +0 -112
  35. data/test/integration/test_datadir_environment.rb +0 -54
  36. data/test/integration/test_dev_overrides.rb +0 -40
  37. data/test/integration/test_enabled.rb +0 -478
  38. data/test/integration/test_enabled_with_contexts.rb +0 -64
  39. data/test/integration/test_get.rb +0 -136
  40. data/test/integration/test_get_feature_flag.rb +0 -28
  41. data/test/integration/test_get_or_raise.rb +0 -60
  42. data/test/integration/test_get_weighted_values.rb +0 -34
  43. data/test/integration/test_helpers.rb +0 -667
  44. data/test/integration/test_helpers_test.rb +0 -73
  45. data/test/integration/test_post.rb +0 -44
  46. data/test/integration/test_telemetry.rb +0 -170
  47. data/test/support/common_helpers.rb +0 -106
  48. data/test/support/mock_base_client.rb +0 -27
  49. data/test/support/mock_config_loader.rb +0 -1
  50. data/test/test_bound_client.rb +0 -109
  51. data/test/test_caching_http_connection.rb +0 -218
  52. data/test/test_client.rb +0 -255
  53. data/test/test_client_network_mode.rb +0 -136
  54. data/test/test_client_telemetry.rb +0 -175
  55. data/test/test_config_loader.rb +0 -70
  56. data/test/test_context.rb +0 -139
  57. data/test/test_context_shape.rb +0 -37
  58. data/test/test_context_shape_aggregator.rb +0 -126
  59. data/test/test_datadir.rb +0 -203
  60. data/test/test_dev_context.rb +0 -163
  61. data/test/test_duration.rb +0 -37
  62. data/test/test_encryption.rb +0 -16
  63. data/test/test_evaluation_summaries_aggregator.rb +0 -180
  64. data/test/test_evaluator.rb +0 -285
  65. data/test/test_example_contexts_aggregator.rb +0 -119
  66. data/test/test_exponential_backoff.rb +0 -44
  67. data/test/test_fixed_size_hash.rb +0 -119
  68. data/test/test_helper.rb +0 -17
  69. data/test/test_http_connection.rb +0 -79
  70. data/test/test_internal_logger.rb +0 -34
  71. data/test/test_options.rb +0 -167
  72. data/test/test_rate_limit_cache.rb +0 -44
  73. data/test/test_reason.rb +0 -79
  74. data/test/test_rename.rb +0 -65
  75. data/test/test_resolver.rb +0 -291
  76. data/test/test_semantic_logger_filter.rb +0 -144
  77. data/test/test_semver.rb +0 -108
  78. data/test/test_should_log.rb +0 -186
  79. data/test/test_sse_config_client.rb +0 -297
  80. data/test/test_stdlib_formatter.rb +0 -195
  81. data/test/test_telemetry_reporter.rb +0 -209
  82. data/test/test_typed_getters.rb +0 -131
  83. data/test/test_types.rb +0 -141
  84. data/test/test_weighted_value_resolver.rb +0 -84
@@ -1,478 +0,0 @@
1
- # frozen_string_literal: true
2
- #
3
- # AUTO-GENERATED from integration-test-data/tests/eval/enabled.yaml.
4
- # Regenerate with:
5
- # cd integration-test-data/generators && npm run generate -- --target=ruby
6
- # Source: integration-test-data/generators/src/targets/ruby.ts
7
- # Do NOT edit by hand — changes will be overwritten.
8
-
9
- require 'test_helper'
10
- require 'integration/test_helpers'
11
-
12
- class TestEnabled < Minitest::Test
13
- def setup
14
- @store = IntegrationTestHelpers.build_store("enabled")
15
- end
16
-
17
- # returns the correct value for a simple flag
18
- def test_returns_the_correct_value_for_a_simple_flag
19
- resolver = IntegrationTestHelpers.build_resolver(@store)
20
- IntegrationTestHelpers.assert_enabled(resolver, "feature-flag.simple", {}, true)
21
- end
22
-
23
- # always returns false for a non-boolean flag
24
- def test_always_returns_false_for_a_non_boolean_flag
25
- resolver = IntegrationTestHelpers.build_resolver(@store)
26
- IntegrationTestHelpers.assert_enabled(resolver, "feature-flag.integer", {}, false)
27
- end
28
-
29
- # returns true for a PROP_IS_ONE_OF rule when any prop matches
30
- def test_returns_true_for_a_prop_is_one_of_rule_when_any_prop_matches
31
- resolver = IntegrationTestHelpers.build_resolver(@store)
32
- IntegrationTestHelpers.assert_enabled(resolver, "feature-flag.properties.positive", {"" => {"name" => "michael", "domain" => "something.com"}}, true)
33
- end
34
-
35
- # returns false for a PROP_IS_ONE_OF rule when no prop matches
36
- def test_returns_false_for_a_prop_is_one_of_rule_when_no_prop_matches
37
- resolver = IntegrationTestHelpers.build_resolver(@store)
38
- IntegrationTestHelpers.assert_enabled(resolver, "feature-flag.properties.positive", {"" => {"name" => "lauren", "domain" => "something.com"}}, false)
39
- end
40
-
41
- # returns true for a PROP_IS_NOT_ONE_OF rule when any prop doesn't match
42
- def test_returns_true_for_a_prop_is_not_one_of_rule_when_any_prop_doesn_t_match
43
- resolver = IntegrationTestHelpers.build_resolver(@store)
44
- IntegrationTestHelpers.assert_enabled(resolver, "feature-flag.properties.negative", {"" => {"name" => "lauren", "domain" => "prefab.cloud"}}, true)
45
- end
46
-
47
- # returns false for a PROP_IS_NOT_ONE_OF rule when all props match
48
- def test_returns_false_for_a_prop_is_not_one_of_rule_when_all_props_match
49
- resolver = IntegrationTestHelpers.build_resolver(@store)
50
- IntegrationTestHelpers.assert_enabled(resolver, "feature-flag.properties.negative", {"" => {"name" => "michael", "domain" => "prefab.cloud"}}, false)
51
- end
52
-
53
- # returns true for PROP_ENDS_WITH_ONE_OF rule when the given prop has a matching suffix
54
- def test_returns_true_for_prop_ends_with_one_of_rule_when_the_given_prop_has_a_matching_suffix
55
- resolver = IntegrationTestHelpers.build_resolver(@store)
56
- IntegrationTestHelpers.assert_enabled(resolver, "feature-flag.ends-with-one-of.positive", {"" => {"email" => "jeff@prefab.cloud"}}, true)
57
- end
58
-
59
- # returns false for PROP_ENDS_WITH_ONE_OF rule when the given prop doesn't have a matching suffix
60
- def test_returns_false_for_prop_ends_with_one_of_rule_when_the_given_prop_doesn_t_have_a_matching_suffix
61
- resolver = IntegrationTestHelpers.build_resolver(@store)
62
- IntegrationTestHelpers.assert_enabled(resolver, "feature-flag.ends-with-one-of.positive", {"" => {"email" => "jeff@test.com"}}, false)
63
- end
64
-
65
- # returns true for PROP_DOES_NOT_END_WITH_ONE_OF rule when the given prop doesn't have a matching suffix
66
- def test_returns_true_for_prop_does_not_end_with_one_of_rule_when_the_given_prop_doesn_t_have_a_matching_suffix
67
- resolver = IntegrationTestHelpers.build_resolver(@store)
68
- IntegrationTestHelpers.assert_enabled(resolver, "feature-flag.ends-with-one-of.negative", {"" => {"email" => "michael@test.com"}}, true)
69
- end
70
-
71
- # returns false for PROP_DOES_NOT_END_WITH_ONE_OF rule when the given prop has a matching suffix
72
- def test_returns_false_for_prop_does_not_end_with_one_of_rule_when_the_given_prop_has_a_matching_suffix
73
- resolver = IntegrationTestHelpers.build_resolver(@store)
74
- IntegrationTestHelpers.assert_enabled(resolver, "feature-flag.ends-with-one-of.negative", {"" => {"email" => "michael@prefab.cloud"}}, false)
75
- end
76
-
77
- # returns true for PROP_STARTS_WITH_ONE_OF rule when the given prop has a matching prefix
78
- def test_returns_true_for_prop_starts_with_one_of_rule_when_the_given_prop_has_a_matching_prefix
79
- resolver = IntegrationTestHelpers.build_resolver(@store)
80
- IntegrationTestHelpers.assert_enabled(resolver, "feature-flag.starts-with-one-of.positive", {"user" => {"email" => "foo@prefab.cloud"}}, true)
81
- end
82
-
83
- # returns false for PROP_STARTS_WITH_ONE_OF rule when the given prop doesn't have a matching prefix
84
- def test_returns_false_for_prop_starts_with_one_of_rule_when_the_given_prop_doesn_t_have_a_matching_prefix
85
- resolver = IntegrationTestHelpers.build_resolver(@store)
86
- IntegrationTestHelpers.assert_enabled(resolver, "feature-flag.starts-with-one-of.positive", {"user" => {"email" => "notfoo@prefab.cloud"}}, false)
87
- end
88
-
89
- # returns true for PROP_DOES_NOT_START_WITH_ONE_OF rule when the given prop doesn't have a matching prefix
90
- def test_returns_true_for_prop_does_not_start_with_one_of_rule_when_the_given_prop_doesn_t_have_a_matching_prefix
91
- resolver = IntegrationTestHelpers.build_resolver(@store)
92
- IntegrationTestHelpers.assert_enabled(resolver, "feature-flag.starts-with-one-of.negative", {"user" => {"email" => "notfoo@prefab.cloud"}}, true)
93
- end
94
-
95
- # returns false for PROP_DOES_NOT_START_WITH_ONE_OF rule when the given prop has a matching prefix
96
- def test_returns_false_for_prop_does_not_start_with_one_of_rule_when_the_given_prop_has_a_matching_prefix
97
- resolver = IntegrationTestHelpers.build_resolver(@store)
98
- IntegrationTestHelpers.assert_enabled(resolver, "feature-flag.starts-with-one-of.negative", {"user" => {"email" => "foo@prefab.cloud"}}, false)
99
- end
100
-
101
- # returns true for PROP_CONTAINS_ONE_OF rule when the given prop has a matching substring
102
- def test_returns_true_for_prop_contains_one_of_rule_when_the_given_prop_has_a_matching_substring
103
- resolver = IntegrationTestHelpers.build_resolver(@store)
104
- IntegrationTestHelpers.assert_enabled(resolver, "feature-flag.contains-one-of.positive", {"user" => {"email" => "somefoo@prefab.cloud"}}, true)
105
- end
106
-
107
- # returns false for PROP_CONTAINS_ONE_OF rule when the given prop doesn't have a matching substring
108
- def test_returns_false_for_prop_contains_one_of_rule_when_the_given_prop_doesn_t_have_a_matching_substring
109
- resolver = IntegrationTestHelpers.build_resolver(@store)
110
- IntegrationTestHelpers.assert_enabled(resolver, "feature-flag.contains-one-of.positive", {"user" => {"email" => "info@prefab.cloud"}}, false)
111
- end
112
-
113
- # returns true for PROP_DOES_NOT_CONTAIN_ONE_OF rule when the given prop doesn't have a matching substring
114
- def test_returns_true_for_prop_does_not_contain_one_of_rule_when_the_given_prop_doesn_t_have_a_matching_substring
115
- resolver = IntegrationTestHelpers.build_resolver(@store)
116
- IntegrationTestHelpers.assert_enabled(resolver, "feature-flag.contains-one-of.negative", {"user" => {"email" => "info@prefab.cloud"}}, true)
117
- end
118
-
119
- # returns false for PROP_DOES_NOT_CONTAIN_ONE_OF rule when the given prop has a matching substring
120
- def test_returns_false_for_prop_does_not_contain_one_of_rule_when_the_given_prop_has_a_matching_substring
121
- resolver = IntegrationTestHelpers.build_resolver(@store)
122
- IntegrationTestHelpers.assert_enabled(resolver, "feature-flag.contains-one-of.negative", {"user" => {"email" => "notfoo@prefab.cloud"}}, false)
123
- end
124
-
125
- # returns true for IN_SEG when the segment rule matches
126
- def test_returns_true_for_in_seg_when_the_segment_rule_matches
127
- resolver = IntegrationTestHelpers.build_resolver(@store)
128
- IntegrationTestHelpers.assert_enabled(resolver, "feature-flag.in-segment.positive", {"user" => {"key" => "lauren"}}, true)
129
- end
130
-
131
- # returns false for IN_SEG when the segment rule doesn't match
132
- def test_returns_false_for_in_seg_when_the_segment_rule_doesn_t_match
133
- resolver = IntegrationTestHelpers.build_resolver(@store)
134
- IntegrationTestHelpers.assert_enabled(resolver, "feature-flag.in-segment.positive", {"user" => {"key" => "josh"}}, false)
135
- end
136
-
137
- # returns false for IN_SEG if any segment rule fails to match
138
- def test_returns_false_for_in_seg_if_any_segment_rule_fails_to_match
139
- resolver = IntegrationTestHelpers.build_resolver(@store)
140
- IntegrationTestHelpers.assert_enabled(resolver, "feature-flag.in-seg.segment-and", {"user" => {"key" => "josh"}, "" => {"domain" => "prefab.cloud"}}, false)
141
- end
142
-
143
- # returns true for IN_SEG (segment-and) if all rules matches
144
- def test_returns_true_for_in_seg_segment_and_if_all_rules_matches
145
- resolver = IntegrationTestHelpers.build_resolver(@store)
146
- IntegrationTestHelpers.assert_enabled(resolver, "feature-flag.in-seg.segment-and", {"user" => {"key" => "michael"}, "" => {"domain" => "prefab.cloud"}}, true)
147
- end
148
-
149
- # returns true for IN_SEG (segment-or) if any segment rule matches (lookup)
150
- def test_returns_true_for_in_seg_segment_or_if_any_segment_rule_matches_lookup
151
- resolver = IntegrationTestHelpers.build_resolver(@store)
152
- IntegrationTestHelpers.assert_enabled(resolver, "feature-flag.in-seg.segment-or", {"user" => {"key" => "michael"}, "" => {"domain" => "example.com"}}, true)
153
- end
154
-
155
- # returns true for IN_SEG (segment-or) if any segment rule matches (prop)
156
- def test_returns_true_for_in_seg_segment_or_if_any_segment_rule_matches_prop
157
- resolver = IntegrationTestHelpers.build_resolver(@store)
158
- IntegrationTestHelpers.assert_enabled(resolver, "feature-flag.in-seg.segment-or", {"user" => {"key" => "nobody"}, "" => {"domain" => "gmail.com"}}, true)
159
- end
160
-
161
- # returns true for NOT_IN_SEG when the segment rule doesn't match
162
- def test_returns_true_for_not_in_seg_when_the_segment_rule_doesn_t_match
163
- resolver = IntegrationTestHelpers.build_resolver(@store)
164
- IntegrationTestHelpers.assert_enabled(resolver, "feature-flag.in-segment.negative", {"user" => {"key" => "josh"}}, true)
165
- end
166
-
167
- # returns false for NOT_IN_SEG when the segment rule matches
168
- def test_returns_false_for_not_in_seg_when_the_segment_rule_matches
169
- resolver = IntegrationTestHelpers.build_resolver(@store)
170
- IntegrationTestHelpers.assert_enabled(resolver, "feature-flag.in-segment.negative", {"user" => {"key" => "michael"}}, false)
171
- end
172
-
173
- # returns false for NOT_IN_SEG if any segment rule matches
174
- def test_returns_false_for_not_in_seg_if_any_segment_rule_matches
175
- resolver = IntegrationTestHelpers.build_resolver(@store)
176
- IntegrationTestHelpers.assert_enabled(resolver, "feature-flag.in-segment.multiple-criteria.negative", {"user" => {"key" => "josh"}, "" => {"domain" => "prefab.cloud"}}, true)
177
- end
178
-
179
- # returns true for NOT_IN_SEG if no segment rule matches
180
- def test_returns_true_for_not_in_seg_if_no_segment_rule_matches
181
- resolver = IntegrationTestHelpers.build_resolver(@store)
182
- IntegrationTestHelpers.assert_enabled(resolver, "feature-flag.in-segment.multiple-criteria.negative", {"user" => {"key" => "josh"}, "" => {"domain" => "something.com"}}, true)
183
- end
184
-
185
- # returns true for NOT_IN_SEG (segment-and) if not segment rule fails to match
186
- def test_returns_true_for_not_in_seg_segment_and_if_not_segment_rule_fails_to_match
187
- resolver = IntegrationTestHelpers.build_resolver(@store)
188
- IntegrationTestHelpers.assert_enabled(resolver, "feature-flag.not-in-seg.segment-and", {"user" => {"key" => "josh"}, "" => {"domain" => "prefab.cloud"}}, true)
189
- end
190
-
191
- # returns true for IN_SEG (segment-and) if not segment rule fails to match
192
- def test_returns_true_for_in_seg_segment_and_if_not_segment_rule_fails_to_match
193
- resolver = IntegrationTestHelpers.build_resolver(@store)
194
- IntegrationTestHelpers.assert_enabled(resolver, "feature-flag.in-seg.segment-and", {"user" => {"key" => "josh"}, "" => {"domain" => "prefab.cloud"}}, false)
195
- end
196
-
197
- # returns false for NOT_IN_SEG (segment-and) if segment rules matches
198
- def test_returns_false_for_not_in_seg_segment_and_if_segment_rules_matches
199
- resolver = IntegrationTestHelpers.build_resolver(@store)
200
- IntegrationTestHelpers.assert_enabled(resolver, "feature-flag.not-in-seg.segment-and", {"user" => {"key" => "michael"}, "" => {"domain" => "prefab.cloud"}}, false)
201
- end
202
-
203
- # returns true for NOT_IN_SEG (segment-or) if no segment rule matches
204
- def test_returns_true_for_not_in_seg_segment_or_if_no_segment_rule_matches
205
- resolver = IntegrationTestHelpers.build_resolver(@store)
206
- IntegrationTestHelpers.assert_enabled(resolver, "feature-flag.not-in-seg.segment-or", {"user" => {"key" => "nobody"}, "" => {"domain" => "example.com"}}, true)
207
- end
208
-
209
- # returns false for NOT_IN_SEG (segment-or) if one segment rule matches (prop)
210
- def test_returns_false_for_not_in_seg_segment_or_if_one_segment_rule_matches_prop
211
- resolver = IntegrationTestHelpers.build_resolver(@store)
212
- IntegrationTestHelpers.assert_enabled(resolver, "feature-flag.not-in-seg.segment-or", {"user" => {"key" => "nobody"}, "" => {"domain" => "gmail.com"}}, false)
213
- end
214
-
215
- # returns false for NOT_IN_SEG (segment-or) if one segment rule matches (lookup)
216
- def test_returns_false_for_not_in_seg_segment_or_if_one_segment_rule_matches_lookup
217
- resolver = IntegrationTestHelpers.build_resolver(@store)
218
- IntegrationTestHelpers.assert_enabled(resolver, "feature-flag.not-in-seg.segment-or", {"user" => {"key" => "michael"}, "" => {"domain" => "example.com"}}, false)
219
- end
220
-
221
- # returns true for PROP_BEFORE rule when the given prop represents a date (string) before the rule's time
222
- def test_returns_true_for_prop_before_rule_when_the_given_prop_represents_a_date_string_before_the_rule_s_time
223
- resolver = IntegrationTestHelpers.build_resolver(@store)
224
- IntegrationTestHelpers.assert_enabled(resolver, "feature-flag.before", {"user" => {"creation_date" => "2024-11-01T00:00:00Z"}}, true)
225
- end
226
-
227
- # returns true for PROP_BEFORE rule when the given prop represents a date (number) before the rule's time
228
- def test_returns_true_for_prop_before_rule_when_the_given_prop_represents_a_date_number_before_the_rule_s_time
229
- resolver = IntegrationTestHelpers.build_resolver(@store)
230
- IntegrationTestHelpers.assert_enabled(resolver, "feature-flag.before", {"user" => {"creation_date" => 1730419200000}}, true)
231
- end
232
-
233
- # returns false for PROP_BEFORE rule when the given prop represents a date (number) exactly matching rule's time
234
- def test_returns_false_for_prop_before_rule_when_the_given_prop_represents_a_date_number_exactly_matching_rule_s_time
235
- resolver = IntegrationTestHelpers.build_resolver(@store)
236
- IntegrationTestHelpers.assert_enabled(resolver, "feature-flag.before", {"user" => {"creation_date" => 1733011200000}}, false)
237
- end
238
-
239
- # returns false for PROP_BEFORE rule when the given prop represents a date (number) AFTER the rule's time
240
- def test_returns_false_for_prop_before_rule_when_the_given_prop_represents_a_date_number_after_the_rule_s_time
241
- resolver = IntegrationTestHelpers.build_resolver(@store)
242
- IntegrationTestHelpers.assert_enabled(resolver, "feature-flag.before", {"user" => {"creation_date" => "2025-01-01T00:00:00Z"}}, false)
243
- end
244
-
245
- # returns false for PROP_BEFORE rule when the given prop won't parse as a date
246
- def test_returns_false_for_prop_before_rule_when_the_given_prop_won_t_parse_as_a_date
247
- resolver = IntegrationTestHelpers.build_resolver(@store)
248
- IntegrationTestHelpers.assert_enabled(resolver, "feature-flag.before", {"user" => {"creation_date" => "not a date"}}, false)
249
- end
250
-
251
- # returns false for PROP_BEFORE rule using current-time relative to 2050-01-01
252
- def test_returns_false_for_prop_before_rule_using_current_time_relative_to_2050_01_01
253
- resolver = IntegrationTestHelpers.build_resolver(@store)
254
- IntegrationTestHelpers.assert_enabled(resolver, "feature-flag.before.current-time", {}, true)
255
- end
256
-
257
- # returns true for PROP_AFTER rule when the given prop represents a date (string) after the rule's time
258
- def test_returns_true_for_prop_after_rule_when_the_given_prop_represents_a_date_string_after_the_rule_s_time
259
- resolver = IntegrationTestHelpers.build_resolver(@store)
260
- IntegrationTestHelpers.assert_enabled(resolver, "feature-flag.after", {"user" => {"creation_date" => "2025-01-01T00:00:00Z"}}, true)
261
- end
262
-
263
- # returns true for PROP_AFTER rule when the given prop represents a date (number) after the rule's time
264
- def test_returns_true_for_prop_after_rule_when_the_given_prop_represents_a_date_number_after_the_rule_s_time
265
- resolver = IntegrationTestHelpers.build_resolver(@store)
266
- IntegrationTestHelpers.assert_enabled(resolver, "feature-flag.after", {"user" => {"creation_date" => 1735689600000}}, true)
267
- end
268
-
269
- # returns false for PROP_AFTER rule when the given prop represents a date (number) exactly matching rule's time
270
- def test_returns_false_for_prop_after_rule_when_the_given_prop_represents_a_date_number_exactly_matching_rule_s_time
271
- resolver = IntegrationTestHelpers.build_resolver(@store)
272
- IntegrationTestHelpers.assert_enabled(resolver, "feature-flag.after", {"user" => {"creation_date" => 1733011200000}}, false)
273
- end
274
-
275
- # returns false for PROP_BEFORE rule when the given prop represents a date (number) BEFORE the rule's time
276
- def test_returns_false_for_prop_before_rule_when_the_given_prop_represents_a_date_number_before_the_rule_s_time
277
- resolver = IntegrationTestHelpers.build_resolver(@store)
278
- IntegrationTestHelpers.assert_enabled(resolver, "feature-flag.after", {"user" => {"creation_date" => "2024-01-01T00:00:00Z"}}, false)
279
- end
280
-
281
- # returns false for PROP_AFTER rule when the given prop won't parse as a date
282
- def test_returns_false_for_prop_after_rule_when_the_given_prop_won_t_parse_as_a_date
283
- resolver = IntegrationTestHelpers.build_resolver(@store)
284
- IntegrationTestHelpers.assert_enabled(resolver, "feature-flag.after", {"user" => {"creation_date" => "not a date"}}, false)
285
- end
286
-
287
- # returns false for PROP_AFTER rule using current-time relative to 2025-01-01
288
- def test_returns_false_for_prop_after_rule_using_current_time_relative_to_2025_01_01
289
- resolver = IntegrationTestHelpers.build_resolver(@store)
290
- IntegrationTestHelpers.assert_enabled(resolver, "feature-flag.after.current-time", {}, true)
291
- end
292
-
293
- # returns true for PROP_LESS_THAN rule when the given prop is less than the rule's value
294
- def test_returns_true_for_prop_less_than_rule_when_the_given_prop_is_less_than_the_rule_s_value
295
- resolver = IntegrationTestHelpers.build_resolver(@store)
296
- IntegrationTestHelpers.assert_enabled(resolver, "feature-flag.less-than", {"user" => {"age" => 20}}, true)
297
- end
298
-
299
- # returns true for PROP_LESS_THAN rule when the given prop is less than the rule's value (float)
300
- def test_returns_true_for_prop_less_than_rule_when_the_given_prop_is_less_than_the_rule_s_value_float
301
- resolver = IntegrationTestHelpers.build_resolver(@store)
302
- IntegrationTestHelpers.assert_enabled(resolver, "feature-flag.less-than", {"user" => {"age" => 20.5}}, true)
303
- end
304
-
305
- # returns false for PROP_LESS_THAN rule when the given prop is equal to rule's value
306
- def test_returns_false_for_prop_less_than_rule_when_the_given_prop_is_equal_to_rule_s_value
307
- resolver = IntegrationTestHelpers.build_resolver(@store)
308
- IntegrationTestHelpers.assert_enabled(resolver, "feature-flag.less-than", {"user" => {"age" => 30}}, false)
309
- end
310
-
311
- # returns false for PROP_LESS_THAN rule when the given prop a string
312
- def test_returns_false_for_prop_less_than_rule_when_the_given_prop_a_string
313
- resolver = IntegrationTestHelpers.build_resolver(@store)
314
- IntegrationTestHelpers.assert_enabled(resolver, "feature-flag.less-than", {"user" => {"age" => "20"}}, false)
315
- end
316
-
317
- # returns true for PROP_LESS_THAN_OR_EQUAL rule when the given prop is less than the rule's value
318
- def test_returns_true_for_prop_less_than_or_equal_rule_when_the_given_prop_is_less_than_the_rule_s_value
319
- resolver = IntegrationTestHelpers.build_resolver(@store)
320
- IntegrationTestHelpers.assert_enabled(resolver, "feature-flag.less-than-or-equal", {"user" => {"age" => 20}}, true)
321
- end
322
-
323
- # returns true for PROP_LESS_THAN_OR_EQUAL rule when the given prop is less than the rule's value (float)
324
- def test_returns_true_for_prop_less_than_or_equal_rule_when_the_given_prop_is_less_than_the_rule_s_value_float
325
- resolver = IntegrationTestHelpers.build_resolver(@store)
326
- IntegrationTestHelpers.assert_enabled(resolver, "feature-flag.less-than-or-equal", {"user" => {"age" => 20.5}}, true)
327
- end
328
-
329
- # returns false for PROP_LESS_THAN_OR_EQUAL rule when the given prop is equal to rule's value
330
- def test_returns_false_for_prop_less_than_or_equal_rule_when_the_given_prop_is_equal_to_rule_s_value
331
- resolver = IntegrationTestHelpers.build_resolver(@store)
332
- IntegrationTestHelpers.assert_enabled(resolver, "feature-flag.less-than-or-equal", {"user" => {"age" => 30}}, true)
333
- end
334
-
335
- # returns false for PROP_LESS_THAN_OR_EQUAL rule when the given prop a string
336
- def test_returns_false_for_prop_less_than_or_equal_rule_when_the_given_prop_a_string
337
- resolver = IntegrationTestHelpers.build_resolver(@store)
338
- IntegrationTestHelpers.assert_enabled(resolver, "feature-flag.less-than-or-equal", {"user" => {"age" => "20"}}, false)
339
- end
340
-
341
- # returns true for PROP_GREATER_THAN rule when the given prop is greater than the rule's value
342
- def test_returns_true_for_prop_greater_than_rule_when_the_given_prop_is_greater_than_the_rule_s_value
343
- resolver = IntegrationTestHelpers.build_resolver(@store)
344
- IntegrationTestHelpers.assert_enabled(resolver, "feature-flag.greater-than", {"user" => {"age" => 100}}, true)
345
- end
346
-
347
- # returns true for PROP_GREATER_THAN rule when the given prop is greater than the rule's value (float)
348
- def test_returns_true_for_prop_greater_than_rule_when_the_given_prop_is_greater_than_the_rule_s_value_float
349
- resolver = IntegrationTestHelpers.build_resolver(@store)
350
- IntegrationTestHelpers.assert_enabled(resolver, "feature-flag.greater-than", {"user" => {"age" => 30.5}}, true)
351
- end
352
-
353
- # returns true for PROP_GREATER_THAN rule when the given prop is greater than the rule's float value (float)
354
- def test_returns_true_for_prop_greater_than_rule_when_the_given_prop_is_greater_than_the_rule_s_float_value_float
355
- resolver = IntegrationTestHelpers.build_resolver(@store)
356
- IntegrationTestHelpers.assert_enabled(resolver, "feature-flag.greater-than.double", {"user" => {"age" => 32.7}}, true)
357
- end
358
-
359
- # returns true for PROP_GREATER_THAN rule when the given prop is greater than the rule's float value (integer)
360
- def test_returns_true_for_prop_greater_than_rule_when_the_given_prop_is_greater_than_the_rule_s_float_value_integer
361
- resolver = IntegrationTestHelpers.build_resolver(@store)
362
- IntegrationTestHelpers.assert_enabled(resolver, "feature-flag.greater-than.double", {"user" => {"age" => 32}}, true)
363
- end
364
-
365
- # returns false for PROP_GREATER_THAN rule when the given prop is equal to rule's value
366
- def test_returns_false_for_prop_greater_than_rule_when_the_given_prop_is_equal_to_rule_s_value
367
- resolver = IntegrationTestHelpers.build_resolver(@store)
368
- IntegrationTestHelpers.assert_enabled(resolver, "feature-flag.greater-than", {"user" => {"age" => 30}}, false)
369
- end
370
-
371
- # returns false for PROP_GREATER_THAN rule when the given prop a string
372
- def test_returns_false_for_prop_greater_than_rule_when_the_given_prop_a_string
373
- resolver = IntegrationTestHelpers.build_resolver(@store)
374
- IntegrationTestHelpers.assert_enabled(resolver, "feature-flag.greater-than", {"user" => {"age" => "100"}}, false)
375
- end
376
-
377
- # returns true for PROP_GREATER_THAN_OR_EQUAL rule when the given prop is greater than the rule's value
378
- def test_returns_true_for_prop_greater_than_or_equal_rule_when_the_given_prop_is_greater_than_the_rule_s_value
379
- resolver = IntegrationTestHelpers.build_resolver(@store)
380
- IntegrationTestHelpers.assert_enabled(resolver, "feature-flag.greater-than-or-equal", {"user" => {"age" => 30}}, true)
381
- end
382
-
383
- # returns true for PROP_GREATER_THAN_OR_EQUAL rule when the given prop is greater than the rule's value (float)
384
- def test_returns_true_for_prop_greater_than_or_equal_rule_when_the_given_prop_is_greater_than_the_rule_s_value_float
385
- resolver = IntegrationTestHelpers.build_resolver(@store)
386
- IntegrationTestHelpers.assert_enabled(resolver, "feature-flag.greater-than-or-equal", {"user" => {"age" => 30.5}}, true)
387
- end
388
-
389
- # returns true for PROP_GREATER_THAN_OR_EQUAL rule when the given prop is equal to rule's value
390
- def test_returns_true_for_prop_greater_than_or_equal_rule_when_the_given_prop_is_equal_to_rule_s_value
391
- resolver = IntegrationTestHelpers.build_resolver(@store)
392
- IntegrationTestHelpers.assert_enabled(resolver, "feature-flag.greater-than-or-equal", {"user" => {"age" => 30}}, true)
393
- end
394
-
395
- # returns false for PROP_GREATER_THAN_OR_EQUAL rule when the given prop a string
396
- def test_returns_false_for_prop_greater_than_or_equal_rule_when_the_given_prop_a_string
397
- resolver = IntegrationTestHelpers.build_resolver(@store)
398
- IntegrationTestHelpers.assert_enabled(resolver, "feature-flag.greater-than-or-equal", {"user" => {"age" => "100"}}, false)
399
- end
400
-
401
- # returns true for PROP_MATCHES rule when the given prop matches the regex
402
- def test_returns_true_for_prop_matches_rule_when_the_given_prop_matches_the_regex
403
- resolver = IntegrationTestHelpers.build_resolver(@store)
404
- IntegrationTestHelpers.assert_enabled(resolver, "feature-flag.matches", {"user" => {"code" => "aaaaaab"}}, true)
405
- end
406
-
407
- # returns false for PROP_MATCHES rule when the given prop does not match the regex
408
- def test_returns_false_for_prop_matches_rule_when_the_given_prop_does_not_match_the_regex
409
- resolver = IntegrationTestHelpers.build_resolver(@store)
410
- IntegrationTestHelpers.assert_enabled(resolver, "feature-flag.matches", {"user" => {"code" => "aa"}}, false)
411
- end
412
-
413
- # returns true for PROP_DOES_NOT_MATCH rule when the given prop does not match the regex
414
- def test_returns_true_for_prop_does_not_match_rule_when_the_given_prop_does_not_match_the_regex
415
- resolver = IntegrationTestHelpers.build_resolver(@store)
416
- IntegrationTestHelpers.assert_enabled(resolver, "feature-flag.does-not-match", {"user" => {"code" => "b"}}, true)
417
- end
418
-
419
- # returns false for PROP_DOES_NOT_MATCH rule when the given prop matches the regex
420
- def test_returns_false_for_prop_does_not_match_rule_when_the_given_prop_matches_the_regex
421
- resolver = IntegrationTestHelpers.build_resolver(@store)
422
- IntegrationTestHelpers.assert_enabled(resolver, "feature-flag.does-not-match", {"user" => {"code" => "aabb"}}, false)
423
- end
424
-
425
- # returns true for PROP_SEMVER_EQUAL rule when the given prop equals the version
426
- def test_returns_true_for_prop_semver_equal_rule_when_the_given_prop_equals_the_version
427
- resolver = IntegrationTestHelpers.build_resolver(@store)
428
- IntegrationTestHelpers.assert_enabled(resolver, "feature-flag.semver-equal", {"app" => {"version" => "2.0.0"}}, true)
429
- end
430
-
431
- # returns false for PROP_SEMVER_EQUAL rule when the given prop does not equal the version
432
- def test_returns_false_for_prop_semver_equal_rule_when_the_given_prop_does_not_equal_the_version
433
- resolver = IntegrationTestHelpers.build_resolver(@store)
434
- IntegrationTestHelpers.assert_enabled(resolver, "feature-flag.semver-equal", {"app" => {"version" => "2.0.1"}}, false)
435
- end
436
-
437
- # returns false for PROP_SEMVER_EQUAL rule when the given prop is not a valid semver
438
- def test_returns_false_for_prop_semver_equal_rule_when_the_given_prop_is_not_a_valid_semver
439
- resolver = IntegrationTestHelpers.build_resolver(@store)
440
- IntegrationTestHelpers.assert_enabled(resolver, "feature-flag.semver-equal", {"app" => {"version" => "2.0"}}, false)
441
- end
442
-
443
- # returns true for PROP_SEMVER_LESS_THAN rule when the given prop is less than 2.0.0
444
- def test_returns_true_for_prop_semver_less_than_rule_when_the_given_prop_is_less_than_2_0_0
445
- resolver = IntegrationTestHelpers.build_resolver(@store)
446
- IntegrationTestHelpers.assert_enabled(resolver, "feature-flag.semver-less-than", {"app" => {"version" => "1.5.1"}}, true)
447
- end
448
-
449
- # returns false for PROP_SEMVER_LESS_THAN rule when the given prop equals the version
450
- def test_returns_false_for_prop_semver_less_than_rule_when_the_given_prop_equals_the_version
451
- resolver = IntegrationTestHelpers.build_resolver(@store)
452
- IntegrationTestHelpers.assert_enabled(resolver, "feature-flag.semver-less-than", {"app" => {"version" => "2.0.0"}}, false)
453
- end
454
-
455
- # returns false for PROP_SEMVER_LESS_THAN rule when the given prop is greater than the version
456
- def test_returns_false_for_prop_semver_less_than_rule_when_the_given_prop_is_greater_than_the_version
457
- resolver = IntegrationTestHelpers.build_resolver(@store)
458
- IntegrationTestHelpers.assert_enabled(resolver, "feature-flag.semver-less-than", {"app" => {"version" => "2.2.1"}}, false)
459
- end
460
-
461
- # returns true for PROP_SEMVER_GREATER_THAN rule when the given prop is greater than 2.0.0
462
- def test_returns_true_for_prop_semver_greater_than_rule_when_the_given_prop_is_greater_than_2_0_0
463
- resolver = IntegrationTestHelpers.build_resolver(@store)
464
- IntegrationTestHelpers.assert_enabled(resolver, "feature-flag.semver-greater-than", {"app" => {"version" => "2.5.1"}}, true)
465
- end
466
-
467
- # returns false for PROP_SEMVER_GREATER_THAN rule when the given prop equals the version
468
- def test_returns_false_for_prop_semver_greater_than_rule_when_the_given_prop_equals_the_version
469
- resolver = IntegrationTestHelpers.build_resolver(@store)
470
- IntegrationTestHelpers.assert_enabled(resolver, "feature-flag.semver-greater-than", {"app" => {"version" => "2.0.0"}}, false)
471
- end
472
-
473
- # returns false for PROP_SEMVER_EQUAL rule when the given prop is less than the version
474
- def test_returns_false_for_prop_semver_equal_rule_when_the_given_prop_is_less_than_the_version
475
- resolver = IntegrationTestHelpers.build_resolver(@store)
476
- IntegrationTestHelpers.assert_enabled(resolver, "feature-flag.semver-greater-than", {"app" => {"version" => "0.0.5"}}, false)
477
- end
478
- end
@@ -1,64 +0,0 @@
1
- # frozen_string_literal: true
2
- #
3
- # AUTO-GENERATED from integration-test-data/tests/eval/enabled_with_contexts.yaml.
4
- # Regenerate with:
5
- # cd integration-test-data/generators && npm run generate -- --target=ruby
6
- # Source: integration-test-data/generators/src/targets/ruby.ts
7
- # Do NOT edit by hand — changes will be overwritten.
8
-
9
- require 'test_helper'
10
- require 'integration/test_helpers'
11
-
12
- class TestEnabledWithContexts < Minitest::Test
13
- def setup
14
- @store = IntegrationTestHelpers.build_store("enabled_with_contexts")
15
- end
16
-
17
- # returns true from global context
18
- def test_returns_true_from_global_context
19
- resolver = IntegrationTestHelpers.build_resolver(@store)
20
- IntegrationTestHelpers.assert_enabled(resolver, "feature-flag.in-seg.segment-and", {"" => {"domain" => "prefab.cloud"}, "user" => {"key" => "michael"}}, true)
21
- end
22
-
23
- # returns false due to local context override
24
- def test_returns_false_due_to_local_context_override
25
- resolver = IntegrationTestHelpers.build_resolver(@store)
26
- IntegrationTestHelpers.assert_enabled(resolver, "feature-flag.in-seg.segment-and", {"" => {"domain" => "prefab.cloud"}, "user" => {"key" => "james"}}, false)
27
- end
28
-
29
- # returns false for untouched scope context
30
- def test_returns_false_for_untouched_scope_context
31
- resolver = IntegrationTestHelpers.build_resolver(@store)
32
- IntegrationTestHelpers.assert_enabled(resolver, "feature-flag.in-seg.segment-and", {"" => {"domain" => "example.com"}, "user" => {"key" => "nobody"}}, false)
33
- end
34
-
35
- # returns false due to partial scope context override of user.key
36
- def test_returns_false_due_to_partial_scope_context_override_of_user_key
37
- resolver = IntegrationTestHelpers.build_resolver(@store)
38
- IntegrationTestHelpers.assert_enabled(resolver, "feature-flag.in-seg.segment-and", {"" => {"domain" => "example.com"}, "user" => {"key" => "michael"}}, false)
39
- end
40
-
41
- # returns false due to partial scope context override of domain
42
- def test_returns_false_due_to_partial_scope_context_override_of_domain
43
- resolver = IntegrationTestHelpers.build_resolver(@store)
44
- IntegrationTestHelpers.assert_enabled(resolver, "feature-flag.in-seg.segment-and", {"" => {"domain" => "example.com", "key" => "prefab.cloud"}, "user" => {"key" => "nobody"}}, false)
45
- end
46
-
47
- # returns true due to full scope context override of user.key and domain
48
- def test_returns_true_due_to_full_scope_context_override_of_user_key_and_domain
49
- resolver = IntegrationTestHelpers.build_resolver(@store)
50
- IntegrationTestHelpers.assert_enabled(resolver, "feature-flag.in-seg.segment-and", {"" => {"domain" => "prefab.cloud"}, "user" => {"key" => "michael"}}, true)
51
- end
52
-
53
- # returns false for rule with different case on context property name
54
- def test_returns_false_for_rule_with_different_case_on_context_property_name
55
- resolver = IntegrationTestHelpers.build_resolver(@store)
56
- IntegrationTestHelpers.assert_enabled(resolver, "mixed.case.property.name", {"user" => {"IsHuman" => "verified"}}, false)
57
- end
58
-
59
- # returns true for matching case on context property name
60
- def test_returns_true_for_matching_case_on_context_property_name
61
- resolver = IntegrationTestHelpers.build_resolver(@store)
62
- IntegrationTestHelpers.assert_enabled(resolver, "mixed.case.property.name", {"user" => {"isHuman" => "verified"}}, true)
63
- end
64
- end