Tenho um método CancelScheduledJob que recebe o Id de um trabalho em segundo plano e usa o JobStorage para recuperar esse Id e cancelar o trabalho hangfire correspondente:
var mon = JobStorage.Current.GetMonitoringApi();
var scheduledJobs = mon.ScheduledJobs(0, int.MaxValue);
var jobsToDelete = scheduledJobs.Where(job => job.Value.Job?.Args?.Any(arg => arg is Guid guid && guid == id) == true).ToList();
jobsToDelete?.ForEach(job => _backgroundJobClient.Delete(job.Key));
É possível verificar um método Enqueue() ou Schedule() verificando o método Create chamado no mock backgroundJobClient, como aqui:
_backgroundJobClientMock.Verify(x => x.Create(
It.Is<Job>(job => job.Method.Name == "Run" && Guid.Parse(job.Args[0].ToString()) == input),
It.IsAny<ScheduledState>()));
Mas como eu faria para verificar o método Delete? Já estou zombando do JobStorage, mas não consigo encontrar uma maneira de verificar o método Delete(). Atualmente, tenho isto:
_backgroundJobClientMock.Verify(
x => x.Delete(It.Is<string>(jobId => jobId == "job1")),
Times.Once
);
Mas me deparo com o problema comum de que Delete é um método de extensão e não pode ser usado em uma expressão de configuração/verificação.