diff --git a/app/models/purchase.rb b/app/models/purchase.rb index 0b75156296..b86d6a153c 100644 --- a/app/models/purchase.rb +++ b/app/models/purchase.rb @@ -59,6 +59,7 @@ class Purchase < ApplicationRecord validates :amount_spent_in_cents, numericality: { greater_than: 0 } validate :total_equal_to_all_categories + validate :line_items_quantity_is_positive before_destroy :check_no_intervening_snapshot validates :amount_spent_on_diapers_cents, numericality: { greater_than_or_equal_to: 0 } @@ -140,4 +141,8 @@ def check_no_intervening_snapshot raise "We can't delete purchases entered before #{intervening.event_time.to_date}." end end + + def line_items_quantity_is_positive + line_items_quantity_is_at_least(1) + end end diff --git a/spec/models/purchase_spec.rb b/spec/models/purchase_spec.rb index 4dfee762a2..8accae1383 100644 --- a/spec/models/purchase_spec.rb +++ b/spec/models/purchase_spec.rb @@ -65,6 +65,20 @@ expect(d).not_to be_valid end + it "is not valid if any line item has zero quantity" do + item = create(:item) + p = build(:purchase) + p.line_items.build(item_id: item.id, quantity: 0) + expect(p).not_to be_valid + end + + it "is not valid if any line item has negative quantity" do + item = create(:item) + p = build(:purchase) + p.line_items.build(item_id: item.id, quantity: -1) + expect(p).not_to be_valid + end + it "is valid if all categories are positive and add up to the total" do d = build(:purchase, amount_spent_in_cents: 1150, amount_spent_on_diapers_cents: 200, diff --git a/spec/queries/low_inventory_query_spec.rb b/spec/queries/low_inventory_query_spec.rb index fd7454e851..5462607b01 100644 --- a/spec/queries/low_inventory_query_spec.rb +++ b/spec/queries/low_inventory_query_spec.rb @@ -34,7 +34,10 @@ context "when minimum_quantity is 0 and recommended_quantity is nil and item quantity is 0" do let(:item) { create :item, organization: organization } let(:minimum_quantity) { 0 } - let(:inventory_item_quantity) { 0 } + + before do + TestInventory.create_inventory(organization, { storage_location.id => { item.id => 0 } }) + end it { is_expected.to eq [] } end