prefab-cloud-ruby 0.23.7 → 0.24.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -37,12 +37,13 @@ class TestCriteriaEvaluator < Minitest::Test
37
37
  ]
38
38
  )
39
39
 
40
- evaluator = Prefab::CriteriaEvaluator.new(config, project_env_id: PROJECT_ENV_ID, resolver: nil, base_client: nil)
40
+ evaluator = Prefab::CriteriaEvaluator.new(config, project_env_id: PROJECT_ENV_ID, resolver: nil, base_client: nil,
41
+ namespace: nil)
41
42
 
42
- assert_equal DESIRED_VALUE, evaluator.evaluate({}).string
43
+ assert_equal DESIRED_VALUE, evaluator.evaluate(context({})).string
43
44
  end
44
45
 
45
- def test_lookup_key_in
46
+ def test_nested_props_in
46
47
  config = Prefab::Config.new(
47
48
  key: KEY,
48
49
  rows: [
@@ -53,9 +54,9 @@ class TestCriteriaEvaluator < Minitest::Test
53
54
  Prefab::ConditionalValue.new(
54
55
  criteria: [
55
56
  Prefab::Criterion.new(
56
- operator: Prefab::Criterion::CriterionOperator::LOOKUP_KEY_IN,
57
+ operator: Prefab::Criterion::CriterionOperator::PROP_IS_ONE_OF,
57
58
  value_to_match: string_list(%w[ok fine]),
58
- property_name: Prefab::CriteriaEvaluator::LOOKUP_KEY
59
+ property_name: 'user.key'
59
60
  )
60
61
  ],
61
62
  value: Prefab::ConfigValue.new(string: DESIRED_VALUE)
@@ -65,14 +66,15 @@ class TestCriteriaEvaluator < Minitest::Test
65
66
  ]
66
67
  )
67
68
 
68
- evaluator = Prefab::CriteriaEvaluator.new(config, project_env_id: PROJECT_ENV_ID, resolver: nil, base_client: nil)
69
+ evaluator = Prefab::CriteriaEvaluator.new(config, project_env_id: PROJECT_ENV_ID, resolver: nil, base_client: nil,
70
+ namespace: nil)
69
71
 
70
- assert_equal DEFAULT_VALUE, evaluator.evaluate({}).string
71
- assert_equal DEFAULT_VALUE, evaluator.evaluate({ Prefab::CriteriaEvaluator::LOOKUP_KEY => 'wrong' }).string
72
- assert_equal DESIRED_VALUE, evaluator.evaluate({ Prefab::CriteriaEvaluator::LOOKUP_KEY => 'ok' }).string
72
+ assert_equal DEFAULT_VALUE, evaluator.evaluate(context({})).string
73
+ assert_equal DEFAULT_VALUE, evaluator.evaluate(context({ user: { key: 'wrong' } })).string
74
+ assert_equal DESIRED_VALUE, evaluator.evaluate(context({ user: { key: 'ok' } })).string
73
75
  end
74
76
 
75
- def test_lookup_key_not_in
77
+ def test_nested_props_not_in
76
78
  config = Prefab::Config.new(
77
79
  key: KEY,
78
80
  rows: [
@@ -83,9 +85,9 @@ class TestCriteriaEvaluator < Minitest::Test
83
85
  Prefab::ConditionalValue.new(
84
86
  criteria: [
85
87
  Prefab::Criterion.new(
86
- operator: Prefab::Criterion::CriterionOperator::LOOKUP_KEY_NOT_IN,
88
+ operator: Prefab::Criterion::CriterionOperator::PROP_IS_NOT_ONE_OF,
87
89
  value_to_match: string_list(%w[wrong bad]),
88
- property_name: Prefab::CriteriaEvaluator::LOOKUP_KEY
90
+ property_name: 'user.key'
89
91
  )
90
92
  ],
91
93
  value: Prefab::ConfigValue.new(string: DESIRED_VALUE)
@@ -95,11 +97,12 @@ class TestCriteriaEvaluator < Minitest::Test
95
97
  ]
96
98
  )
97
99
 
98
- evaluator = Prefab::CriteriaEvaluator.new(config, project_env_id: PROJECT_ENV_ID, resolver: nil, base_client: nil)
100
+ evaluator = Prefab::CriteriaEvaluator.new(config, project_env_id: PROJECT_ENV_ID, resolver: nil, base_client: nil,
101
+ namespace: nil)
99
102
 
100
- assert_equal DESIRED_VALUE, evaluator.evaluate({}).string
101
- assert_equal DESIRED_VALUE, evaluator.evaluate({ Prefab::CriteriaEvaluator::LOOKUP_KEY => 'ok' }).string
102
- assert_equal DEFAULT_VALUE, evaluator.evaluate({ Prefab::CriteriaEvaluator::LOOKUP_KEY => 'wrong' }).string
103
+ assert_equal DESIRED_VALUE, evaluator.evaluate(context({})).string
104
+ assert_equal DESIRED_VALUE, evaluator.evaluate(context({ user: { key: 'ok' } })).string
105
+ assert_equal DEFAULT_VALUE, evaluator.evaluate(context({ user: { key: 'wrong' } })).string
103
106
  end
104
107
 
105
108
  def test_prop_is_one_of
@@ -115,7 +118,7 @@ class TestCriteriaEvaluator < Minitest::Test
115
118
  Prefab::Criterion.new(
116
119
  operator: Prefab::Criterion::CriterionOperator::PROP_IS_ONE_OF,
117
120
  value_to_match: string_list(['hotmail.com', 'gmail.com']),
118
- property_name: 'email_suffix'
121
+ property_name: 'user.email_suffix'
119
122
  )
120
123
  ],
121
124
  value: Prefab::ConfigValue.new(string: DESIRED_VALUE)
@@ -125,11 +128,12 @@ class TestCriteriaEvaluator < Minitest::Test
125
128
  ]
