HELLO v3!!!
This commit is contained in:
94
spec/shared_examples/dynamic_finders/wp_items.rb
Normal file
94
spec/shared_examples/dynamic_finders/wp_items.rb
Normal file
@@ -0,0 +1,94 @@
|
||||
shared_examples WPScan::Finders::DynamicFinder::WpItems::Finder do
|
||||
let(:passive_fixture) do
|
||||
File.join(fixtures, "#{described_class.to_s.demodulize.underscore}_passive_all.html")
|
||||
end
|
||||
|
||||
describe '#passive_configs' do
|
||||
# Not sure if it's worth to do it as it's just a call to something tested
|
||||
# and an exception will be raised if the method called is wrong
|
||||
end
|
||||
|
||||
describe '#aggressive_configs' do
|
||||
# Same as above
|
||||
end
|
||||
|
||||
describe '#passive' do
|
||||
before do
|
||||
stub_request(:get, target.url).to_return(body: body)
|
||||
|
||||
allow(target).to receive(:content_dir).and_return('wp-content')
|
||||
end
|
||||
|
||||
context 'when no matches' do
|
||||
let(:body) { '' }
|
||||
|
||||
it 'returns an empty array' do
|
||||
expect(finder.passive).to eql([])
|
||||
end
|
||||
end
|
||||
|
||||
context 'when matches' do
|
||||
let(:body) { File.read(passive_fixture) }
|
||||
|
||||
it 'contains the expected plugins' do
|
||||
expected = []
|
||||
|
||||
finder.passive_configs.each do |slug, configs|
|
||||
configs.each_key do |finder_class|
|
||||
expected_finding_opts = expected_all[slug][finder_class]
|
||||
|
||||
expected << item_class.new(
|
||||
slug,
|
||||
target,
|
||||
confidence: expected_finding_opts['confidence'] || described_class::DEFAULT_CONFIDENCE,
|
||||
found_by: expected_finding_opts['found_by']
|
||||
)
|
||||
end
|
||||
end
|
||||
|
||||
expect(finder.passive).to match_array(expected.map { |item| eql(item) })
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe '#aggressive' do
|
||||
its(:aggressive) { should be nil }
|
||||
end
|
||||
|
||||
xdescribe '#aggressive' do
|
||||
# TODO: Maybe also stub all paths to an empty body and expect an empty array ?
|
||||
|
||||
before do
|
||||
@expected = []
|
||||
|
||||
allow(target).to receive(:content_dir).and_return('wp-content')
|
||||
|
||||
# Stubbing all requests to the different paths
|
||||
|
||||
finder.aggressive_configs.each do |slug, configs|
|
||||
configs.each do |finder_class, config|
|
||||
finder_super_class = config['class'] || finder_class
|
||||
|
||||
fixture = File.join(fixtures, slug, finder_class.underscore, config['path'])
|
||||
stubbed_response = df_stubbed_response(fixture, finder_super_class)
|
||||
path = finder.aggressive_path(slug, config)
|
||||
|
||||
expected_finding_opts = expected_all[slug][finder_class]
|
||||
|
||||
stub_request(:get, target.url(path)).to_return(stubbed_response)
|
||||
|
||||
@expected << item_class.new(
|
||||
slug,
|
||||
target,
|
||||
confidence: expected_finding_opts['confidence'] || described_class::DEFAULT_CONFIDENCE,
|
||||
found_by: expected_finding_opts['found_by']
|
||||
)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
it 'returns the expected plugins' do
|
||||
expect(finder.aggressive).to match_array(@expected.map { |item| eql(item) })
|
||||
end
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user