Mutare.Oban.Enqueue (mutare_oban v0.1.0)

Copy Markdown View Source

Mutates the enqueue options of an Oban job — the keyword options passed when a job is built (MyWorker.new(args, max_attempts: 3, unique: [...], schedule_in: 60)). These options encode the job's retry / dedup / scheduling policy, so dropping or weakening one asks the suite a pointed question.

The mutations

max_attempts: n  (n  1)  ->  max_attempts: 1   no retries  is the retry asserted?
unique: [...]             ->  (dropped)          dedup removed  is the dupe caught?
schedule_in: _            ->  (dropped)          runs now, not later  is the delay asserted?
scheduled_at: _           ->  (dropped)          runs now, not later

Each is a single mutant, delivered in place by Mutare's selector, and compile-safe by construction (dropping a keyword pair or substituting the literal 1 always yields a legal keyword list — even the empty [], a valid second argument to new/2).

Each mutant is a Mutare.Mutator.Mutation tagged with the option it attacks as its ignore variant — so # mutare:ignore[oban_enqueue:unique] suppresses just the dedup drop on that line (see Mutare.Ignore) — and carries a report note saying what a survivor leaves unasserted.

How it matches

It matches the new/N call (not the keyword list — Mutare descends trailing keyword options as individual call arguments, never offering the list as a single node), resolving it through Mutare.Calls.resolved_call/1 so the direct, aliased, and piped (args |> MyWorker.new(opts)) forms all match, and rebuilds the call with the mutated options in the form the source wrote. It fires on any module's new whose options carry one of the keys it mutates (max_attempts, unique, schedule_in, scheduled_at) — Oban-distinctive enough that a false positive is unlikely, and would at worst rebuild an equivalent call elsewhere, never miscompile.

This intentionally covers only the dynamic new/2 options. Static config in the use Oban.Worker line is compile-time and unreachable — see Mutare.Oban.

Summary

Functions

The attacked-option vocabulary for # mutare:ignore[oban_enqueue:<label>] — each mutant is tagged at production with the key it caps or drops.

Functions

variants()

The attacked-option vocabulary for # mutare:ignore[oban_enqueue:<label>] — each mutant is tagged at production with the key it caps or drops.