126
129
  )
127
130
 
128
- evaluator = Prefab::CriteriaEvaluator.new(config, project_env_id: PROJECT_ENV_ID, resolver: nil, base_client: nil)
131
+ evaluator = Prefab::CriteriaEvaluator.new(config, project_env_id: PROJECT_ENV_ID, resolver: nil, base_client: nil,
132
+ namespace: nil)
129
133
 
130
- assert_equal DEFAULT_VALUE, evaluator.evaluate({}).string
131
- assert_equal DEFAULT_VALUE, evaluator.evaluate({ email_suffix: 'prefab.cloud' }).string
132
- assert_equal DESIRED_VALUE, evaluator.evaluate({ email_suffix: 'hotmail.com' }).string
134
+ assert_equal DEFAULT_VALUE, evaluator.evaluate(context({})).string
135
+ assert_equal DEFAULT_VALUE, evaluator.evaluate(context(user: { email_suffix: 'prefab.cloud' })).string
136
+ assert_equal DESIRED_VALUE, evaluator.evaluate(context(user: { email_suffix: 'hotmail.com' })).string
133
137
  end
134
138
 
135
139
  def test_prop_is_not_one_of
@@ -145,7 +149,7 @@ class TestCriteriaEvaluator < Minitest::Test
145
149
  Prefab::Criterion.new(
146
150
  operator: Prefab::Criterion::CriterionOperator::PROP_IS_NOT_ONE_OF,
147
151
  value_to_match: string_list(['hotmail.com', 'gmail.com']),
148
- property_name: 'email_suffix'
152
+ property_name: 'user.email_suffix'
149
153
  )
150
154
  ],
151
155
  value: Prefab::ConfigValue.new(string: DESIRED_VALUE)
@@ -155,11 +159,12 @@ class TestCriteriaEvaluator < Minitest::Test
155
159
  ]
156
160
  )
157
161
 
158
- evaluator = Prefab::CriteriaEvaluator.new(config, project_env_id: PROJECT_ENV_ID, resolver: nil, base_client: nil)
162
+ evaluator = Prefab::CriteriaEvaluator.new(config, project_env_id: PROJECT_ENV_ID, resolver: nil, base_client: nil,
163
+ namespace: nil)
159
164
 
160
- assert_equal DESIRED_VALUE, evaluator.evaluate({}).string
161
- assert_equal DESIRED_VALUE, evaluator.evaluate({ email_suffix: 'prefab.cloud' }).string
162
- assert_equal DEFAULT_VALUE, evaluator.evaluate({ email_suffix: 'hotmail.com' }).string
165
+ assert_equal DESIRED_VALUE, evaluator.evaluate(context({})).string
166
+ assert_equal DESIRED_VALUE, evaluator.evaluate(context(user: { email_suffix: 'prefab.cloud' })).string
167
+ assert_equal DEFAULT_VALUE, evaluator.evaluate(context(user: { email_suffix: 'hotmail.com' })).string
163
168
  end
