# frozen_string_literal: true

# If this file is tested alone (rspec path-to-this-file), then there will be an error about
# constants not being intilialized. This is due to the Dynamic Finders.

describe WPScan::Finders::PluginVersion::Base do
  subject(:plugin_version) { described_class.new(plugin) }
  let(:plugin)             { WPScan::Model::Plugin.new(slug, target) }
  let(:target)             { WPScan::Target.new('http://wp.lab/') }
  let(:default_finders)    { %w[Readme] }

  describe '#finders' do
    after do
      expect(target).to receive(:content_dir).and_return('wp-content')
      expect(plugin_version.finders.map { |f| f.class.to_s.demodulize }).to match_array @expected
    end

    context 'when no related specific finders' do
      let(:slug) { 'spec' }

      it 'contains the default finders' do
        @expected = default_finders
      end
    end

    # Dynamic Version Finders are not tested here, they are in
    # spec/lib/finders/dynamic_finder/plugin_versions_spec
    context 'when specific finders' do
      let(:specific) do
        {
          # None so far
        }
      end

      WPScan::DB::DynamicFinders::Plugin.versions_finders_configs.each do |plugin_slug, configs|
        context "when #{plugin_slug} plugin" do
          let(:slug) { plugin_slug }

          it 'contains the expected finders (default + specific + the dynamic ones)' do
            @expected = default_finders + [*specific[plugin_slug]] + configs.keys
          end
        end
      end
    end
  end
end
