Skip to content

Commit

Permalink
Pull discardability/destroyability up to the Model
Browse files Browse the repository at this point in the history
  • Loading branch information
zspencer committed Dec 13, 2023
1 parent 740c4d4 commit aa0ef8c
Show file tree
Hide file tree
Showing 3 changed files with 54 additions and 3 deletions.
8 changes: 8 additions & 0 deletions app/furniture/marketplace/delivery_area.rb
Original file line number Diff line number Diff line change
Expand Up @@ -16,5 +16,13 @@ class DeliveryArea < Record

attribute :delivery_window
monetize :price_cents

def discardable?
persisted? && kept?
end

def destroyable?
persisted? && discarded? && orders.empty?
end
end
end
5 changes: 2 additions & 3 deletions app/furniture/marketplace/delivery_area_component.rb
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ def discard_button
end

def discard_button?
delivery_area.persisted? && delivery_area.kept? && policy(delivery_area).destroy?
delivery_area.discardable? && policy(delivery_area).destroy?
end

def destroy_button
Expand All @@ -50,8 +50,7 @@ def destroy_button
end

def destroy_button?
delivery_area.persisted? && policy(delivery_area).destroy? &&
delivery_area.discarded? && delivery_area.orders.empty?
delivery_area.destroyable? && policy(delivery_area).destroy?
end
end
end
44 changes: 44 additions & 0 deletions spec/furniture/marketplace/delivery_area_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,48 @@
it { is_expected.to have_many(:orders).inverse_of(:delivery_area) }
it { is_expected.to have_many(:carts).inverse_of(:delivery_area) }
it { is_expected.to have_many(:deliveries).inverse_of(:delivery_area) }

describe "#discardable?" do
subject(:delivery_area) { build(:marketplace_delivery_area) }

it { is_expected.not_to be_discardable }

context "when the delivery area is persisted" do
subject(:delivery_area) { create(:marketplace_delivery_area) }

it { is_expected.to be_discardable }

context "when the delivery area is discarded already" do
subject(:delivery_area) { create(:marketplace_delivery_area, :discarded) }

it { is_expected.not_to be_discardable }
end
end
end

describe "#destroyable?" do
subject(:delivery_area) { build(:marketplace_delivery_area) }

it { is_expected.not_to be_destroyable }

context "when a delivery area is persisted" do
subject(:delivery_area) { create(:marketplace_delivery_area) }

it { is_expected.not_to be_destroyable }

context "when the delivery area is discarded" do
subject(:delivery_area) { create(:marketplace_delivery_area, :discarded) }

it { is_expected.to be_destroyable }

context "when the delivery area has orders" do
subject(:delivery_area) { create(:marketplace_delivery_area, :discarded) }

before { create(:marketplace_order, delivery_area:) }

it { is_expected.not_to be_destroyable }
end
end
end
end
end

0 comments on commit aa0ef8c

Please sign in to comment.