164
169
 
165
170
  def test_prop_ends_with_one_of
@@ -175,7 +180,7 @@ class TestCriteriaEvaluator < Minitest::Test
175
180
  Prefab::Criterion.new(
176
181
  operator: Prefab::Criterion::CriterionOperator::PROP_ENDS_WITH_ONE_OF,
177
182
  value_to_match: string_list(['hotmail.com', 'gmail.com']),
178
- property_name: 'email'
183
+ property_name: 'user.email'
179
184
  )
180
185
  ],
181
186
  value: Prefab::ConfigValue.new(string: DESIRED_VALUE)
@@ -185,11 +190,12 @@ class TestCriteriaEvaluator < Minitest::Test
185
190
  ]
186
191
  )
187
192
 
188
- evaluator = Prefab::CriteriaEvaluator.new(config, project_env_id: PROJECT_ENV_ID, resolver: nil, base_client: nil)
193
+ evaluator = Prefab::CriteriaEvaluator.new(config, project_env_id: PROJECT_ENV_ID, resolver: nil, base_client: nil,
194
+ namespace: nil)
189
195
 
190
- assert_equal DEFAULT_VALUE, evaluator.evaluate({}).string
191
- assert_equal DEFAULT_VALUE, evaluator.evaluate({ email: 'example@prefab.cloud' }).string
192
- assert_equal DESIRED_VALUE, evaluator.evaluate({ email: 'example@hotmail.com' }).string
196
+ assert_equal DEFAULT_VALUE, evaluator.evaluate(context({})).string
197
+ assert_equal DEFAULT_VALUE, evaluator.evaluate(context(user: { email: 'example@prefab.cloud' })).string
198
+ assert_equal DESIRED_VALUE, evaluator.evaluate(context(user: { email: 'example@hotmail.com' })).string
193
199
  end
194
200
 
195
201
  def test_prop_does_not_end_with_one_of
@@ -205,7 +211,7 @@ class TestCriteriaEvaluator < Minitest::Test
205
211
  Prefab::Criterion.new(
206
212
  operator: Prefab::Criterion::CriterionOperator::PROP_DOES_NOT_END_WITH_ONE_OF,
207
213
  value_to_match: string_list(['hotmail.com', 'gmail.com']),
208
- property_name: 'email'
214
+ property_name: 'user.email'
209
215
  )
210
216
  ],
211
217
  value: Prefab::ConfigValue.new(string: DESIRED_VALUE)
@@ -215,11 +221,12 @@ class TestCriteriaEvaluator < Minitest::Test
215
221
  ]
216
222
  )
217
223
 
218
- evaluator = Prefab::CriteriaEvaluator.new(config, project_env_id: PROJECT_ENV_ID, resolver: nil, base_client: nil)
224
+ evaluator = Prefab::CriteriaEvaluator.new(config, project_env_id: PROJECT_ENV_ID, resolver: nil, base_client: nil,
225
+ namespace: nil)
219
226
 
220
- assert_equal DESIRED_VALUE, evaluator.evaluate({}).string
221
- assert_equal DESIRED_VALUE, evaluator.evaluate({ email: 'example@prefab.cloud' }).string
222
- assert_equal DEFAULT_VALUE, evaluator.evaluate({ email: 'example@hotmail.com' }).string
227
+ assert_equal DESIRED_VALUE, evaluator.evaluate(context({})).string
228
+ assert_equal DESIRED_VALUE, evaluator.evaluate(context(user: { email: 'example@prefab.cloud' })).string
229
+ assert_equal DEFAULT_VALUE, evaluator.evaluate(context(user: { email: 'example@hotmail.com' })).string
223
230
  end
224
231
 
225
232
  def test_in_seg
@@ -237,7 +244,7 @@ class TestCriteriaEvaluator < Minitest::Test
237
244
  Prefab::Criterion.new(
238
245
  operator: Prefab::Criterion::CriterionOperator::PROP_ENDS_WITH_ONE_OF,
239
246
  value_to_match: string_list(['hotmail.com', 'gmail.com']),
240
- property_name: 'email'
247
+ property_name: 'user.email'
241
248
  )
242
249
  ]
243
250
  ),
@@ -289,12 +296,12 @@ class TestCriteriaEvaluator < Minitest::Test
289
296
  )
290
297
 
