Skip to content

Instantly share code, notes, and snippets.

@theCrab
Last active December 20, 2015 08:28
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save theCrab/511fb75d6ed870a0e00d to your computer and use it in GitHub Desktop.
Save theCrab/511fb75d6ed870a0e00d to your computer and use it in GitHub Desktop.
class Vehicle
include DataMapper::Resource
property :id, UUID, key: true
property :registration, String, required: true
property :make, String, required: true
property :type, String, required: true
property :date_of_reg, Date, required: true
property :taxi_plate, String, required: true
property :number_of_seats, Integer, required: true
property :driver_1, UUID, required: true
property :driver_2, UUID
property :colour, Integer, required: true
property :owner_id, UUID
property :created_at, DateTime
property :updated_at, DateTime
belongs_to :person
has n, :licenses
# belongs_to :owner, model: Person
def driver
Person.first(driver_1)
end
def drivers
Person.get(driver_1, driver_2)
end
def owner
Person.first(owner_id)
end
end #Vehicle
class License
include DataMapper::Resource
property :id, Serial
property :number, String #, required: true
property :provider, String #, required: true
property :starts_on, Date #, required: true
property :expires_on, Date #, required: true
property :type, Enum[:driving, :insurance, :driver_badge, :vehicle_badge, :mot], default: :driving # add a Taxi private_hire/hackney license type
property :active, Boolean #, default: true
belongs_to :person
belongs_to :vehicle
# belongs_to :company
end #License
# ###### SPECS #######
describe Vehicle do
let(:driver) { Person.create(first_name: 'Nelson', last_name: 'Kelem') }
let(:vehicle) do
Vehicle.create(
registration: 'N880 PFW',
make: 'BMW',
type: 'Saloon',
date_of_reg: '2006-09009',
taxi_plate: 'NKD675NEW-0023',
number_of_seats: 7,
driver_1: driver.id,
colour: 'Red'
)
end
# after(:all) do
# driver.destroy
# vehicle.destroy
# end
context "Details" do
it "should have a valid registration" do
expect(vehicle.registration).to eql('N880 PFW')
end
it "should have a make" do
expect(vehicle.make).to eql('BMW')
end
it "should have a colour" do
expect(vehicle.colour).to eql('Red')
end
it "should have Seat capacity" do
expect(vehicle.number_of_seats).to eql(7)
end
end
context "When first created" do
it "should have an owner" do
vehicle.owner_id = driver.id
vehicle.owner.should be(driver)
end
end
context "Lincenses" do
before do
vehicle.licenses.create(
number: 'KELE807070',
provider: 'Garage',
starts_on: Date.today,
expires_on: Date.today + 60,
active: true
# ,
# vehicle_id: vehicle.id
)
end
it "should be added" do
vehicle.licenses.count.should eql(1)
end
end
end
# #### ERRORS ####
Failures:
1) Vehicle Lincenses should be added
Failure/Error: vehicle.licenses.create(
DataMapper::UnsavedParentError:
The source must be saved before creating a resource
2) Vehicle When first created should have an owner
Failure/Error: vehicle.owner.should be(driver)
expected #<Person:70340053053820> => #<Person @id=nil @first_name="Nelson" @last_name="Kelem" @email=nil @phone=nil @mobile=nil @created_at=nil @updated_at=nil>
got #<NilClass:4> => nil
Compared using equal?, which compares object identity,
but expected and actual are not the same object. Use
`expect(actual).to eq(expected)` if you don't care about
object identity in this example.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment