Path: blob/master/spec/lib/finders/dynamic_finder/wp_version_spec.rb
1466 views
# frozen_string_literal: true12expected_all = df_expected_all['wordpress']34WPScan::DB::DynamicFinders::Wordpress.create_versions_finders56describe 'Try to create the finders twice' do7it 'does not raise an error when the class already exists' do8expect { WPScan::DB::DynamicFinders::Wordpress.create_versions_finders }.to_not raise_error9end10end1112WPScan::DB::DynamicFinders::Wordpress.versions_finders_configs.each do |finder_class, config|13finder_super_class = config['class'] || finder_class1415describe df_tested_class_constant('WpVersion', finder_class) do16subject(:finder) { described_class.new(target) }17let(:target) { WPScan::Target.new('http://wp.lab/') }18let(:fixtures) { DYNAMIC_FINDERS_FIXTURES.join('wp_version') }1920let(:expected) do21expected_all[finder_class].is_a?(Hash) ? [expected_all[finder_class]] : expected_all[finder_class]22end2324let(:stubbed_response) { { body: '' } }2526describe '#passive' do27before do28stub_request(:get, target.url).to_return(stubbed_response)29stub_request(:get, ERROR_404_URL_PATTERN)30end3132if config['path']33context 'when PATH' do34it 'returns nil' do35expect(finder.passive).to eql nil36end37end38else39context 'when no PATH' do40let(:stubbed_response) do41df_stubbed_response(42fixtures.join("#{finder_super_class.underscore}_passive_all.html"),43finder_super_class44)45end4647it 'returns the expected version from the homepage' do48found = Array(finder.passive)4950expect(found).to_not be_empty5152found.each_with_index do |version, index|53expected_version = expected.at(index)5455expect(version).to be_a WPScan::Model::WpVersion56expect(version.number).to eql expected_version['number'].to_s57expect(version.found_by).to eql expected_version['found_by']58expect(version.interesting_entries).to match_array expected_version['interesting_entries']5960expect(version.confidence).to eql expected_version['confidence'] if expected_version['confidence']61end62end63end64end65end6667describe '#aggressive' do68let(:fixtures) { super().join(finder_class.underscore) }6970before do71allow(target).to receive(:sub_dir).and_return(false)7273stub_request(:get, target.url(config['path'])).to_return(stubbed_response) if config['path']74end7576if config['path']77context 'when the version is detected' do78let(:stubbed_response) do79df_stubbed_response(fixtures.join(config['path']), finder_super_class)80end8182it 'returns the expected version' do83found = Array(finder.aggressive)8485expect(found).to_not be_empty8687found.each_with_index do |version, index|88expected_version = expected.at(index)8990expect(version).to be_a WPScan::Model::WpVersion91expect(version.number).to eql expected_version['number'].to_s92expect(version.found_by).to eql expected_version['found_by']93expect(version.interesting_entries).to match_array expected_version['interesting_entries']9495expect(version.confidence).to eql expected_version['confidence'] if expected_version['confidence']96end97end98end99100context 'when the version is not detected' do101it 'returns nil or an empty array' do102expect(finder.aggressive).to eql finder_super_class == 'QueryParameter' ? [] : nil103end104end105else106it 'returns nil' do107expect(finder.aggressive).to eql nil108end109end110end111end112end113114115