291
298
  evaluator = Prefab::CriteriaEvaluator.new(config, project_env_id: PROJECT_ENV_ID,
292
- base_client: nil,
299
+ base_client: nil, namespace: nil,
293
300
  resolver: resolver_fake({ segment_key => segment_config }))
294
301
 
295
- assert_equal DEFAULT_VALUE, evaluator.evaluate({}).string
296
- assert_equal DEFAULT_VALUE, evaluator.evaluate({ email: 'example@prefab.cloud' }).string
297
- assert_equal DESIRED_VALUE, evaluator.evaluate({ email: 'example@hotmail.com' }).string
302
+ assert_equal DEFAULT_VALUE, evaluator.evaluate(context({})).string
303
+ assert_equal DEFAULT_VALUE, evaluator.evaluate(context(user: { email: 'example@prefab.cloud' })).string
304
+ assert_equal DESIRED_VALUE, evaluator.evaluate(context(user: { email: 'example@hotmail.com' })).string
298
305
  end
299
306
 
300
307
  def test_not_in_seg
@@ -312,7 +319,7 @@ class TestCriteriaEvaluator < Minitest::Test
312
319
  Prefab::Criterion.new(
313
320
  operator: Prefab::Criterion::CriterionOperator::PROP_ENDS_WITH_ONE_OF,
314
321
  value_to_match: string_list(['hotmail.com', 'gmail.com']),
315
- property_name: 'email'
322
+ property_name: 'user.email'
316
323
  )
317
324
  ]
318
325
  ),
@@ -346,12 +353,12 @@ class TestCriteriaEvaluator < Minitest::Test
346
353
  )
347
354
 
348
355
  evaluator = Prefab::CriteriaEvaluator.new(config, project_env_id: PROJECT_ENV_ID,
349
- base_client: nil,
356
+ base_client: nil, namespace: nil,
350
357
  resolver: resolver_fake({ segment_key => segment_config }))
351
358
 
352
- assert_equal DESIRED_VALUE, evaluator.evaluate({}).string
353
- assert_equal DESIRED_VALUE, evaluator.evaluate({ email: 'example@prefab.cloud' }).string
354
- assert_equal DEFAULT_VALUE, evaluator.evaluate({ email: 'example@hotmail.com' }).string
359
+ assert_equal DESIRED_VALUE, evaluator.evaluate(context({})).string
360
+ assert_equal DESIRED_VALUE, evaluator.evaluate(context(user: { email: 'example@prefab.cloud' })).string
361
+ assert_equal DEFAULT_VALUE, evaluator.evaluate(context(user: { email: 'example@hotmail.com' })).string
355
362
  end
356
363
 
357
364
  def test_multiple_conditions_in_one_value
@@ -369,13 +376,13 @@ class TestCriteriaEvaluator < Minitest::Test
369
376
  Prefab::Criterion.new(
370
377
  operator: Prefab::Criterion::CriterionOperator::PROP_ENDS_WITH_ONE_OF,
371
378
  value_to_match: string_list(['prefab.cloud', 'gmail.com']),
372
- property_name: 'email'
379
+ property_name: 'user.email'
373
380
  ),
374
381
 
375
382
  Prefab::Criterion.new(
376
383
  operator: Prefab::Criterion::CriterionOperator::PROP_IS_ONE_OF,
377
384
  value_to_match: Prefab::ConfigValue.new(bool: true),
378
- property_name: 'admin'
385
+ property_name: 'user.admin'
379
386
  )
380
387
  ]
381
388
  ),
@@ -404,7 +411,7 @@ class TestCriteriaEvaluator < Minitest::Test
404
411
  Prefab::Criterion.new(
405
412
  operator: Prefab::Criterion::CriterionOperator::PROP_IS_NOT_ONE_OF,
406
413
  value_to_match: Prefab::ConfigValue.new(bool: true),
407
- property_name: 'deleted'
414
+ property_name: 'user.deleted'
408
415
  )
409
416
  ],
410
417
  value: Prefab::ConfigValue.new(string: DESIRED_VALUE)
@@ -415,16 +422,18 @@ class TestCriteriaEvaluator < Minitest::Test
415
422
  )
416
423
 
417
424
  evaluator = Prefab::CriteriaEvaluator.new(config, project_env_id: PROJECT_ENV_ID,
418
- base_client: nil,
425
+ base_client: nil, namespace: nil,
419
426
  resolver: resolver_fake({ segment_key => segment_config }))
