Files
bionickatana 0826d267f2
CI / scan_ruby (push) Failing after 1m5s
CI / scan_js (push) Failing after 6s
CI / lint (push) Failing after 1m29s
Finished phase005
2026-09-16 15:34:50 -06:00

98 lines
2.2 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 "normalizes licence plate to uppercase" do
vehicle = build(:vehicle, licence_plate: "kj7cyt")
vehicle.valid?
expect(vehicle.licence_plate).to eq("KJ7CYT")
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