Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion admin/spec/features/stores_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@

it "lists stores and allows deleting them" do
create(:store, name: "B2C Store")
create(:store, name: "B2B Store")
create(:store, name: "B2B Store", default: true)

visit "/admin/stores"
expect(page).to have_content("B2C Store")
Expand Down
3 changes: 2 additions & 1 deletion core/app/models/spree/store.rb
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ class Store < Spree::Base
self.allowed_ransackable_attributes = %w[name url code]

before_save :ensure_default_exists_and_is_unique
before_destroy :validate_not_default
before_destroy :validate_not_default, prepend: true

enum :reverse_charge_status, {
disabled: 0,
Expand Down Expand Up @@ -73,6 +73,7 @@ def ensure_default_exists_and_is_unique
def validate_not_default
if default
errors.add(:base, :cannot_destroy_default_store)
throw :abort
end
end
end
Expand Down
20 changes: 20 additions & 0 deletions core/spec/models/spree/store_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -136,4 +136,24 @@
expect { Spree::Store.new(reverse_charge_status: :invalid_status) }.to raise_error(ArgumentError)
end
end

describe '#validate_not_default' do
context 'when deleting a default store' do
it 'prevents deletion' do
store = create(:store, default: true)
expect(store.destroy).to eq false
expect(store.errors.full_messages.join).to match(/Cannot destroy/)
expect { store.reload }.not_to raise_error
end
end

context 'when deleting a non-default store' do
it 'allows deletion' do
create(:store, default: true)
store = create(:store, default: false)
expect(store.destroy).to be_truthy
expect { store.reload }.to raise_error(ActiveRecord::RecordNotFound)
end
end
end
end
Loading