# frozen_string_literal: true

require "test_helper"

class ActionCable::Server::WithIndependentConfig < ActionCable::Server::Base
  # ActionCable::Server::Base defines config as a class variable.
  # Need config to be an instance variable here as we're testing 2 separate configs
  def config
    @config ||= ActionCable::Server::Configuration.new
  end
end

module ChannelPrefixTest
  def test_channel_prefix
    server2 = ActionCable::Server::WithIndependentConfig.new
    server2.config.cable = alt_cable_config
    server2.config.logger = Logger.new(StringIO.new).tap { |l| l.level = Logger::UNKNOWN }

    adapter_klass = server2.config.pubsub_adapter

    rx_adapter2 = adapter_klass.new(server2)
    tx_adapter2 = adapter_klass.new(server2)

    subscribe_as_queue("channel") do |queue|
      subscribe_as_queue("channel", rx_adapter2) do |queue2|
        @tx_adapter.broadcast("channel", "hello world")
        tx_adapter2.broadcast("channel", "hello world 2")

        assert_equal "hello world", queue.pop
        assert_equal "hello world 2", queue2.pop
      end
    end
  end

  def alt_cable_config
    cable_config.merge(channel_prefix: "foo")
  end
end
