60 lines
1.8 KiB
Ruby
60 lines
1.8 KiB
Ruby
require "rails_helper"
|
|
|
|
RSpec.describe MaintenanceSchedule do
|
|
it "has a valid factory" do
|
|
expect(build(:maintenance_schedule)).to be_valid
|
|
end
|
|
|
|
it "requires all fields" do
|
|
schedule = build(
|
|
:maintenance_schedule,
|
|
vehicle: nil,
|
|
maintenance_type: nil,
|
|
mileage_interval: nil,
|
|
time_interval: nil,
|
|
baseline_odometer: nil,
|
|
baseline_date: nil,
|
|
active: nil
|
|
)
|
|
|
|
expect(schedule).not_to be_valid
|
|
expect(schedule.errors.attribute_names).to include(
|
|
:vehicle,
|
|
:maintenance_type,
|
|
:mileage_interval,
|
|
:time_interval,
|
|
:baseline_odometer,
|
|
:baseline_date,
|
|
:active
|
|
)
|
|
end
|
|
|
|
it "requires valid numeric values" do
|
|
schedule = build(:maintenance_schedule, mileage_interval: 0, time_interval: 0, baseline_odometer: -1)
|
|
|
|
expect(schedule).not_to be_valid
|
|
expect(schedule.errors[:mileage_interval]).to be_present
|
|
expect(schedule.errors[:time_interval]).to be_present
|
|
expect(schedule.errors[:baseline_odometer]).to be_present
|
|
end
|
|
|
|
it "rejects future baseline dates" do
|
|
schedule = build(:maintenance_schedule, baseline_date: Date.current + 1.day)
|
|
|
|
expect(schedule).not_to be_valid
|
|
expect(schedule.errors[:baseline_date]).to be_present
|
|
end
|
|
|
|
it "requires maintenance type to be unique per vehicle case-insensitively" do
|
|
vehicle = create(:vehicle)
|
|
create(:maintenance_schedule, vehicle: vehicle, maintenance_type: "Oil Change")
|
|
|
|
duplicate = build(:maintenance_schedule, vehicle: vehicle, maintenance_type: "oil change")
|
|
other_vehicle_schedule = build(:maintenance_schedule, maintenance_type: "oil change")
|
|
|
|
expect(duplicate).not_to be_valid
|
|
expect(duplicate.errors[:maintenance_type]).to be_present
|
|
expect(other_vehicle_schedule).to be_valid
|
|
end
|
|
end
|