# frozen_string_literal: true

require_relative "helper"
require "sidekiq/manager"

describe Sidekiq::Manager do
  before do
    Sidekiq.redis { |c| c.flushdb }
    Sidekiq.reset!
    @config = Sidekiq
    @config[:fetch] = Sidekiq::BasicFetch.new(@config)
  end

  def new_manager
    Sidekiq::Manager.new(@config)
  end

  it "creates N processor instances" do
    mgr = new_manager
    assert_equal @config[:concurrency], mgr.workers.size
  end

  it "shuts down the system" do
    mgr = new_manager
    mgr.stop(::Process.clock_gettime(::Process::CLOCK_MONOTONIC))
  end

  it "throws away dead processors" do
    mgr = new_manager
    init_size = mgr.workers.size
    processor = mgr.workers.first
    begin
      mgr.processor_result(processor, "ignored")

      assert_equal init_size, mgr.workers.size
      refute mgr.workers.include?(processor)
    ensure
      mgr.quiet
    end
  end
end
