phase002 complete
This commit is contained in:
@@ -0,0 +1,89 @@
|
||||
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
|
||||
Reference in New Issue
Block a user