420
427
 
421
- assert_equal DEFAULT_VALUE, evaluator.evaluate({}).string
422
- assert_equal DEFAULT_VALUE, evaluator.evaluate({ email: 'example@prefab.cloud' }).string
423
- assert_equal DESIRED_VALUE, evaluator.evaluate({ email: 'example@prefab.cloud', admin: true }).string
424
- assert_equal DEFAULT_VALUE, evaluator.evaluate({ email: 'example@prefab.cloud', admin: true, deleted: true }).string
425
- assert_equal DEFAULT_VALUE, evaluator.evaluate({ email: 'example@gmail.com' }).string
426
- assert_equal DESIRED_VALUE, evaluator.evaluate({ email: 'example@gmail.com', admin: true }).string
427
- assert_equal DEFAULT_VALUE, evaluator.evaluate({ email: 'example@gmail.com', admin: true, deleted: true }).string
428
+ assert_equal DEFAULT_VALUE, evaluator.evaluate(context({})).string
429
+ assert_equal DEFAULT_VALUE, evaluator.evaluate(context(user: { email: 'example@prefab.cloud' })).string
430
+ assert_equal DESIRED_VALUE, evaluator.evaluate(context(user: { email: 'example@prefab.cloud', admin: true })).string
431
+ assert_equal DEFAULT_VALUE,
432
+ evaluator.evaluate(context(user: { email: 'example@prefab.cloud', admin: true, deleted: true })).string
433
+ assert_equal DEFAULT_VALUE, evaluator.evaluate(context(user: { email: 'example@gmail.com' })).string
434
+ assert_equal DESIRED_VALUE, evaluator.evaluate(context(user: { email: 'example@gmail.com', admin: true })).string
435
+ assert_equal DEFAULT_VALUE,
436
+ evaluator.evaluate(context(user: { email: 'example@gmail.com', admin: true, deleted: true })).string
428
437
  end
429
438
 
430
439
  def test_multiple_conditions_in_multiple_values
@@ -442,7 +451,7 @@ class TestCriteriaEvaluator < Minitest::Test
442
451
  Prefab::Criterion.new(
443
452
  operator: Prefab::Criterion::CriterionOperator::PROP_ENDS_WITH_ONE_OF,
444
453
  value_to_match: string_list(['prefab.cloud', 'gmail.com']),
445
- property_name: 'email'
454
+ property_name: 'user.email'
446
455
  )
447
456
  ]
448
457
  ),
@@ -452,7 +461,7 @@ class TestCriteriaEvaluator < Minitest::Test
452
461
  Prefab::Criterion.new(
453
462
  operator: Prefab::Criterion::CriterionOperator::PROP_IS_ONE_OF,
454
463
  value_to_match: Prefab::ConfigValue.new(bool: true),
455
- property_name: 'admin'
464
+ property_name: 'user.admin'
456
465
  )
457
466
  ]
458
467
  ),
@@ -481,7 +490,7 @@ class TestCriteriaEvaluator < Minitest::Test
481
490
  Prefab::Criterion.new(
482
491
  operator: Prefab::Criterion::CriterionOperator::PROP_IS_NOT_ONE_OF,
483
492
  value_to_match: Prefab::ConfigValue.new(bool: true),
484
- property_name: 'deleted'
493
+ property_name: 'user.deleted'
485
494
  )
486
495
  ],
487
496
  value: Prefab::ConfigValue.new(string: DESIRED_VALUE)
@@ -492,17 +501,19 @@ class TestCriteriaEvaluator < Minitest::Test
492
501
  )
493
502
 
494
503
  evaluator = Prefab::CriteriaEvaluator.new(config, project_env_id: PROJECT_ENV_ID,
495
- base_client: nil,
504
+ base_client: nil, namespace: nil,
496
505
  resolver: resolver_fake({ segment_key => segment_config }))
497
506
 
