Fix call to #record_and_log_error

This commit is contained in:
Pau Perez
2021-06-17 13:43:50 +02:00
parent b69aeae892
commit 827faef690
4 changed files with 42 additions and 4 deletions

View File

@@ -23,7 +23,7 @@ class PlaceProxyOrder
move_to_completion
send_placement_email
rescue StandardError => e
summarizer.record_and_log_error(:processing, e.message)
summarizer.record_and_log_error(:processing, order, e.message)
Bugsnag.notify(e, order: order)
end

View File

@@ -51,7 +51,8 @@ describe SubscriptionPlacementJob do
describe "performing the job" do
context "when unplaced proxy_orders exist" do
let!(:subscription) { create(:subscription, with_items: true) }
let!(:proxy_order) { create(:proxy_order, subscription: subscription, order: build(:order)) }
let(:order) { build(:order, distributor: create(:enterprise)) }
let!(:proxy_order) { create(:proxy_order, subscription: subscription, order: order) }
before do
allow(job).to receive(:proxy_orders) { ProxyOrder.where(id: proxy_order.id) }
@@ -73,6 +74,18 @@ describe SubscriptionPlacementJob do
expect(service).to have_received(:call)
end
it "records exceptions" do
order.line_items << build(:line_item)
summarizer = TestSummarizer.new
allow(OrderManagement::Subscriptions::Summarizer).to receive(:new).and_return(summarizer)
job.perform
expect(summarizer.recorded_issues[order.id])
.to eq("Errors: Cannot transition state via :next from :address (Reason(s): Items cannot be shipped)")
end
end
end

View File

@@ -8,7 +8,7 @@ describe PlaceProxyOrder do
subject { described_class.new(proxy_order, summarizer, logger, stock_changes_loader) }
let(:proxy_order) { create(:proxy_order, order: order) }
let(:order) { build(:order) }
let(:order) { build(:order, distributor: build(:enterprise)) }
let(:summarizer) { instance_double(OrderManagement::Subscriptions::Summarizer) }
let(:logger) { instance_double(JobLogger.logger.class, info: true) }
@@ -19,7 +19,7 @@ describe PlaceProxyOrder do
let!(:proxy_order) { create(:proxy_order, subscription: subscription, order: order) }
let(:stock_changes_loader) { lambda { {} } }
let(:summarizer) { instance_double(OrderManagement::Subscriptions::Summarizer, record_order: true, record_issue: true) }
let(:summarizer) { OrderManagement::Subscriptions::Summarizer.new }
before do
allow(SubscriptionMailer).to receive(:empty_email) { mail_mock }
@@ -31,6 +31,15 @@ describe PlaceProxyOrder do
expect(proxy_order.placed_at).to eq(Time.zone.now)
end
end
it "tracks exceptions" do
order.line_items << build(:line_item)
expect(summarizer).to receive(:record_and_log_error).with(:processing, order, kind_of(String))
expect(Bugsnag).to receive(:notify).with(kind_of(StandardError), order: order)
subject.call
end
end
describe "#send_placement_email" do

View File

@@ -0,0 +1,16 @@
# frozen_string_literal: true
# A fake summarizer that implements a more handy public API to reach out to its internal state,
# which greatly simplifyies integration testing.
class TestSummarizer < OrderManagement::Subscriptions::Summarizer
attr_reader :recorded_issues
def initialize
@recorded_issues = {}
super
end
def record_issue(_type, order, message = nil)
@recorded_issues[order.id] = message
end
end