90 lines
2.1 KiB
Ruby
90 lines
2.1 KiB
Ruby
require "rails_helper"
|
|
|
|
RSpec.describe Vehicle do
|
|
it "has a valid factory" do
|
|
expect(build(:vehicle)).to be_valid
|
|
end
|
|
|
|
it "defaults to active" do
|
|
expect(described_class.new.active).to be(true)
|
|
end
|
|
|
|
it "requires all fields" do
|
|
vehicle = build(
|
|
:vehicle,
|
|
make: nil,
|
|
model: nil,
|
|
year: nil,
|
|
color: nil,
|
|
vin: nil,
|
|
licence_plate: nil,
|
|
current_odometer: nil,
|
|
fuel_tank_size: nil,
|
|
active: nil
|
|
)
|
|
|
|
expect(vehicle).not_to be_valid
|
|
expect(vehicle.errors.attribute_names).to include(
|
|
:make,
|
|
:model,
|
|
:year,
|
|
:color,
|
|
:vin,
|
|
:licence_plate,
|
|
:current_odometer,
|
|
:fuel_tank_size,
|
|
:active
|
|
)
|
|
end
|
|
|
|
it "normalizes VIN to uppercase" do
|
|
vehicle = build(:vehicle, vin: "abc123")
|
|
|
|
vehicle.valid?
|
|
|
|
expect(vehicle.vin).to eq("ABC123")
|
|
end
|
|
|
|
it "requires VIN to be unique after normalization" do
|
|
create(:vehicle, vin: "ABC123")
|
|
|
|
vehicle = build(:vehicle, vin: "abc123")
|
|
|
|
expect(vehicle).not_to be_valid
|
|
expect(vehicle.errors[:vin]).to be_present
|
|
end
|
|
|
|
it "requires licence plate to be unique case-insensitively" do
|
|
create(:vehicle, licence_plate: "ABC123")
|
|
|
|
vehicle = build(:vehicle, licence_plate: "abc123")
|
|
|
|
expect(vehicle).not_to be_valid
|
|
expect(vehicle.errors[:licence_plate]).to be_present
|
|
end
|
|
|
|
it "requires a realistic year" do
|
|
too_old = build(:vehicle, year: 1979)
|
|
future = build(:vehicle, year: Date.current.year + 1)
|
|
|
|
expect(too_old).not_to be_valid
|
|
expect(future).not_to be_valid
|
|
end
|
|
|
|
it "requires numeric mileage and fuel tank values" do
|
|
vehicle = build(:vehicle, current_odometer: -1, fuel_tank_size: 0)
|
|
|
|
expect(vehicle).not_to be_valid
|
|
expect(vehicle.errors[:current_odometer]).to be_present
|
|
expect(vehicle.errors[:fuel_tank_size]).to be_present
|
|
end
|
|
|
|
it "cannot be destroyed when entries reference it" do
|
|
vehicle = create(:vehicle)
|
|
create(:maintenance_schedule, vehicle: vehicle)
|
|
|
|
expect(vehicle.destroy).to be(false)
|
|
expect(vehicle.errors[:base]).to be_present
|
|
end
|
|
end
|