1
0
mirror of https://github.com/fspc/bike-database.git synced 2025-02-23 09:33:23 -05:00

lk | add some tests for bike#available_for_freecyclery

This commit is contained in:
Louis Knapp 2016-05-12 21:34:35 -05:00
parent 2e8edce6ef
commit 87577ab14e
6 changed files with 42 additions and 13 deletions

View File

@ -7,6 +7,9 @@ class Bike < ActiveRecord::Base
validates :serial_number, presence: true validates :serial_number, presence: true
has_one :client has_one :client
FREECYCLERY = "Freecyclery"
SALE = "Sale"
def self.bike_types def self.bike_types
[ [
["BMX", "BMX"], ["BMX", "BMX"],
@ -35,8 +38,8 @@ class Bike < ActiveRecord::Base
end end
def self.available_for_freecyclery def self.available_for_freecyclery
assigned_bikes = Client.all.select{|c| !c.bike_id.nil?}.map(&:bike) assigned_bikes = Client.all.includes(:bike).select{|c| !c.bike_id.nil?}.map(&:bike)
all_freecyclery_bikes = Bike.order(log_number: :desc).select{|bike| bike.purpose == "Freecyclery"} all_freecyclery_bikes = Bike.where(purpose: FREECYCLERY).order(log_number: :desc)
all_freecyclery_bikes - assigned_bikes all_freecyclery_bikes - assigned_bikes
end end

View File

@ -1,11 +0,0 @@
FactoryGirl.define do
factory :bike do
sequence(:log_number)
brand "Windsor"
model "Clockwork"
bike_type "Fixed Gear"
color "Black"
sequence(:serial_number)
sequence(:bike_index_id)
end
end

19
spec/factories/bikes.rb Normal file
View File

@ -0,0 +1,19 @@
FactoryGirl.define do
factory :bike do
sequence(:log_number)
brand "Schwinn"
model "Madison"
bike_type "Fixed Gear"
color "Yellow"
sequence(:serial_number)
sequence(:bike_index_id)
end
trait :sale do
purpose Bike::SALE
end
trait :freecyclery do
purpose Bike::FREECYCLERY
end
end

View File

@ -12,4 +12,22 @@ describe Bike do
expect(bike.post_to_bike_index).to be_truthy expect(bike.post_to_bike_index).to be_truthy
end end
end end
describe "#available_for_freecyclery" do
it "does not return bikes that are assigned to clients" do
bike = create :bike, :freecyclery
create :client, bike_id: bike.id
expect(Bike.available_for_freecyclery).to be_empty
end
it "does not return sales bikes" do
bike = create :bike, :sale
create :client, bike_id: bike.id
expect(Bike.available_for_freecyclery).to be_empty
end
it "does return bikes without clients" do
bike = create :bike, :freecyclery
expect(Bike.available_for_freecyclery).to include(bike)
end
end
end end