Skip to content

Commit f9f077d

Browse files
committed
Add validation for money_raised in Donation model to ensure it is non-negative, and update related tests for validation errors in request specs.
1 parent 41a20ad commit f9f077d

File tree

3 files changed

+27
-1
lines changed

3 files changed

+27
-1
lines changed

app/models/donation.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@ class Donation < ApplicationRecord
6161
validates :manufacturer, presence:
6262
{ message: "must be specified since you chose '#{SOURCES[:manufacturer]}'" }, if: :from_manufacturer?
6363
validates :source, presence: true, inclusion: { in: SOURCES.values, message: "Must be a valid source." }
64+
validates :money_raised, numericality: { greater_than_or_equal_to: 0 }, allow_nil: true
6465
validate :line_items_quantity_is_positive
6566

6667
# TODO: move this to Organization.donations as an extension

spec/models/donation_spec.rb

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,12 @@
6363
d.line_items << build(:line_item, quantity: -1)
6464
expect(d).not_to be_valid
6565
end
66+
it "ensures that money_raised cannot be negative" do
67+
expect(build(:donation, money_raised: -100)).not_to be_valid
68+
expect(build(:donation, money_raised: 0)).to be_valid
69+
expect(build(:donation, money_raised: 100)).to be_valid
70+
expect(build(:donation, money_raised: nil)).to be_valid
71+
end
6672
end
6773

6874
context "Callbacks >" do

spec/requests/donations_requests_spec.rb

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,7 @@
106106
let(:manufacturer) { create(:manufacturer, organization:) }
107107
let(:source) { Donation::SOURCES[:manufacturer] }
108108
let(:issued_at) { Date.yesterday }
109+
let(:money_raised) { 5 }
109110

110111
let(:params) do
111112
{
@@ -114,7 +115,7 @@
114115
manufacturer_id: manufacturer.id,
115116
product_drive_id: product_drive.id,
116117
storage_location_id: storage_location.id,
117-
money_raised_in_dollars: 5,
118+
money_raised_in_dollars: money_raised,
118119
product_drive_participant_id: nil,
119120
comment: "",
120121
issued_at: issued_at,
@@ -144,6 +145,15 @@
144145
expect(flash[:error]).to include("Issue date can't be blank")
145146
end
146147
end
148+
149+
context "with negative money raised" do
150+
let(:money_raised) { -5 }
151+
152+
it "flashes the correct validation error" do
153+
post donations_path(params)
154+
expect(flash[:error]).to include("Money raised must be greater than or equal to 0")
155+
end
156+
end
147157
end
148158

149159
describe "PATCH #update" do
@@ -166,6 +176,15 @@
166176
expect(flash[:alert]).to include("Issue date can't be blank")
167177
end
168178
end
179+
180+
context "with negative money raised" do
181+
it "flashes the correct validation error" do
182+
donation_params[:money_raised_in_dollars] = -5
183+
put donation_path(params)
184+
185+
expect(flash[:alert]).to include("Money raised must be greater than or equal to 0")
186+
end
187+
end
169188
end
170189

171190
describe "GET #print" do

0 commit comments

Comments
 (0)