498
- assert_equal DEFAULT_VALUE, evaluator.evaluate({}).string
499
- assert_equal DESIRED_VALUE, evaluator.evaluate({ email: 'example@prefab.cloud' }).string
500
- assert_equal DESIRED_VALUE, evaluator.evaluate({ admin: true }).string
501
- assert_equal DESIRED_VALUE, evaluator.evaluate({ email: 'example@prefab.cloud', admin: true }).string
502
- assert_equal DEFAULT_VALUE, evaluator.evaluate({ email: 'example@prefab.cloud', admin: true, deleted: true }).string
503
- assert_equal DESIRED_VALUE, evaluator.evaluate({ email: 'example@gmail.com' }).string
504
- assert_equal DESIRED_VALUE, evaluator.evaluate({ email: 'example@gmail.com', admin: true }).string
505
- assert_equal DEFAULT_VALUE, evaluator.evaluate({ email: 'example@gmail.com', admin: true, deleted: true }).string
507
+ assert_equal DEFAULT_VALUE, evaluator.evaluate(context({})).string
508
+ assert_equal DESIRED_VALUE, evaluator.evaluate(context(user: { email: 'example@prefab.cloud' })).string
509
+ assert_equal DESIRED_VALUE, evaluator.evaluate(context(user: { admin: true })).string
510
+ assert_equal DESIRED_VALUE, evaluator.evaluate(context(user: { email: 'example@prefab.cloud', admin: true })).string
511
+ assert_equal DEFAULT_VALUE,
512
+ evaluator.evaluate(context(user: { email: 'example@prefab.cloud', admin: true, deleted: true })).string
513
+ assert_equal DESIRED_VALUE, evaluator.evaluate(context(user: { email: 'example@gmail.com' })).string
514
+ assert_equal DESIRED_VALUE, evaluator.evaluate(context(user: { email: 'example@gmail.com', admin: true })).string
515
+ assert_equal DEFAULT_VALUE,
516
+ evaluator.evaluate(context(user: { email: 'example@gmail.com', admin: true, deleted: true })).string
506
517
  end
507
518
 
508
519
  def test_stringifying_property_values_and_names
@@ -518,7 +529,7 @@ class TestCriteriaEvaluator < Minitest::Test
518
529
  Prefab::Criterion.new(
519
530
  operator: Prefab::Criterion::CriterionOperator::PROP_IS_ONE_OF,
520
531
  value_to_match: string_list(%w[1 true hello]),
521
- property_name: 'team_name'
532
+ property_name: 'team.name'
522
533
  )
523
534
  ],
524
535
  value: Prefab::ConfigValue.new(string: DESIRED_VALUE)
@@ -529,15 +540,15 @@ class TestCriteriaEvaluator < Minitest::Test
529
540
  )
530
541
 
531
542
  evaluator = Prefab::CriteriaEvaluator.new(config, project_env_id: PROJECT_ENV_ID, resolver: nil,
532
- base_client: nil)
543
+ namespace: nil, base_client: nil)
533
544
 
534
- assert_equal DEFAULT_VALUE, evaluator.evaluate({}).string
535
- assert_equal DEFAULT_VALUE, evaluator.evaluate({ team_name: 'prefab.cloud' }).string
545
+ assert_equal DEFAULT_VALUE, evaluator.evaluate(context({})).string
546
+ assert_equal DEFAULT_VALUE, evaluator.evaluate(context(team: { name: 'prefab.cloud' })).string
536
547
 
537
548
  [1, true, :hello].each do |value|
538
- [:team_name, 'team_name'].each do |property_name|
539
- assert_equal DESIRED_VALUE, evaluator.evaluate({ property_name => value }).string
540
- assert_equal DESIRED_VALUE, evaluator.evaluate({ property_name => value.to_s }).string
549
+ [:name, 'name'].each do |property_name|
550
+ assert_equal DESIRED_VALUE, evaluator.evaluate(context(team: { property_name => value })).string
551
+ assert_equal DESIRED_VALUE, evaluator.evaluate(context(team: { property_name => value.to_s })).string
541
552
  end
542
553
  end
543
554
  end
@@ -557,14 +568,18 @@ class TestCriteriaEvaluator < Minitest::Test
557
568
  @config[key]
558
569
  end
559
570
 
560
- def get(key, _lookup_key, properties = {})
571
+ def get(key, properties = {})
561
572
  # This only gets called for segments, so we don't need to pass in a resolver
562
573
  Prefab::CriteriaEvaluator.new(@config[key], project_env_id: nil, resolver: nil,
563
- base_client: nil).evaluate(properties)
574
+ namespace: nil, base_client: nil).evaluate(properties)
564
575
  end
565
576
  end
566
577
 
567
578
  def resolver_fake(config)
568
579
  FakeResolver.new(config)
569
580
  end
581
+
582
+ def context(properties)
583
+ Prefab::Context.new(properties)
584
+ end
570
585
  end
