Finished phase006
This commit is contained in:
@@ -0,0 +1,58 @@
|
||||
require "rails_helper"
|
||||
|
||||
RSpec.describe MaintenanceScheduleStatus do
|
||||
it "marks a schedule overdue when the mileage interval is reached" do
|
||||
schedule = build(:maintenance_schedule, mileage_interval: 5_000, baseline_odometer: 10_000, time_interval: 180)
|
||||
|
||||
status = described_class.new(schedule, nil, current_odometer: 15_000)
|
||||
|
||||
expect(status.status).to eq("overdue")
|
||||
expect(status.reason).to include("mileage interval reached")
|
||||
end
|
||||
|
||||
it "marks a schedule overdue when the time interval is reached" do
|
||||
schedule = build(:maintenance_schedule, time_interval: 180, baseline_date: Date.current - 180.days)
|
||||
|
||||
status = described_class.new(schedule, nil, current_odometer: 10_000)
|
||||
|
||||
expect(status.status).to eq("overdue")
|
||||
expect(status.reason).to include("time interval reached")
|
||||
end
|
||||
|
||||
it "marks a schedule upcoming within five percent of the mileage interval" do
|
||||
schedule = build(:maintenance_schedule, mileage_interval: 5_000, baseline_odometer: 10_000, baseline_date: Date.current)
|
||||
|
||||
status = described_class.new(schedule, nil, current_odometer: 14_750)
|
||||
|
||||
expect(status.status).to eq("upcoming")
|
||||
expect(status.reason).to include("within 250 miles")
|
||||
end
|
||||
|
||||
it "marks a schedule upcoming within five percent of the time interval" do
|
||||
schedule = build(:maintenance_schedule, time_interval: 180, baseline_date: Date.current - 171.days)
|
||||
|
||||
status = described_class.new(schedule, nil, current_odometer: 10_000)
|
||||
|
||||
expect(status.status).to eq("upcoming")
|
||||
expect(status.reason).to include("within 9 days")
|
||||
end
|
||||
|
||||
it "marks a no-history schedule as no history when it is not upcoming or overdue" do
|
||||
schedule = build(:maintenance_schedule, baseline_odometer: 10_000, mileage_interval: 5_000, baseline_date: Date.current)
|
||||
|
||||
status = described_class.new(schedule, nil, current_odometer: 10_100)
|
||||
|
||||
expect(status.status).to eq("no_history")
|
||||
end
|
||||
|
||||
it "marks a schedule current when matching history exists and no interval is near" do
|
||||
schedule = build(:maintenance_schedule, mileage_interval: 5_000, time_interval: 180)
|
||||
entry = build(:maintenance_entry, odometer: 12_000, date: Date.current - 10.days)
|
||||
|
||||
status = described_class.new(schedule, entry, current_odometer: 12_500)
|
||||
|
||||
expect(status.status).to eq("current")
|
||||
expect(status.due_odometer).to eq(17_000)
|
||||
expect(status.due_date).to eq(entry.date + 180.days)
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user