# frozen_string_literal: true

describe WPScan::Finders::WpVersion::Readme do
  subject(:finder) { described_class.new(target) }
  let(:target)     { WPScan::Target.new(url).extend(CMSScanner::Target::Server::Apache) }
  let(:url)        { 'http://ex.lo/' }
  let(:fixtures)   { FINDERS_FIXTURES.join('wp_version', 'readme') }
  let(:readme_url) { url + 'readme.html' }

  describe '#aggressive' do
    before { stub_request(:get, readme_url).to_return(body: File.read(fixtures.join(file))) }

    after do
      expect(target).to receive(:sub_dir).and_return(false)
      expect(finder.aggressive).to eql @expected
    end

    context 'when no version' do
      let(:file) { 'no_version.html' }

      it 'returns nil' do
        @expected = nil
      end
    end

    context 'when invalid version number' do
      let(:file) { 'invalid.html' }

      it 'returns nil' do
        @expected = nil
      end
    end

    context 'when present and valid' do
      let(:file) { '4.0.html' }

      it 'returns the expected version' do
        @expected = WPScan::Model::WpVersion.new(
          '4.0',
          confidence: 90,
          found_by: 'Readme (Aggressive Detection)',
          interesting_entries: [
            "#{readme_url}, Match: 'Version 4.0'"
          ]
        )
      end
    end
  end
end
