Files
dunlop-core/spec/services/dunlop/overdue_handling_spec.rb
T
2018-01-20 13:02:44 -03:00

167 lines
6.2 KiB
Ruby

require 'rails_helper'
describe Dunlop::OverdueHandling do
before do
subject.define do
when_workflow_step :contractor_initialization, is: 2.days, from: {owner_initialization: :plan_date}
end
end
describe ".handle_overdue!" do
it "sets to overdue when needed" do
workflow_instance_1 = create :workflow_instance_scenario1
workflow_instance_1.owner_initialization.update_columns(plan_date: 3.days.ago.to_date)
subject.handle_overdue!
workflow_instance_1.reload.should be_overdue
workflow_instance_1.contractor_initialization.should be_overdue
end
it "sets to overdue when needed" do
workflow_instance_2 = create :workflow_instance_scenario1
workflow_instance_2.owner_initialization.update_columns(plan_date: 1.day.ago.to_date)
subject.handle_overdue!
workflow_instance_2.reload.should_not be_overdue
workflow_instance_2.contractor_initialization.should_not be_overdue
end
it "sets to overdue when needed" do
workflow_instance_3 = create :workflow_instance_scenario1
workflow_instance_3.owner_initialization.update_columns(plan_date: 5.days.from_now.to_date)
subject.handle_overdue!
workflow_instance_3.reload.should_not be_overdue
workflow_instance_3.contractor_initialization.should_not be_overdue
end
it "sets to overdue when needed" do
# exact match, also overdue
workflow_instance_4 = create :workflow_instance_scenario1
workflow_instance_4.owner_initialization.update_columns(plan_date: 2.days.ago.to_date)
subject.handle_overdue!
# exact match, also overdue
workflow_instance_4.reload.should be_overdue
workflow_instance_4.contractor_initialization.should be_overdue
end
it "sets to overdue when needed" do
# completed overdue times are ignored of course
workflow_instance_5 = create :workflow_instance_scenario1, :all_completed
workflow_instance_5.owner_initialization.update_columns(plan_date: 20.days.ago.to_date)
subject.handle_overdue!
workflow_instance_5.reload.should be_all_completed
workflow_instance_5.contractor_initialization.should be_completed
end
it "sets to overdue when needed" do
workflow_instance_6 = create :workflow_instance_scenario1
workflow_instance_6.owner_initialization.update_columns(plan_date: 20.days.ago.to_date)
workflow_instance_6.owner_initialization.reject!
subject.handle_overdue!
# any_rejected wins over overdue for overal workflow_instance state
workflow_instance_6.reload.should be_any_rejected
workflow_instance_6.contractor_initialization.should be_overdue
end
end
describe "changing the date specified as target in the configuration" do
it "sets to overdue when date change creates overdue situation" do
workflow_instance = create :workflow_instance_scenario1, :overdue
workflow_instance.owner_initialization.update_columns(plan_date: 1.day.ago.to_date)
# Trigger the callbacks
workflow_instance.owner_initialization.update plan_date: 3.days.ago.to_date
reload_model workflow_instance
workflow_instance.contractor_initialization.should be_overdue
workflow_instance.should be_overdue
end
it "removes overdue when the date is no longer overdue" do
workflow_instance = create :workflow_instance_scenario1, :overdue
workflow_instance.owner_initialization.update_columns(plan_date: 3.days.ago.to_date)
workflow_instance.contractor_initialization.update_columns(state: 'overdue')
# Trigger the callbacks
workflow_instance.owner_initialization.update plan_date: 1.day.ago.to_date
reload_model workflow_instance
workflow_instance.contractor_initialization.should be_processing
workflow_instance.should be_active
end
it "removes overdue when the date is removed" do
workflow_instance = create :workflow_instance_scenario1, :overdue
workflow_instance.owner_initialization.update_columns(plan_date: 3.days.ago.to_date)
workflow_instance.contractor_initialization.update_columns(state: 'overdue')
# Trigger the callbacks
workflow_instance.owner_initialization.update plan_date: nil
reload_model workflow_instance
workflow_instance.contractor_initialization.should be_processing
workflow_instance.should be_active
end
it "does not set rejected records to overdue" do
workflow_instance = create :workflow_instance_scenario1, :overdue
workflow_instance.owner_initialization.update_columns(plan_date: 1.day.ago.to_date)
workflow_instance.contractor_initialization.reject!
# Trigger the callbacks
workflow_instance.owner_initialization.update plan_date: 3.days.ago.to_date
reload_model workflow_instance
workflow_instance.contractor_initialization.should be_rejected
workflow_instance.should be_any_rejected
end
it "does not set completed records to overdue" do
workflow_instance = create :workflow_instance_scenario1, :overdue
workflow_instance.owner_initialization.update_columns(plan_date: 1.day.ago.to_date)
workflow_instance.contractor_initialization.complete!
# Trigger the callbacks
workflow_instance.owner_initialization.update plan_date: 3.days.ago.to_date
reload_model workflow_instance
workflow_instance.contractor_initialization.should be_completed
workflow_instance.should be_active
end
end
describe "completing an overdue workflow step" do
it "activates the workflow instance from overdue state when the overdue workflow step is completed" do
workflow_instance = create :workflow_instance_scenario1, :overdue
workflow_instance.reload.should be_overdue
workflow_instance.owner_initialization.should be_pending
workflow_instance.contractor_initialization.should be_overdue
workflow_instance.contractor_initialization.complete!
workflow_instance.reload.should be_active
end
it "rejects the workflow instance from overdue state when the overdue workflow step is completed" do
workflow_instance = create :workflow_instance_scenario1, :overdue
workflow_instance.contractor_initialization.reject!
workflow_instance.reload.should be_any_rejected
end
end
end