@@ -17,38 +17,32 @@ class TestFeatureFlagClient < Minitest::Test
17
17
  def test_feature_is_on_for
18
18
  ff_client = new_client
19
19
 
20
- assert_equal false, ff_client.feature_is_on_for?('something-that-does-not-exist', 'irrelevant')
21
- assert_equal false, ff_client.feature_is_on_for?('in_lookup_key', 'not-included')
22
- assert_equal true, ff_client.feature_is_on_for?('in_lookup_key', 'abc123')
23
- assert_equal true, ff_client.feature_is_on_for?('in_lookup_key', 'xyz987')
20
+ assert_equal false, ff_client.feature_is_on_for?('something-that-does-not-exist', {})
21
+ assert_equal false, ff_client.feature_is_on_for?('user_key_match', {})
22
+ assert_equal false, ff_client.feature_is_on_for?('user_key_match', { user: { key: 'not-included' } })
23
+ assert_equal true, ff_client.feature_is_on_for?('user_key_match', { user: { key: 'abc123' } })
24
+ assert_equal true, ff_client.feature_is_on_for?('user_key_match', { user: { key: 'xyz987' } })
24
25
  end
25
26
 
26
27
  def test_get
27
28
  ff_client = new_client
28
29
 
29
30
  # No default
30
- assert_equal false, ff_client.get('something-that-does-not-exist')
31
- assert_equal false, ff_client.get('disabled_flag')
32
- assert_equal true, ff_client.get('enabled_flag')
33
- assert_equal 'all-features', ff_client.get('flag_with_a_value')
31
+ assert_equal false, ff_client.get('something-that-does-not-exist', {})
32
+ assert_equal false, ff_client.get('disabled_flag', {})
33
+ assert_equal true, ff_client.get('enabled_flag', {})
34
+ assert_equal 'all-features', ff_client.get('flag_with_a_value', {})
34
35
 
35
36
  # with defaults
36
- assert_equal DEFAULT, ff_client.get('something-that-does-not-exist', default: DEFAULT)
37
- assert_equal false, ff_client.get('disabled_flag', default: DEFAULT)
38
- assert_equal true, ff_client.get('enabled_flag', default: DEFAULT)
39
- assert_equal 'all-features', ff_client.get('flag_with_a_value', default: DEFAULT)
37
+ assert_equal DEFAULT, ff_client.get('something-that-does-not-exist', {}, default: DEFAULT)
38
+ assert_equal false, ff_client.get('disabled_flag', {}, default: DEFAULT)
39
+ assert_equal true, ff_client.get('enabled_flag', {}, default: DEFAULT)
40
+ assert_equal 'all-features', ff_client.get('flag_with_a_value', {}, default: DEFAULT)
40
41
  end
41
42
 
42
43
  private
43
44
 
44
45
  def new_client(overrides = {})
45
- options = Prefab::Options.new(**{
46
- prefab_config_override_dir: 'none',
47
- prefab_config_classpath_dir: 'test',
48
- prefab_envs: ['unit_tests'],
49
- prefab_datasources: Prefab::Options::DATASOURCES::LOCAL_ONLY
50
- }.merge(overrides))
51
-
52
- Prefab::Client.new(options).feature_flag_client
46
+ super(overrides).feature_flag_client
53
47
  end
54
48
  end
data/test/test_helper.rb CHANGED
@@ -43,7 +43,7 @@ class MockConfigClient
43
43
  @config_values = config_values
44
44
  end
45
45
 
46
- def get(key, default = nil, _, _)
46
+ def get(key, default = nil)
47
47
  @config_values.fetch(key, default)
48
48
  end
49
49
 
@@ -10,24 +10,40 @@ class TestIntegration < Minitest::Test
10
10
  tests = YAML.load(File.read(test_file))['tests']
11
11
 
12
12
  tests.each do |test|
13
- define_method(:"test_#{test['name']}") do
14
- it = IntegrationTest.new(test)
13
+ parent_context = test['context']
15
14
 
