From 4d1cdea36b9f190b622f667571ac7a3e1decc36c Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 24 Sep 2025 19:41:46 +0000 Subject: [PATCH 1/2] Initial plan From 89380f038ae78fb9c7e0b62cdf899034e04b87b8 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 24 Sep 2025 19:54:13 +0000 Subject: [PATCH 2/2] Fix future prices issue in PublicOffer::Product lowest price calculation Co-authored-by: andrzejkrzywda <2847+andrzejkrzywda@users.noreply.github.com> --- .../public_offer/register_lowest_price.rb | 2 +- .../public_offer/product_price_changed_test.rb | 16 ++++++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/rails_application/app/read_models/public_offer/register_lowest_price.rb b/rails_application/app/read_models/public_offer/register_lowest_price.rb index 7d47d6c8b..5acfd35ea 100644 --- a/rails_application/app/read_models/public_offer/register_lowest_price.rb +++ b/rails_application/app/read_models/public_offer/register_lowest_price.rb @@ -41,7 +41,7 @@ def project_price_changes(product_id) end def find_border_event(price_changes) - price_changes.reverse.find { |price_change| !recent_event?(price_change) } + price_changes.reverse.find { |price_change| !recent_event?(price_change) && !future_event?(price_change) } end def recent_event?(price_change) diff --git a/rails_application/test/public_offer/product_price_changed_test.rb b/rails_application/test/public_offer/product_price_changed_test.rb index 2b82214cb..90c068944 100644 --- a/rails_application/test/public_offer/product_price_changed_test.rb +++ b/rails_application/test/public_offer/product_price_changed_test.rb @@ -95,6 +95,22 @@ def test_takes_last_event_when_no_events_in_last_30_days assert_equal 45, Product.find(product_id).lowest_recent_price end + def test_future_price_not_selected_as_border_event_even_when_lowest + product_id = SecureRandom.uuid + run_command( + ProductCatalog::RegisterProduct.new( + product_id: product_id, + ) + ) + + # Set an old price (will be border event candidate) + set_past_price(product_id, 100, 35.days.ago) + # Set a very low future price that should not be used as border event + set_future_price(product_id, 5, 10.days.from_now) + + assert_equal 50, Product.find(product_id).lowest_recent_price + end + private def prepare_product