From 628810eb33c60c91d1ed0d406727fd6226e45dfc Mon Sep 17 00:00:00 2001 From: Gaetan Craig-Riou Date: Tue, 24 Feb 2026 13:25:38 +1100 Subject: [PATCH] Fix spec to work with the internal payment method --- app/controllers/admin/enterprises_controller.rb | 14 ++++++++------ lib/tasks/enterprises.rake | 3 +++ spec/models/enterprise_spec.rb | 8 ++++++++ .../api/v1/customer_account_transaction_spec.rb | 2 +- spec/services/order_cycles/form_service_spec.rb | 6 ++++-- .../available_payment_methods_service_spec.rb | 14 +++++++------- .../orders/customer_credit_service_spec.rb | 5 ++++- spec/services/sets/model_set_spec.rb | 4 ++++ spec/system/admin/order_cycles/simple_spec.rb | 9 +++++++-- spec/system/admin/payment_method_spec.rb | 7 ++++++- spec/system/consumer/checkout/summary_spec.rb | 1 + 11 files changed, 53 insertions(+), 20 deletions(-) diff --git a/app/controllers/admin/enterprises_controller.rb b/app/controllers/admin/enterprises_controller.rb index 2e50e68185..4925573903 100644 --- a/app/controllers/admin/enterprises_controller.rb +++ b/app/controllers/admin/enterprises_controller.rb @@ -162,9 +162,13 @@ module Admin end def destroy - if @object.destroy + @object.transaction do + # Destroy linked payment methods so we remove the default customer credit payment methods + @object.distributor_payment_methods.destroy_all + @object.destroy! flash.now[:success] = flash_message_for(@object, :successfully_removed) - else + rescue StandardError + Rails.logger.error @object.errors.full_messages.to_sentence flash.now[:error] = @object.errors.full_messages.to_sentence end @@ -176,7 +180,7 @@ module Admin protected def delete_custom_tab - @object.custom_tab.destroy if @object.custom_tab.present? + @object.custom_tab.presence&.destroy enterprise_params.delete(:custom_tab_attributes) end @@ -239,9 +243,7 @@ module Admin enterprises = OpenFoodNetwork::OrderCyclePermissions.new(spree_current_user, @order_cycle) .visible_enterprises - if enterprises.present? - enterprises.includes(supplied_products: [:variants, :image]) - end + enterprises.presence&.includes(supplied_products: [:variants, :image]) when :index if spree_current_user.admin? OpenFoodNetwork::Permissions.new(spree_current_user). diff --git a/lib/tasks/enterprises.rake b/lib/tasks/enterprises.rake index 86c767dddd..2497091a11 100644 --- a/lib/tasks/enterprises.rake +++ b/lib/tasks/enterprises.rake @@ -9,6 +9,9 @@ namespace :ofn do desc 'remove the specified enterprise' task :remove_enterprise, [:enterprise_id] => :environment do |_task, args| enterprise = Enterprise.find(args.enterprise_id) + # Enterprise have two internal credit payment methods by default, we destroy the link to allow + # removing the enterprise + enterprise.distributor_payment_methods.destroy_all enterprise.destroy end diff --git a/spec/models/enterprise_spec.rb b/spec/models/enterprise_spec.rb index 947c5be95d..6eb254b4d6 100644 --- a/spec/models/enterprise_spec.rb +++ b/spec/models/enterprise_spec.rb @@ -31,6 +31,8 @@ RSpec.describe Enterprise do u.enterprise_roles.build(enterprise: e).save! role = e.enterprise_roles.first + # Delete the default customer credit payment method link + e.distributor_payment_methods.destroy_all e.destroy expect(EnterpriseRole.where(id: role.id)).to be_empty end @@ -51,6 +53,8 @@ RSpec.describe Enterprise do er1 = create(:enterprise_relationship, parent: e, child: e_other) er2 = create(:enterprise_relationship, child: e, parent: e_other) + # Delete the default customer credit payment method link + e.distributor_payment_methods.destroy_all e.destroy expect(EnterpriseRelationship.where(id: [er1, er2])).to be_empty @@ -85,6 +89,8 @@ RSpec.describe Enterprise do create_list(:distributor_shipping_method, 2, distributor: enterprise) expect do + # Delete the default customer credit payment method link + enterprise.distributor_payment_methods.destroy_all enterprise.destroy expect(enterprise.errors.full_messages).to eq( ["Cannot delete record because dependent distributor shipping methods exist"] @@ -111,6 +117,8 @@ RSpec.describe Enterprise do end expect do + # Delete the default customer credit payment method link + enterprise.distributor_payment_methods.destroy_all enterprise.destroy expect(enterprise.errors.full_messages).to eq( ["Cannot delete record because dependent vouchers exist"] diff --git a/spec/requests/api/v1/customer_account_transaction_spec.rb b/spec/requests/api/v1/customer_account_transaction_spec.rb index 324ec68146..02312d1b07 100644 --- a/spec/requests/api/v1/customer_account_transaction_spec.rb +++ b/spec/requests/api/v1/customer_account_transaction_spec.rb @@ -6,7 +6,7 @@ RSpec.describe "CustomerAccountTransactions", swagger_doc: "v1.yaml", feature: : let!(:enterprise) { create(:enterprise) } # Paymnent method will be created when the enterprise is created let(:payment_method) { - Spree::PaymentMethod.find_by(name: Rails.application.config.api_payment_method[:name]) + Spree::PaymentMethod.internal.find_by(name: Rails.application.config.api_payment_method[:name]) } let(:customer) { create(:customer) } diff --git a/spec/services/order_cycles/form_service_spec.rb b/spec/services/order_cycles/form_service_spec.rb index 514bdb5201..2bc9a3dbbf 100644 --- a/spec/services/order_cycles/form_service_spec.rb +++ b/spec/services/order_cycles/form_service_spec.rb @@ -223,8 +223,10 @@ RSpec.describe OrderCycles::FormService do let!(:distributor){ create(:distributor_enterprise) } let!(:payment_method){ create(:payment_method, distributors: [distributor]) } let!(:payment_method2){ create(:payment_method, distributors: [distributor]) } - let!(:distributor_payment_method){ distributor.distributor_payment_methods.first.id } - let!(:distributor_payment_method2){ distributor.distributor_payment_methods.second.id } + let!(:distributor_payment_method){ + distributor.distributor_payment_methods.second_to_last.id + } + let!(:distributor_payment_method2){ distributor.distributor_payment_methods.last.id } let!(:supplier){ create(:supplier_enterprise) } context "the submitter is a coordinator" do diff --git a/spec/services/orders/available_payment_methods_service_spec.rb b/spec/services/orders/available_payment_methods_service_spec.rb index 18761c9958..fc3c486319 100644 --- a/spec/services/orders/available_payment_methods_service_spec.rb +++ b/spec/services/orders/available_payment_methods_service_spec.rb @@ -82,14 +82,14 @@ RSpec.describe Orders::AvailablePaymentMethodsService do order_cycle = create(:distributor_order_cycle, distributors: [distributor_i, distributor_ii]) order_cycle.selected_distributor_payment_methods << [ - distributor_i.distributor_payment_methods.first, - distributor_ii.distributor_payment_methods.first, + distributor_i.distributor_payment_methods.last, + distributor_ii.distributor_payment_methods.last ] order = build(:order, distributor: distributor_i, order_cycle:) available_payment_methods = Orders::AvailablePaymentMethodsService.new(order).to_a - expect(available_payment_methods).to eq [payment_method_i] + expect(available_payment_methods).to eq [payment_method_ii] end end end @@ -242,14 +242,14 @@ RSpec.describe Orders::AvailablePaymentMethodsService do d1.payment_methods << payment_method2 d2.payment_methods << payment_method d2.payment_methods << payment_method2 - oc.selected_distributor_payment_methods << d1.distributor_payment_methods.first - oc.selected_distributor_payment_methods << d1.distributor_payment_methods.second - oc.selected_distributor_payment_methods << d2.distributor_payment_methods.first + oc.selected_distributor_payment_methods << d1.distributor_payment_methods.second_to_last + oc.selected_distributor_payment_methods << d1.distributor_payment_methods.last + oc.selected_distributor_payment_methods << d2.distributor_payment_methods.last } it do order = build(:order, distributor: d2, order_cycle: oc) order_available_payment_methods = Orders::AvailablePaymentMethodsService.new(order).to_a - expect(order_available_payment_methods).to eq([d2.payment_methods.first]) + expect(order_available_payment_methods).to eq([d2.payment_methods.last]) end end end diff --git a/spec/services/orders/customer_credit_service_spec.rb b/spec/services/orders/customer_credit_service_spec.rb index 87c64741a4..02a806917f 100644 --- a/spec/services/orders/customer_credit_service_spec.rb +++ b/spec/services/orders/customer_credit_service_spec.rb @@ -103,11 +103,14 @@ RSpec.describe Orders::CustomerCreditService do context "when credit payment method is missing" do before do # Add credit + payment_method = order.customer.enterprise.payment_methods.internal.find_by( + name: Rails.application.config.api_payment_method[:name] + ) create( :customer_account_transaction, amount: 5.00, customer: order.customer, - payment_method: credit_payment_method + payment_method: ) credit_payment_method.destroy! end diff --git a/spec/services/sets/model_set_spec.rb b/spec/services/sets/model_set_spec.rb index d63acd0ad5..4d1096166b 100644 --- a/spec/services/sets/model_set_spec.rb +++ b/spec/services/sets/model_set_spec.rb @@ -32,6 +32,10 @@ RSpec.describe Sets::ModelSet do it "destroys deleted models" do e1 = create(:enterprise) e2 = create(:enterprise) + # Enterprise have 2 internal credit payment method, we need to destroy the link for + # the enterprise to be deletable + e1.distributor_payment_methods.destroy_all + e2.distributor_payment_methods.destroy_all attributes = { collection_attributes: { '1' => { id: e1.id, name: 'deleteme' }, '2' => { id: e2.id, name: 'e2' } } } diff --git a/spec/system/admin/order_cycles/simple_spec.rb b/spec/system/admin/order_cycles/simple_spec.rb index d3dbb1b34e..dc5743c394 100644 --- a/spec/system/admin/order_cycles/simple_spec.rb +++ b/spec/system/admin/order_cycles/simple_spec.rb @@ -248,6 +248,7 @@ RSpec.describe ' expect(page).to have_selector 'td.shops', text: distributor_unmanaged.name end + # TODO it "creating a new order cycle" do distributor_managed.update_attribute(:enable_subscriptions, true) visit admin_order_cycles_path @@ -923,9 +924,13 @@ RSpec.describe ' private def expect_payment_methods_to_be_checked_for(distributor) - distributor.distributor_payment_method_ids.each do |distributor_payment_method_id| + # Exclude internal payment method + distributor_payment_methods = distributor.distributor_payment_methods.reject { |dpm| + dpm.payment_method.nil? + } + distributor_payment_methods.each do |distributor_payment_method| expect(page).to have_checked_field( - "order_cycle_selected_distributor_payment_method_ids_#{distributor_payment_method_id}" + "order_cycle_selected_distributor_payment_method_ids_#{distributor_payment_method.id}" ) end end diff --git a/spec/system/admin/payment_method_spec.rb b/spec/system/admin/payment_method_spec.rb index 2ee60b3c2b..f1abf54fec 100644 --- a/spec/system/admin/payment_method_spec.rb +++ b/spec/system/admin/payment_method_spec.rb @@ -113,7 +113,12 @@ RSpec.describe ' end it "checking a single distributor is checked by default" do - 2.times.each { Enterprise.last.destroy } + 2.times.each do + enterprise = Enterprise.last + # Delete the default customer credit payment method + enterprise.distributor_payment_methods.destroy_all + enterprise.destroy! + end login_as_admin visit spree.new_admin_payment_method_path expect(page).to have_field "payment_method_distributor_ids_#{@distributors[0].id}", diff --git a/spec/system/consumer/checkout/summary_spec.rb b/spec/system/consumer/checkout/summary_spec.rb index 594e3a5439..e1137730f2 100644 --- a/spec/system/consumer/checkout/summary_spec.rb +++ b/spec/system/consumer/checkout/summary_spec.rb @@ -388,6 +388,7 @@ RSpec.describe "As a consumer, I want to checkout my order" do let(:payment_amount) { 10.00 } before do + create(:payment_method, distributors: [distributor]) create( :customer_account_transaction, amount: 100,