test/test_config_resolver.rb in prefab-cloud-ruby-0.13.0 vs test/test_config_resolver.rb in prefab-cloud-ruby-0.13.1
- old
+ new
@@ -1,82 +1,35 @@
-# frozen_string_literal: true
require 'test_helper'
class TestConfigResolver < Minitest::Test
- STAGING_ENV_ID = 1
- PRODUCTION_ENV_ID = 2
- TEST_ENV_ID = 3
-
def test_resolution
@loader = MockConfigLoader.new
loaded_values = {
- "key" => { config: Prefab::Config.new(
- key: "key",
- rows: [
- Prefab::ConfigRow.new(
- value: Prefab::ConfigValue.new(string: "value_no_env_default"),
- ),
- Prefab::ConfigRow.new(
- project_env_id: TEST_ENV_ID,
- value: Prefab::ConfigValue.new(string: "value_none"),
- ),
- Prefab::ConfigRow.new(
- project_env_id: TEST_ENV_ID,
- namespace: "projectA",
- value: Prefab::ConfigValue.new(string: "valueA"),
- ),
- Prefab::ConfigRow.new(
- project_env_id: TEST_ENV_ID,
- namespace: "projectB",
- value: Prefab::ConfigValue.new(string: "valueB"),
- ),
- Prefab::ConfigRow.new(
- project_env_id: TEST_ENV_ID,
- namespace: "projectB.subprojectX",
- value: Prefab::ConfigValue.new(string: "projectB.subprojectX"),
- ),
- Prefab::ConfigRow.new(
- project_env_id: TEST_ENV_ID,
- namespace: "projectB.subprojectY",
- value: Prefab::ConfigValue.new(string: "projectB.subprojectY"),
- ),
-
- ]
- ) },
- "key2" => { config: Prefab::Config.new(
- key: "key2",
- rows: [
- value: Prefab::ConfigValue.new(string: "valueB2"),
- ]
- ) }
-
+ "projectA:key" => Prefab::ConfigValue.new(string: "valueA"),
+ "key" => Prefab::ConfigValue.new(string: "value_none"),
+ "projectB:key" => Prefab::ConfigValue.new(string: "valueB"),
+ "projectB.subprojectX:key" => Prefab::ConfigValue.new(string: "projectB.subprojectX"),
+ "projectB.subprojectY:key" => Prefab::ConfigValue.new(string: "projectB.subprojectY"),
+ "projectB:key2" => Prefab::ConfigValue.new(string: "valueB2")
}
@loader.stub :calc_config, loaded_values do
+ @resolver = Prefab::ConfigResolver.new(MockBaseClient.new, @loader)
+ assert_equal "value_none", @resolver.get("key")
- @resolverA = resolver_for_namespace("", @loader, project_env_id: PRODUCTION_ENV_ID)
- assert_equal "value_no_env_default", @resolverA.get("key")
-
- ## below here in the test env
- @resolverA = resolver_for_namespace("", @loader)
- assert_equal "value_none", @resolverA.get("key")
-
@resolverA = resolver_for_namespace("projectA", @loader)
assert_equal "valueA", @resolverA.get("key")
@resolverB = resolver_for_namespace("projectB", @loader)
assert_equal "valueB", @resolverB.get("key")
@resolverBX = resolver_for_namespace("projectB.subprojectX", @loader)
assert_equal "projectB.subprojectX", @resolverBX.get("key")
- @resolverBX = resolver_for_namespace("projectB.subprojectX", @loader)
- assert_equal "valueB2", @resolverBX.get("key2")
-
- @resolverUndefinedSubProject = resolver_for_namespace("projectB.subprojectX.subsubQ", @loader)
+ @resolverUndefinedSubProject = resolver_for_namespace("projectB.subprojectX:subsubQ", @loader)
assert_equal "projectB.subprojectX", @resolverBX.get("key")
@resolverBX = resolver_for_namespace("projectC", @loader)
assert_equal "value_none", @resolverBX.get("key")
assert_nil @resolverBX.get("key_that_doesnt_exist")
@@ -85,120 +38,71 @@
def test_starts_with_ns
@loader = MockConfigLoader.new
@loader.stub :calc_config, {} do
resolver = Prefab::ConfigResolver.new(MockBaseClient.new, @loader)
- assert_equal [true, 0], resolver.send(:starts_with_ns?, "", "a")
- assert_equal [true, 1], resolver.send(:starts_with_ns?, "a", "a")
- assert_equal [true, 1], resolver.send(:starts_with_ns?, "a", "a.b")
- assert_equal [false, 2], resolver.send(:starts_with_ns?, "a.b", "a")
+ assert resolver.send(:starts_with_ns?, "", "a")
+ assert resolver.send(:starts_with_ns?, "a", "a")
+ assert resolver.send(:starts_with_ns?, "a", "a.b")
+ assert !resolver.send(:starts_with_ns?, "a.b", "a")
- assert_equal [true, 1], resolver.send(:starts_with_ns?, "corp", "corp.proj.proja")
- assert_equal [true, 2], resolver.send(:starts_with_ns?, "corp.proj", "corp.proj.proja")
- assert_equal [true, 3], resolver.send(:starts_with_ns?, "corp.proj.proja", "corp.proj.proja")
- assert_equal [false, 3], resolver.send(:starts_with_ns?, "corp.proj.projb", "corp.proj.proja")
+ assert resolver.send(:starts_with_ns?, "corp", "corp.proj.proja")
+ assert resolver.send(:starts_with_ns?, "corp.proj", "corp.proj.proja")
+ assert resolver.send(:starts_with_ns?, "corp.proj.proja", "corp.proj.proja")
+ assert !resolver.send(:starts_with_ns?, "corp.proj.projb", "corp.proj.proja")
- # corp_equal [true, 1:,a:b is not a real delimited namespace[0
- assert_equal [false, 1], resolver.send(:starts_with_ns?, "corp", "corp:a:b")
- assert_equal [true, 1], resolver.send(:starts_with_ns?, "foo", "foo.baz")
- assert_equal [true, 2], resolver.send(:starts_with_ns?, "foo.baz", "foo.baz")
- assert_equal [false, 2], resolver.send(:starts_with_ns?, "foo.baz", "foo.bazz")
+ # corp:a:b is not a real delimited namespace
+ assert !resolver.send(:starts_with_ns?, "corp", "corp:a:b")
+ assert resolver.send(:starts_with_ns?, "foo", "foo.baz")
+ assert resolver.send(:starts_with_ns?, "foo.baz", "foo.baz")
+ assert !resolver.send(:starts_with_ns?, "foo.baz", "foo.bazz")
end
end
- def test_special_ff_variant_copying
-
- @loader = MockConfigLoader.new
- loaded_values = {
- "ff" => { source: 'test',
- config: Prefab::Config.new(
- key: "ff",
- variants: [
- Prefab::FeatureFlagVariant.new(string: "inactive"),
- Prefab::FeatureFlagVariant.new(string: "default"),
- Prefab::FeatureFlagVariant.new(string: "env"),
- ],
- rows: [
- { value: Prefab::ConfigValue.new(feature_flag: Prefab::FeatureFlag.new(
- inactive_variant_idx: 0,
- rules: default_ff_rule(1),
- )) },
- { project_env_id: TEST_ENV_ID,
- value: Prefab::ConfigValue.new(feature_flag: Prefab::FeatureFlag.new(
- inactive_variant_idx: 0,
- rules: default_ff_rule(2),
- )) }
- ]
- )
- }
- }
- @loader.stub :calc_config, loaded_values do
- resolver = Prefab::ConfigResolver.new(MockBaseClient.new, @loader)
- config = resolver.get_config("ff")
- assert_equal 3, config.variants.size
- assert_equal %w(inactive default env), config.variants.map(&:string)
- end
- end
-
# colons are not allowed in keys, but verify behavior anyway
- def test_key_and_namespaces_with_colons
+ def test_keys_with_colons
@loader = MockConfigLoader.new
-
loaded_values = {
- "Key:With:Colons" => { config: Prefab::Config.new(
- key: "Key:With:Colons",
- rows: [Prefab::ConfigRow.new(
- value: Prefab::ConfigValue.new(string: "value")
- )]
- ) },
- "proj:apikey" => { config: Prefab::Config.new(
- key: "proj:apikey",
- rows: [Prefab::ConfigRow.new(
- value: Prefab::ConfigValue.new(string: "v2")
- )]
- ) }
+ "Key:With:Colons" => Prefab::ConfigValue.new(string: "value"),
+ "proj:apikey" => Prefab::ConfigValue.new(string: "v2")
}
@loader.stub :calc_config, loaded_values do
r = resolver_for_namespace("foo", @loader)
assert_nil r.get("apikey")
r = resolver_for_namespace("proj", @loader)
- assert_nil r.get("apikey")
+ assert_equal "v2", r.get("apikey")
r = resolver_for_namespace("", @loader)
assert_nil r.get("apikey")
+
@resolverKeyWith = resolver_for_namespace("Ket:With", @loader)
assert_nil @resolverKeyWith.get("Colons")
assert_nil @resolverKeyWith.get("With:Colons")
- assert_equal "value", @resolverKeyWith.get("Key:With:Colons")
+ assert_nil @resolverKeyWith.get("Key:With:Colons")
@resolverKeyWithExtra = resolver_for_namespace("Key:With:Extra", @loader)
+ puts @resolverKeyWithExtra.to_s
assert_nil @resolverKeyWithExtra.get("Colons")
assert_nil @resolverKeyWithExtra.get("With:Colons")
- assert_equal "value", @resolverKeyWithExtra.get("Key:With:Colons")
+ assert_nil @resolverKeyWithExtra.get("Key:With:Colons")
@resolverKey = resolver_for_namespace("Key", @loader)
- assert_nil @resolverKey.get("With:Colons")
+ assert_equal "value", @resolverKey.get("With:Colons")
assert_nil @resolverKey.get("Colons")
- assert_equal "value", @resolverKey.get("Key:With:Colons")
+ assert_nil @resolverKey.get("Key:With:Colons")
@resolverWithProperlySegmentedNamespace = resolver_for_namespace("Key.With.Extra", @loader)
assert_nil @resolverWithProperlySegmentedNamespace.get("Colons")
- assert_nil @resolverWithProperlySegmentedNamespace.get("With:Colons")
- assert_equal "value", @resolverWithProperlySegmentedNamespace.get("Key:With:Colons")
+ assert_equal "value", @resolverWithProperlySegmentedNamespace.get("With:Colons")
+ assert_nil @resolverWithProperlySegmentedNamespace.get("Key:With:Colons")
end
end
- def resolver_for_namespace(namespace, loader, project_env_id: TEST_ENV_ID)
- options = Prefab::Options.new(
- namespace: namespace
- )
- resolver = Prefab::ConfigResolver.new(MockBaseClient.new(options), loader)
- resolver.project_env_id = project_env_id
- resolver.update
- resolver
+ def resolver_for_namespace(namespace, loader)
+ Prefab::ConfigResolver.new(MockBaseClient.new(namespace: namespace), loader)
end
end