Skip to content

Commit fc44726

Browse files
authored
Merge pull request #6199 from SuperGoodSoft/order-confirmation-mailer-subscriber
Move OrderMailerSubscriber#send_confirmation_email
2 parents 36c2646 + 38a9d36 commit fc44726

File tree

5 files changed

+76
-38
lines changed

5 files changed

+76
-38
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
# frozen_string_literal: true
2+
3+
module Spree
4+
# Mailing after {Spree::Order} is confirmed.
5+
class OrderConfirmationMailerSubscriber
6+
include Omnes::Subscriber
7+
8+
handle :order_finalized,
9+
with: :send_confirmation_email,
10+
id: :spree_order_mailer_send_confirmation_email
11+
12+
# Sends confirmation email to the user.
13+
#
14+
# @param event [Omnes::UnstructuredEvent]
15+
def send_confirmation_email(event)
16+
order = event[:order]
17+
unless order.confirmation_delivered?
18+
Spree::Config.order_mailer_class.confirm_email(order).deliver_later
19+
order.update_column(:confirmation_delivered, true)
20+
end
21+
end
22+
end
23+
end

core/app/subscribers/spree/order_mailer_subscriber.rb

+4-15
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,13 @@
11
# frozen_string_literal: true
22

33
module Spree
4-
# Mailing after events on a {Spree::Order}
54
class OrderMailerSubscriber
65
include Omnes::Subscriber
76

8-
handle :order_finalized,
9-
with: :send_confirmation_email,
10-
id: :spree_order_mailer_send_confirmation_email
11-
12-
# Sends confirmation email to the user
13-
#
14-
# @param event [Omnes::UnstructuredEvent]
15-
def send_confirmation_email(event)
16-
order = event[:order]
17-
unless order.confirmation_delivered?
18-
Spree::Config.order_mailer_class.confirm_email(order).deliver_later
19-
order.update_column(:confirmation_delivered, true)
20-
end
21-
end
7+
def send_confirmation_email(_event) = nil
8+
deprecate send_confirmation_email:
9+
"Use Spree::OrderConfirmationMailerSubscriber#send_confirmation_email instead",
10+
deprecator: Spree.deprecator
2211

2312
def send_reimbursement_email(_event) = nil
2413
deprecate send_reimbursement_email:

core/lib/spree/core/engine.rb

+1-1
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ class Engine < ::Rails::Engine
7171
reimbursement_errored
7272
].each { |event_name| Spree::Bus.register(event_name) }
7373

74-
Spree::OrderMailerSubscriber.new.subscribe_to(Spree::Bus)
74+
Spree::OrderConfirmationMailerSubscriber.new.subscribe_to(Spree::Bus)
7575
Spree::ReimbursementMailerSubscriber.new.subscribe_to(Spree::Bus)
7676
end
7777
end
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
# frozen_string_literal: true
2+
3+
require 'rails_helper'
4+
require 'action_mailer'
5+
6+
RSpec.describe Spree::OrderConfirmationMailerSubscriber do
7+
let(:bus) { Omnes::Bus.new }
8+
9+
before do
10+
bus.register(:order_finalized)
11+
12+
described_class.new.subscribe_to(bus)
13+
end
14+
15+
describe 'on :on_order_finalized' do
16+
it 'sends confirmation email' do
17+
order = create(:order, confirmation_delivered: false)
18+
19+
expect(Spree::OrderMailer).to receive(:confirm_email).and_call_original
20+
21+
bus.publish(:order_finalized, order:)
22+
end
23+
24+
it 'marks the order as having the confirmation email delivered' do
25+
order = create(:order, confirmation_delivered: false)
26+
27+
bus.publish(:order_finalized, order:)
28+
29+
expect(order.confirmation_delivered).to be(true)
30+
end
31+
32+
it "doesn't send confirmation email if already sent" do
33+
order = build(:order, confirmation_delivered: true)
34+
35+
expect(Spree::OrderMailer).not_to receive(:confirm_email)
36+
37+
bus.publish(:order_finalized, order:)
38+
end
39+
end
40+
end

core/spec/subscribers/spree/order_mailer_subscriber_spec.rb

+8-22
Original file line numberDiff line numberDiff line change
@@ -12,29 +12,15 @@
1212
described_class.new.subscribe_to(bus)
1313
end
1414

15-
describe 'on :on_order_finalized' do
16-
it 'sends confirmation email' do
17-
order = create(:order, confirmation_delivered: false)
15+
describe "#send_confirmation_email" do
16+
subject { described_class.new.send_confirmation_email({}) }
1817

19-
expect(Spree::OrderMailer).to receive(:confirm_email).and_call_original
20-
21-
bus.publish(:order_finalized, order:)
22-
end
23-
24-
it 'marks the order as having the confirmation email delivered' do
25-
order = create(:order, confirmation_delivered: false)
26-
27-
bus.publish(:order_finalized, order:)
28-
29-
expect(order.confirmation_delivered).to be(true)
30-
end
31-
32-
it "doesn't send confirmation email if already sent" do
33-
order = build(:order, confirmation_delivered: true)
34-
35-
expect(Spree::OrderMailer).not_to receive(:confirm_email)
36-
37-
bus.publish(:order_finalized, order:)
18+
it "results in a deprecation warning" do
19+
if ENV["SOLIDUS_RAISE_DEPRECATIONS"]
20+
expect { subject }.to raise_error(ActiveSupport::DeprecationException)
21+
else
22+
expect(subject).to eq nil
23+
end
3824
end
3925
end
4026

0 commit comments

Comments
 (0)