Interesting. I solved the issue finding a post from a person with the same
error while trying to test. Issue was that i was trying to create an
invalid object before I could test it. So instead, I assigned a valid
object using Factory girl to a local variable then tested that the save was
false and this resolved my issue.
On Thursday, August 22, 2013 11:24:15 AM UTC-4, Vell wrote:
>
> Hello all,
>
> I am currently writing model tests in rails 4. I am attempting to add an
> error to a reservation object if the total number of reservations for a
> given date and time has reached a pre-determined limit.
>
> When my test runs, it is hitting the appropriate code but it is raising
> the following error as opposed to just giving me an error in the object
> that I can use.
>
> ActiveRecord::RecordInvalid: Validation failed: Reservation limit reached
> for this time slot
>
> test/models/reservation_test.rb:29:in `block (2 levels) in
> <class:ReservationTest>'
>
> I was wondering if anyone can give me an ideas of how to deal with this.
>
> My test environment is using shoulda, faker, and factory_girl
>
> test/models/reservation_test.rb:
>
> setup do
>
> List.create(name: 'reservation_limit', values: 20)
>
> @reservation = FactoryGirl.build(:reservation)
>
> end
>
>
> should "remove unavailable times if reservation limit for time slot is
> full" do
>
> 20.times{ FactoryGirl.create :reservation }
>
> assert_equal false, FactoryGirl.create(:reservation), "reservation
> was created after total reservation for time slot was reached."
>
> end
>
>
> app/models/reservation.rb
>
> def check_reservation_time
>
> errors.add(:base, "Can't set reservation to a time before 5pm.") if
> parse_time(start_time) < parse_time("17:00")
>
> errors.add(:base, "Can't set reservation to a time after 8pm.") if
> parse_time(start_time) > parse_time("20:00")
>
> errors.add(:base, "Reservation limit reached for this time slot") if
> reservation_limit_reached?(Reservation.where("start_date = ? and start_time
> = ?", self.start_date, self.start_time))
>
> end
>
>
> def reservation_limit_reached?(reservations)
>
> reservations.size >= List.where(name:
> 'reservation_limit').first.values.to_i
>
> end
>
>
> I am told I can use `rescue_from ActiveRecord::RecordInvalid` but my
> research is pointing me to that only working in the controller so I wasn't
> sure how that would help me in a model test.
>
> Any ideas or help is appreciated.
>
> Thanks.
>
>
--
You received this message because you are subscribed to the Google Groups "Ruby
on Rails: Talk" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/rubyonrails-talk/793557e1-7d7c-4beb-b4bb-ed778dbbe0c2%40googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.