mirror of
https://github.com/postalserver/postal.git
synced 2026-10-18 18:26:06 +00:00
39 lines
1.3 KiB
Ruby
39 lines
1.3 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
require "rails_helper"
|
|
|
|
module Worker
|
|
|
|
RSpec.describe Process do
|
|
subject(:process) { described_class.new(thread_count: 1) }
|
|
|
|
before do
|
|
# Each process registers its metrics so each example needs its own registry
|
|
allow(Prometheus::Client).to receive(:registry).and_return(Prometheus::Client::Registry.new)
|
|
|
|
# Errors are normally logged and swallowed, raise them so they fail the example instead
|
|
allow(process).to receive(:capture_errors).and_yield
|
|
end
|
|
|
|
describe "#work" do
|
|
it "runs each job and returns false when there was no work to do" do
|
|
expect(process.send(:work, 0)).to be false
|
|
end
|
|
end
|
|
|
|
describe "#run_task" do
|
|
it "runs a task which is due and schedules its next run" do
|
|
scheduled_task = ScheduledTask.create!(name: "PruneWebhookRequestsScheduledTask", next_run_after: 1.minute.ago)
|
|
task = instance_double(PruneWebhookRequestsScheduledTask, call: nil)
|
|
allow(PruneWebhookRequestsScheduledTask).to receive(:new).and_return(task)
|
|
|
|
process.send(:run_task, PruneWebhookRequestsScheduledTask)
|
|
|
|
expect(task).to have_received(:call)
|
|
expect(scheduled_task.reload.next_run_after).to be > Time.current
|
|
end
|
|
end
|
|
end
|
|
|
|
end
|