# frozen_string_literal: true

require 'rails_helper'
require_dependency 'discourse_plugin'

describe DiscoursePlugin do

  class TestPlugin < DiscoursePlugin
    module SomeModule
    end

    module TestMixin
    end
  end

  let(:registry) { mock }
  let(:plugin) { TestPlugin.new(registry) }

  describe ".mixins" do
    it "finds its mixins" do
      expect(TestPlugin.mixins).to eq([TestPlugin::TestMixin])
    end
  end

  it "delegates adding js to the registry" do
    registry.expects(:register_js).with('test.js', any_parameters)
    plugin.register_js('test.js')
  end

  it "delegates adding css to the registry" do
    registry.expects(:register_css).with('test.css')
    plugin.register_css('test.css')
  end

  it "delegates creating archetypes" do
    registry.expects(:register_archetype).with('banana', oh: 'no!')
    plugin.register_archetype('banana', oh: 'no!')
  end

  context 'registering for callbacks' do
    before do
      plugin.stubs(:hello)
      @proc = plugin.listen_for(:hello).first
    end

    after do
      DiscourseEvent.off(:hello, &@proc)
    end

    it "calls the method when it is triggered" do
      plugin.expects(:hello).with('there')
      DiscourseEvent.trigger(:hello, 'there')
    end

  end

end