@@ -210,6 +210,43 @@ defmodule Sentry.Integrations.Oban.ErrorReporterTest do
210210 assert [ event ] = Sentry.Test . pop_sentry_reports ( )
211211 assert event . tags . custom_tag == "custom_value"
212212 end
213+
214+ test "with skip_retries: true, only reports final attempt failures" do
215+ job =
216+ % { "id" => "123" , "entity" => "user" , "type" => "delete" }
217+ |> MyWorker . new ( )
218+ |> Ecto.Changeset . apply_action! ( :validate )
219+
220+ reason = % RuntimeError { message: "oops" }
221+
222+ Sentry.Test . start_collecting ( )
223+
224+ job_attempt_1 = Map . merge ( job , % { attempt: 1 , max_attempts: 3 } )
225+
226+ assert :ok =
227+ ErrorReporter . handle_event (
228+ [ :oban , :job , :exception ] ,
229+ % { } ,
230+ % { job: job_attempt_1 , kind: :error , reason: reason , stacktrace: [ ] } ,
231+ skip_retries: true
232+ )
233+
234+ assert [ ] = Sentry.Test . pop_sentry_reports ( )
235+
236+ job_attempt_3 = Map . merge ( job , % { attempt: 3 , max_attempts: 3 } )
237+
238+ assert :ok =
239+ ErrorReporter . handle_event (
240+ [ :oban , :job , :exception ] ,
241+ % { } ,
242+ % { job: job_attempt_3 , kind: :error , reason: reason , stacktrace: [ ] } ,
243+ skip_retries: true
244+ )
245+
246+ assert [ event ] = Sentry.Test . pop_sentry_reports ( )
247+ assert event . original_exception == % RuntimeError { message: "oops" }
248+ assert event . tags . oban_worker == "Sentry.Integrations.Oban.ErrorReporterTest.MyWorker"
249+ end
213250 end
214251
215252 ## Helpers
0 commit comments