Skip to content

Commit d22e9be

Browse files
committed
Add tests for configurable mergeable orders finder
Adds specs to ensure a custom `mergeable_orders_finder_class` is used when configured, verifies the default finder, and tests `MergeableOrdersFinder#call` for correct order filtering behavior. Signed-off-by: Thukten Singye <[email protected]>
1 parent 01f451b commit d22e9be

File tree

3 files changed

+67
-0
lines changed

3 files changed

+67
-0
lines changed

core/spec/lib/spree/app_configuration_spec.rb

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,10 @@
4848
expect(prefs.promotions).to be_a Spree::Core::NullPromotionConfiguration
4949
end
5050

51+
it 'uses mergeable orders finder class by default' do
52+
expect(prefs.mergeable_orders_finder_class).to eq Spree::MergeableOrdersFinder
53+
end
54+
5155
context "deprecated preferences" do
5256
around do |example|
5357
Spree.deprecator.silence do
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
# frozen_string_literal: true
2+
3+
require 'rails_helper'
4+
5+
module Spree
6+
RSpec.describe MergeableOrdersFinder do
7+
let(:user) { create(:user) }
8+
let(:store) { create(:store) }
9+
let(:current_order) { create(:order, user: user, store: store) }
10+
let(:subject) { Spree::MergeableOrdersFinder.new(user: user, store: store, current_order: current_order) }
11+
12+
describe '#call' do
13+
let!(:incomplete_order1) { create(:order, user: user, store: store, state: 'cart') }
14+
let!(:incomplete_order2) { create(:order, user: user, store: store, state: 'address') }
15+
let!(:complete_order) { create(:order, user: user, store: store, state: 'complete').touch(:completed_at) }
16+
let!(:other_store_order) { create(:order, user: user, state: 'cart') }
17+
18+
it 'returns incomplete orders from the same store' do
19+
orders = subject.call
20+
expect(orders).to include(incomplete_order1, incomplete_order2)
21+
expect(orders).not_to include(current_order, complete_order, other_store_order)
22+
end
23+
end
24+
end
25+
end

core/spec/models/spree/order_spec.rb

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -422,6 +422,44 @@ def merge!(other_order, user = nil)
422422
expect(order1.merge!(order2, user)).to eq([order1, order2, user])
423423
end
424424
end
425+
426+
describe 'mergeable_orders_finder_class customization' do
427+
let(:user) { create(:user) }
428+
let(:store) { create(:store) }
429+
let(:current_order) { create(:order, user: user, store: store) }
430+
431+
before do
432+
class TestMergeableOrdersFinder
433+
def initialize(user:, store:, current_order:)
434+
@user = user
435+
@store = store
436+
@current_order = current_order
437+
end
438+
439+
def call
440+
@user.orders.by_store(@store).where.not(id: @current_order.id).where('created_at > ?', 7.days.ago)
441+
end
442+
end
443+
Spree::Config.mergeable_orders_finder_class = TestMergeableOrdersFinder
444+
end
445+
446+
subject(:finder) do
447+
Spree::Config.mergeable_orders_finder_class.new(
448+
user: user,
449+
store: store,
450+
current_order: current_order
451+
)
452+
end
453+
454+
it 'uses the configured mergeable orders finder' do
455+
old_order = create(:order, user: user, store: store, created_at: 8.days.ago)
456+
recent_order = create(:order, user: user, store: store, created_at: 3.days.ago)
457+
458+
orders = finder.call
459+
expect(orders).to include(recent_order)
460+
expect(orders).not_to include(old_order, current_order)
461+
end
462+
end
425463
end
426464

427465
describe "#ensure_updated_shipments" do

0 commit comments

Comments
 (0)