Make sure to link credit payment method on create and update

This commit is contained in:
Gaetan Craig-Riou
2026-02-27 16:58:53 +11:00
parent c67d47a773
commit b9b91620ef
4 changed files with 20 additions and 10 deletions

View File

@@ -148,7 +148,7 @@ class Enterprise < ApplicationRecord
after_create :set_default_contact
after_create :relate_to_owners_enterprises
after_create :add_credit_payment_method
after_save :add_credit_payment_method
after_rollback :restore_permalink
after_touch :touch_distributors

View File

@@ -501,7 +501,8 @@ RSpec.describe Enterprise do
describe "add_credit_payment_method" do
it "links credit payment method to the enterprise" do
expect(CreditPaymentMethod::LinkerService).to receive(:link)
# Due to various callbacks the enterprise gets updated twice after creation
expect(CreditPaymentMethod::LinkerService).to receive(:link).at_least(1)
create(:distributor_enterprise)
end
@@ -513,6 +514,15 @@ RSpec.describe Enterprise do
create(:supplier_enterprise)
end
end
context "when an enterprise becomes a distributor" do
it "links credit payment method to the enterprise" do
enterprise = create(:supplier_enterprise)
expect(CreditPaymentMethod::LinkerService).to receive(:link)
enterprise.update(sells: "own")
end
end
end
end

View File

@@ -93,11 +93,11 @@ RSpec.describe Spree::PaymentMethod::CustomerCredit do
around do |example|
# Customer is needed to create a purchase and a customer is linked to an enterprise.
# That means FactoryBot will create an enterprise, so we disable the after create callback
# That means FactoryBot will create an enterprise, so we disable the after save callback
# so that credit payment methods are not created.
Enterprise.skip_callback(:create, :after, :add_credit_payment_method)
Enterprise.skip_callback(:save, :after, :add_credit_payment_method)
example.run
Enterprise.set_callback(:create, :after, :add_credit_payment_method)
Enterprise.set_callback(:save, :after, :add_credit_payment_method)
end
it "returns an error" do
@@ -170,11 +170,11 @@ RSpec.describe Spree::PaymentMethod::CustomerCredit do
around do |example|
# Customer is needed to create a purchase and a customer is linked to an enterprise.
# That means FactoryBot will create an enterprise, so we disable the after create callback
# That means FactoryBot will create an enterprise, so we disable the after save callback
# so that credit payment methods are not created.
Enterprise.skip_callback(:create, :after, :add_credit_payment_method)
Enterprise.skip_callback(:save, :after, :add_credit_payment_method)
example.run
Enterprise.set_callback(:create, :after, :add_credit_payment_method)
Enterprise.set_callback(:save, :after, :add_credit_payment_method)
end
it "returns an error" do

View File

@@ -8,9 +8,9 @@ RSpec.describe CreditPaymentMethod::LinkerService do
around do |example|
# after_save call back will call the linker we are testing, we disable it to avoid
# unintended side effect
Enterprise.skip_callback(:create, :after, :add_credit_payment_method)
Enterprise.skip_callback(:save, :after, :add_credit_payment_method)
example.run
Enterprise.set_callback(:create, :after, :add_credit_payment_method)
Enterprise.set_callback(:save, :after, :add_credit_payment_method)
end
describe ".link" do