16
- case it.test_type
17
- when :raise
18
- err = assert_raises(it.expected[:error]) do
19
- it.test_client.send(it.func, *it.input)
15
+ test['cases'].each do |test_case|
16
+ define_method(:"test_#{test_case['name']}") do
17
+ it = IntegrationTest.new(test_case)
18
+
19
+ with_parent_context_maybe(parent_context) do
20
+ case it.test_type
21
+ when :raise
22
+ err = assert_raises(it.expected[:error]) do
23
+ it.test_client.send(it.func, *it.input)
24
+ end
25
+ assert_match(/#{it.expected[:message]}/, err.message)
26
+ when :nil
27
+ assert_nil it.test_client.send(it.func, *it.input)
28
+ when :feature_flag
29
+ flag, context = *it.input
30
+ assert_equal it.expected[:value], it.test_client.send(it.func, flag, context)
31
+ when :simple_equality
32
+ assert_equal it.expected[:value], it.test_client.send(it.func, *it.input)
33
+ end
20
34
  end
21
- assert_match(/#{it.expected[:message]}/, err.message)
22
- when :nil
23
- assert_nil it.test_client.send(it.func, *it.input)
24
- when :feature_flag
25
- flag, lookup_key, attributes = *it.input
26
- assert_equal it.expected[:value], it.test_client.send(it.func, flag, lookup_key, attributes: attributes)
27
- when :simple_equality
28
- assert_equal it.expected[:value], it.test_client.send(it.func, *it.input)
29
35
  end
30
36
  end
31
37
  end
32
38
  end
39
+
40
+ private
41
+
42
+ def with_parent_context_maybe(context, &block)
43
+ if context
44
+ Prefab::Context.with_context(context, &block)
45
+ else
46
+ yield
47
+ end
48
+ end
33
49
  end
@@ -34,14 +34,13 @@ class TestLocalConfigParser < Minitest::Test
34
34
  assert_equal 1, config.rows[0].values.size
35
35
 
36
36
  value_row = config.rows[0].values[0]
37
- assert_equal Prefab::WeightedValues, value_row.value.weighted_values.class
38
37
  assert_equal 'all-features', Prefab::ConfigValueUnwrapper.unwrap(value_row.value, key, {})
39
38
  end
40
39
 
41
- def test_flag_in_lookup_key
42
- key = :flag_in_lookup_key
43
- value = stringify_keys({ "feature_flag": 'true', value: true,
44
- criterion: { operator: 'LOOKUP_KEY_IN', values: %w[abc123 xyz987] } })
40
+ def test_flag_in_user_key
41
+ key = :flag_in_user_key
42
+ value = stringify_keys({ 'feature_flag': 'true', value: true,
43
+ criterion: { operator: 'PROP_IS_ONE_OF', property: 'user.key', values: %w[abc123 xyz987] } })
45
44
  parsed = Prefab::LocalConfigParser.parse(key, value, {}, FILE_NAME)[key]
46
45
  config = parsed[:config]
47
46
 
@@ -54,11 +53,10 @@ class TestLocalConfigParser < Minitest::Test
54
53
  assert_equal 1, config.rows[0].values[0].criteria.size
55
54
 
56
55
  value_row = config.rows[0].values[0]
57
- assert_equal Prefab::WeightedValues, value_row.value.weighted_values.class
58
56
  assert_equal true, Prefab::ConfigValueUnwrapper.unwrap(value_row.value, key, {})
59
57
 
60
- assert_equal Prefab::CriteriaEvaluator::LOOKUP_KEY, value_row.criteria[0].property_name
61
- assert_equal :LOOKUP_KEY_IN, value_row.criteria[0].operator
58
+ assert_equal 'user.key', value_row.criteria[0].property_name
59
+ assert_equal :PROP_IS_ONE_OF, value_row.criteria[0].operator
62
60
  assert_equal %w[abc123 xyz987], value_row.criteria[0].value_to_match.string_list.values
63
61
  end
64
62
 
@@ -49,13 +49,10 @@ class TestLogPathCollector < Minitest::Test
49
49
  private
50
50
 
51
51
  def new_client(overrides = {})
52
- options = Prefab::Options.new(**{
53
- prefab_config_override_dir: 'none',
54
- prefab_config_classpath_dir: 'test',
55
- prefab_envs: ['unit_tests'],
56
- api_key: '123-development-yourapikey-SDK'
52
+ super(**{
53
+ prefab_datasources: Prefab::Options::DATASOURCES::ALL,
54
+ api_key: '123-development-yourapikey-SDK',
55
+ collect_sync_interval: 1000 # we'll trigger sync manually in our test
57
56
  }.merge(overrides))
58
-
59
- Prefab::Client.new(options)
60
57
  end
61
58
  end