demarches-normaliennes/spec/jobs/process_stalled_declarative_dossier_job_spec.rb

107 lines
3.7 KiB
Ruby

RSpec.describe ProcessStalledDeclarativeDossierJob, type: :job do
describe "perform" do
let(:procedure) { create(:procedure, :published, :for_individual, :with_instructeur, declarative_with_state: state) }
let(:last_operation) { dossier.dossier_operation_logs.last }
subject(:perform_job) do
described_class.perform_now(dossier.reload)
dossier.reload
end
before do
freeze_time
end
context 'declarative en instruction' do
let(:state) { Dossier.states.fetch(:en_instruction) }
context 'dossier en_construction' do
let(:dossier) { create(:dossier, :en_construction, :with_individual, :with_attestation, procedure:) }
it {
perform_job
expect(dossier.state).to eq('en_instruction')
expect(dossier.en_instruction_at).to eq(Time.current)
expect(last_operation.operation).to eq('passer_en_instruction')
expect(last_operation.automatic_operation?).to be_truthy
}
context 'dossier repasse en_construction' do
let(:dossier) { create(:dossier, :en_construction, :with_individual, procedure:, declarative_triggered_at: 1.day.ago) }
it { expect(subject.state).to eq('en_construction') }
end
end
context 'dossier already en_instruction' do
let(:dossier) { create(:dossier, :en_instruction, :with_individual, procedure:, en_instruction_at: 2.days.ago) }
it {
perform_job
expect(dossier.state).to eq('en_instruction')
expect(dossier.en_instruction_at).to eq(2.days.ago)
expect(dossier.processed_at).to be_nil
}
end
end
context "declarative accepte" do
let(:state) { Dossier.states.fetch(:accepte) }
context 'dossier en_construction' do
let(:dossier) { create(:dossier, :en_construction, :with_individual, :with_attestation, procedure:) }
it {
perform_job
expect(dossier.state).to eq('accepte')
expect(dossier.en_instruction_at).to eq(Time.current)
expect(dossier.processed_at).to eq(Time.current)
expect(dossier.attestation).to be_present
expect(last_operation.operation).to eq('accepter')
expect(last_operation.automatic_operation?).to be_truthy
}
end
context 'dossier en_instruction' do
let(:dossier) { create(:dossier, :en_instruction, :with_individual, procedure:, en_instruction_at: 2.days.ago) }
it {
perform_job
expect(dossier.state).to eq('en_instruction')
expect(dossier.en_instruction_at).to eq(2.days.ago)
expect(dossier.processed_at).to be_nil
}
end
context 'dossier brouillon' do
let(:dossier) { create(:dossier, :brouillon) }
it {
perform_job
expect(dossier.state).to eq('brouillon')
expect(dossier.en_instruction_at).to be_nil
expect(dossier.processed_at).to be_nil
}
end
context 'for entreprise' do
let(:procedure) { create(:procedure, :published, :with_instructeur, for_individual: false, declarative_with_state: state) }
let(:dossier) { create(:dossier, :en_construction, :with_entreprise, :with_attestation, procedure:, as_degraded_mode: false) }
it { expect(subject).to be_accepte }
context 'having etablissement in degraded_mode' do
let(:dossier) { create(:dossier, :en_construction, :with_entreprise, :with_attestation, procedure:, as_degraded_mode: true) }
before do
expect(dossier).to_not receive(:accepter_automatiquement!)
expect(Sentry).to_not receive(:capture_exception)
end
it { expect(subject).to be_en_construction }
end
end
end
end
end