diff --git a/app/jobs/process_merge_request_job.rb b/app/jobs/process_merge_request_job.rb index 5f071d442..b706d9a81 100644 --- a/app/jobs/process_merge_request_job.rb +++ b/app/jobs/process_merge_request_job.rb @@ -7,5 +7,8 @@ class ProcessMergeRequestJob < ApplicationJob merge_date = merge_request.merge_date Merge::MergeOrganisationsService.new(absorbing_organisation_id:, merging_organisation_ids:, merge_date:).call + merge_request.update!(status: "request_merged", last_failed_attempt: nil) + rescue StandardError + merge_request.update!(last_failed_attempt: Time.zone.now) end end diff --git a/db/migrate/20240814083017_add_last_failed_attempt.rb b/db/migrate/20240814083017_add_last_failed_attempt.rb new file mode 100644 index 000000000..34e0e4046 --- /dev/null +++ b/db/migrate/20240814083017_add_last_failed_attempt.rb @@ -0,0 +1,5 @@ +class AddLastFailedAttempt < ActiveRecord::Migration[7.0] + def change + add_column :merge_requests, :last_failed_attempt, :datetime + end +end diff --git a/db/schema.rb b/db/schema.rb index 2d728a72d..9f46a7ae4 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,7 +10,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema[7.0].define(version: 2024_08_13_112119) do +ActiveRecord::Schema[7.0].define(version: 2024_08_14_083017) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" @@ -432,6 +432,7 @@ ActiveRecord::Schema[7.0].define(version: 2024_08_13_112119) do t.integer "total_managing_agents" t.boolean "signed_dsa", default: false t.datetime "discarded_at" + t.datetime "last_failed_attempt" end create_table "notifications", force: :cascade do |t| diff --git a/spec/jobs/process_merge_request_job_spec.rb b/spec/jobs/process_merge_request_job_spec.rb index a1706d406..0c4ae30f1 100644 --- a/spec/jobs/process_merge_request_job_spec.rb +++ b/spec/jobs/process_merge_request_job_spec.rb @@ -24,6 +24,24 @@ describe ProcessMergeRequestJob do expect(Merge::MergeOrganisationsService).to receive(:new).with(absorbing_organisation_id: organisation.id, merging_organisation_ids: [merging_organisation.id, other_merging_organisation.id], merge_date: Time.zone.local(2022, 3, 3)) job.perform(merge_request:) + expect(merge_request.reload.status).to eq("request_merged") + end + + it "clears last_failed_attempt value" do + merge_request.update!(last_failed_attempt: Time.zone.now) + job.perform(merge_request:) + + expect(merge_request.reload.last_failed_attempt).to be_nil + end + + it "sets last_failed_attempt value if there's an error" do + allow(merge_organisations_service).to receive(:call).and_raise(ActiveRecord::Rollback) + + expect(merge_request.last_failed_attempt).to be_nil + job.perform(merge_request:) + + merge_request.reload + expect(merge_request.last_failed_attempt).to be_within(10.seconds).of(Time.zone.now) end end end