From c678e7d47df47a537cde1f3c745222ddf4d34742 Mon Sep 17 00:00:00 2001 From: James Kebinger Date: Mon, 14 Apr 2025 17:44:03 -0500 Subject: [PATCH 1/4] Remove Timecop.freeze so that integration tests relying on Time.now will work --- test/support/common_helpers.rb | 1 - 1 file changed, 1 deletion(-) diff --git a/test/support/common_helpers.rb b/test/support/common_helpers.rb index 261ed58..49056d1 100644 --- a/test/support/common_helpers.rb +++ b/test/support/common_helpers.rb @@ -11,7 +11,6 @@ def setup Prefab::Context.default_context.clear SemanticLogger.add_appender(io: $logs, filter: Prefab.log_filter) SemanticLogger.sync! - Timecop.freeze('2023-08-09 15:18:12 -0400') end def teardown From 09e51c09f2cf3c4a43a068c64c50562e26226f79 Mon Sep 17 00:00:00 2001 From: James Kebinger Date: Mon, 14 Apr 2025 17:44:30 -0500 Subject: [PATCH 2/4] Update property fetching to always return prefab.current-time as the current time in UTC millis --- lib/prefab/criteria_evaluator.rb | 16 +++++++++------- test/test_criteria_evaluator.rb | 22 ++++++++++++++++++++++ 2 files changed, 31 insertions(+), 7 deletions(-) diff --git a/lib/prefab/criteria_evaluator.rb b/lib/prefab/criteria_evaluator.rb index 7d0e85c..fbfb07d 100644 --- a/lib/prefab/criteria_evaluator.rb +++ b/lib/prefab/criteria_evaluator.rb @@ -86,12 +86,7 @@ def HIERARCHICAL_MATCH(criterion, properties) end def IN_INT_RANGE(criterion, properties) - value = if criterion.property_name == 'prefab.current-time' - Time.now.utc.to_i * 1000 - else - value_from_properties(criterion, properties) - end - + value = value_from_properties(criterion, properties) value && value >= criterion.value_to_match.int_range.start && value < criterion.value_to_match.int_range.end end @@ -150,7 +145,14 @@ def PROP_SEMVER_GREATER_THAN(criterion, properties) end def value_from_properties(criterion, properties) - criterion.property_name == NAMESPACE_KEY ? @namespace : properties.get(criterion.property_name) + case criterion.property_name + when NAMESPACE_KEY + @namespace + when 'prefab.current-time' + Time.now.utc.to_i * 1000 + else + properties.get(criterion.property_name) + end end COMPARE_TO_OPERATORS = { diff --git a/test/test_criteria_evaluator.rb b/test/test_criteria_evaluator.rb index f56d0c6..73c18cc 100644 --- a/test/test_criteria_evaluator.rb +++ b/test/test_criteria_evaluator.rb @@ -1068,6 +1068,28 @@ def test_semver_greater_than assert_equal DESIRED_VALUE, evaluator.evaluate(context(user:{version: "3.0.0"})).unwrapped_value end + def test_date_before_with_current_time + future_time = Time.now.utc + 3600 # 1 hour in the future + config = create_prefab_config( + operator: PrefabProto::Criterion::CriterionOperator::PROP_BEFORE, + property_name: 'prefab.current-time', + value_to_match: future_time.iso8601 + ) + evaluator = Prefab::CriteriaEvaluator.new(config, project_env_id: PROJECT_ENV_ID, resolver: nil, base_client: @base_client, namespace: nil) + assert_equal DESIRED_VALUE, evaluator.evaluate(context({})).unwrapped_value + end + + def test_date_after_with_current_time + past_time = Time.now.utc - 3600 # 1 hour in the past + config = create_prefab_config( + operator: PrefabProto::Criterion::CriterionOperator::PROP_AFTER, + property_name: 'prefab.current-time', + value_to_match: past_time.iso8601 + ) + evaluator = Prefab::CriteriaEvaluator.new(config, project_env_id: PROJECT_ENV_ID, resolver: nil, base_client: @base_client, namespace: nil) + assert_equal DESIRED_VALUE, evaluator.evaluate(context({})).unwrapped_value + end + private def string_list(values) From 135d0857598ca02da8de0a150b4f8a8ceacb1f0c Mon Sep 17 00:00:00 2001 From: James Kebinger Date: Mon, 14 Apr 2025 17:44:53 -0500 Subject: [PATCH 3/4] Update integration tests to get new version with tests of prefab.current-time handling --- test/prefab-cloud-integration-test-data | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/prefab-cloud-integration-test-data b/test/prefab-cloud-integration-test-data index 4ccd647..f6003c8 160000 --- a/test/prefab-cloud-integration-test-data +++ b/test/prefab-cloud-integration-test-data @@ -1 +1 @@ -Subproject commit 4ccd6472078b1ef0a8088cc2fb242c39939f8bf1 +Subproject commit f6003c87360f58064143011dfb02c2b00fd33f14 From 7001668c9cc6881f6a104c16bec7898c00f69772 Mon Sep 17 00:00:00 2001 From: James Kebinger Date: Mon, 14 Apr 2025 17:48:54 -0500 Subject: [PATCH 4/4] Remove unneded code that added prefab.current-time to context exported via to_proto --- lib/prefab/context.rb | 9 +-------- test/test_context.rb | 15 --------------- 2 files changed, 1 insertion(+), 23 deletions(-) diff --git a/lib/prefab/context.rb b/lib/prefab/context.rb index a03bb24..a7d0cde 100644 --- a/lib/prefab/context.rb +++ b/lib/prefab/context.rb @@ -200,12 +200,6 @@ def reportable_tree end def to_proto(namespace) - prefab_context = { - 'current-time' => ConfigValueWrapper.wrap(Prefab::TimeHelpers.now_in_ms) - } - - prefab_context['namespace'] = ConfigValueWrapper.wrap(namespace) if namespace&.length&.positive? - reportable_contexts = {} reportable_tree.each do |ctx| @@ -217,8 +211,7 @@ def to_proto(namespace) PrefabProto::ContextSet.new( contexts: reportable_contexts.map do |name, context| context.to_proto - end.concat([PrefabProto::Context.new(type: 'prefab', - values: prefab_context)]) + end ) end diff --git a/test/test_context.rb b/test/test_context.rb index a9f069b..9a1da38 100644 --- a/test/test_context.rb +++ b/test/test_context.rb @@ -141,14 +141,6 @@ def test_to_proto "id" => PrefabProto::ConfigValue.new(int: 2), "name" => PrefabProto::ConfigValue.new(string: "team-name") } - ), - - PrefabProto::Context.new( - type: "prefab", - values: { - 'current-time' => PrefabProto::ConfigValue.new(int: Prefab::TimeHelpers.now_in_ms), - 'namespace' => PrefabProto::ConfigValue.new(string: namespace) - } ) ] ), contexts.to_proto(namespace) @@ -226,13 +218,6 @@ def test_to_proto_with_parent "name" => PrefabProto::ConfigValue.new(string: "team-name") } ), - # via to_proto - PrefabProto::Context.new( - type: "prefab", - values: { - 'current-time' => PrefabProto::ConfigValue.new(int: Prefab::TimeHelpers.now_in_ms), - } - ) ] )