From 28dde869601a70984be23cd00cb4c683ae594c8d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Turbelin?= Date: Fri, 31 Oct 2025 16:23:02 +0100 Subject: [PATCH 1/3] Repair ProxyOrder to support order cycle without closing time --- app/models/proxy_order.rb | 1 + spec/models/proxy_order_spec.rb | 69 +++++++++++++++++++++++++++++++++ 2 files changed, 70 insertions(+) diff --git a/app/models/proxy_order.rb b/app/models/proxy_order.rb index 5a017bb1e6..97d3a4bbe8 100644 --- a/app/models/proxy_order.rb +++ b/app/models/proxy_order.rb @@ -76,6 +76,7 @@ class ProxyOrder < ApplicationRecord def cart? order&.state == 'complete' && + order_cycle.orders_close_at.present? && order_cycle.orders_close_at > Time.zone.now end diff --git a/spec/models/proxy_order_spec.rb b/spec/models/proxy_order_spec.rb index f3117ff16d..2fe552b28d 100644 --- a/spec/models/proxy_order_spec.rb +++ b/spec/models/proxy_order_spec.rb @@ -206,6 +206,75 @@ RSpec.describe ProxyOrder do end end + describe "#state" do + subject(:proxy_order) { build(:proxy_order, subscription:, order:, order_cycle:) } + + let(:order) { build(:order) } + let(:subscription) { build(:subscription) } + let(:order_cycle) { build(:simple_order_cycle) } + + context "when the proxy order is canceled" do + it "returns 'canceled'" do + proxy_order.canceled_at = Time.zone.now + expect(proxy_order.state).to eq('canceled') + end + end + + context "when the order is not present" do + let(:order) { nil } + + it "returns 'canceled'" do + expect(proxy_order.state).to eq('pending') + end + + context "when the subscription is paused" do + it "returns 'paused'" do + subscription.paused_at = Time.zone.now + expect(proxy_order.state).to eq('paused') + end + end + end + + context "when the order cycle is not yet open" do + let(:order_cycle) { build(:order_cycle, orders_open_at: 2.days.from_now) } + + it "returns 'cart'" do + expect(proxy_order.state).to eq('pending') + end + + context "when the subscription is not paused" do + it "returns 'pending'" do + expect(proxy_order.state).to eq('pending') + end + end + end + + context "when the order is complete" do + let(:order) { build(:completed_order_with_totals) } + + context "when the order cycle is already closed" do + it "returns 'complete'" do + order_cycle.orders_close_at = 2.days.ago + expect(proxy_order.state).to eq('complete') + end + end + + context "when the order cycle is still open" do + it "returns 'cart'" do + order_cycle.orders_close_at = 2.days.from_now + expect(proxy_order.state).to eq('cart') + end + end + + context "when the order cycle does not have a closing date" do + it "returns 'cart'" do + order_cycle.orders_close_at = nil + expect(proxy_order.state).to eq('complete') + end + end + end + end + private def expect_cancelled_now(subject) From 7010cda9f75eb041a5b21716afa3297c1fd6ce26 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Turbelin?= Date: Mon, 2 Mar 2026 22:07:45 +0100 Subject: [PATCH 2/3] Tidy up the tests --- spec/models/proxy_order_spec.rb | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/spec/models/proxy_order_spec.rb b/spec/models/proxy_order_spec.rb index 2fe552b28d..b263db72f2 100644 --- a/spec/models/proxy_order_spec.rb +++ b/spec/models/proxy_order_spec.rb @@ -223,7 +223,7 @@ RSpec.describe ProxyOrder do context "when the order is not present" do let(:order) { nil } - it "returns 'canceled'" do + it "returns 'pending'" do expect(proxy_order.state).to eq('pending') end @@ -238,7 +238,7 @@ RSpec.describe ProxyOrder do context "when the order cycle is not yet open" do let(:order_cycle) { build(:order_cycle, orders_open_at: 2.days.from_now) } - it "returns 'cart'" do + it "returns 'pending'" do expect(proxy_order.state).to eq('pending') end @@ -267,7 +267,7 @@ RSpec.describe ProxyOrder do end context "when the order cycle does not have a closing date" do - it "returns 'cart'" do + it "returns 'complete'" do order_cycle.orders_close_at = nil expect(proxy_order.state).to eq('complete') end From 6cacde837d7d58992738c5d2bb0063e6e5ac8b54 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Turbelin?= Date: Tue, 3 Mar 2026 14:27:20 +0100 Subject: [PATCH 3/3] Remove duplicated test --- spec/models/proxy_order_spec.rb | 6 ------ 1 file changed, 6 deletions(-) diff --git a/spec/models/proxy_order_spec.rb b/spec/models/proxy_order_spec.rb index b263db72f2..817d0acd75 100644 --- a/spec/models/proxy_order_spec.rb +++ b/spec/models/proxy_order_spec.rb @@ -241,12 +241,6 @@ RSpec.describe ProxyOrder do it "returns 'pending'" do expect(proxy_order.state).to eq('pending') end - - context "when the subscription is not paused" do - it "returns 'pending'" do - expect(proxy_order.state).to eq('pending') - end - end end context "when the order is complete" do