205 lines
5.1 KiB
Ruby
205 lines
5.1 KiB
Ruby
# encoding: UTF-8
|
|
|
|
require 'spec_helper'
|
|
|
|
describe 'WpVersion::Findable' do
|
|
let(:fixtures_dir) { MODELS_FIXTURES + '/wp_version/findable/' }
|
|
let(:uri) { URI.parse('http://example.com/') }
|
|
let(:generator_urls) {
|
|
{
|
|
rss_generator: uri.merge('feed/').to_s,
|
|
rdf_generator: uri.merge('feed/rdf/').to_s,
|
|
atom_generator: uri.merge('feed/atom/').to_s,
|
|
comments_rss_generator: uri.merge('comments/feed/').to_s,
|
|
sitemap_generator: uri.merge('sitemap.xml').to_s
|
|
}
|
|
}
|
|
|
|
# Dynamic creation for all generator methods
|
|
WpVersion.methods.grep(/^find_from_.*_generator$/).each do |method|
|
|
dir_name = method.to_s[%r{^find_from_(.*)$}, 1]
|
|
|
|
describe "::#{method}" do
|
|
let(:url) { generator_urls[dir_name.to_sym] || uri.to_s }
|
|
|
|
after do
|
|
fixture = fixtures_dir + dir_name + @fixture
|
|
stub_request_to_fixture(url: url, fixture: fixture)
|
|
|
|
expect(WpVersion.send(method, uri)).to eq @expected
|
|
end
|
|
|
|
context 'when generator not found' do
|
|
it 'returns nil' do
|
|
@fixture = '/no_generator.html'
|
|
@expected = nil
|
|
end
|
|
end
|
|
|
|
context 'when version not found' do
|
|
it 'returns nil' do
|
|
@fixture = '/no_version.html'
|
|
@expected = nil
|
|
end
|
|
end
|
|
|
|
context 'when invalid version' do
|
|
it 'returns nil' do
|
|
@fixture = '/invalid_version.html'
|
|
@expected = nil
|
|
end
|
|
end
|
|
|
|
it 'returns 3.3.2' do
|
|
@fixture = '/3.3.2.html'
|
|
@expected = '3.3.2'
|
|
end
|
|
|
|
it 'returns 3.4-beta4' do
|
|
@fixture = '/3.4-beta4.html'
|
|
@expected = '3.4-beta4'
|
|
end
|
|
|
|
if method == :find_from_meta_generator
|
|
it 'returns 3.5' do
|
|
@fixture = '/3.5_minified.html'
|
|
@expected = '3.5'
|
|
end
|
|
end
|
|
|
|
end
|
|
end
|
|
|
|
describe '::find_from_advanced_fingerprinting' do
|
|
let(:fixture_dir) { fixtures_dir + 'advanced_fingerprinting/' }
|
|
let(:wp_content_dir) { 'wp-content' }
|
|
let(:wp_plugins_dir) { wp_content_dir + '/plugins' }
|
|
let(:versions_xml) { fixture_dir + 'wp_versions.xml' }
|
|
|
|
after do
|
|
version = WpVersion.send(
|
|
:find_from_advanced_fingerprinting,
|
|
uri, wp_content_dir, wp_plugins_dir, versions_xml
|
|
)
|
|
expect(version).to eq @expected
|
|
end
|
|
|
|
context 'when' do
|
|
it 'returns nil' do
|
|
stub_request(:get, /.*/).to_return(status: 404, body: '')
|
|
@expected = nil
|
|
end
|
|
end
|
|
|
|
it 'returns 3.2.1' do
|
|
stub_request_to_fixture(
|
|
url: uri.merge('wp-admin/js/wp-fullscreen.js').to_s,
|
|
fixture: fixture_dir + '3.2.1.js'
|
|
)
|
|
|
|
@expected = '3.2.1'
|
|
end
|
|
end
|
|
|
|
describe '::find_from_readme' do
|
|
let(:url) { uri.merge('readme.html').to_s }
|
|
|
|
after do
|
|
fixture = fixtures_dir + 'readme' + @fixture
|
|
stub_request_to_fixture(url: url, fixture: fixture)
|
|
|
|
expect(WpVersion.send(:find_from_readme, uri)).to eq @expected
|
|
end
|
|
|
|
context 'when version not found' do
|
|
it 'returns nil' do
|
|
@fixture = '/empty_version.html'
|
|
@expected = nil
|
|
end
|
|
end
|
|
|
|
context 'when invalid version' do
|
|
it 'returns nil' do
|
|
@fixture = '/invalid_version.html'
|
|
@expected = nil
|
|
end
|
|
end
|
|
|
|
it 'returns 3.3.2' do
|
|
@fixture = '/3.3.2.html'
|
|
@expected = '3.3.2'
|
|
end
|
|
end
|
|
|
|
describe '::find_from_links_opml' do
|
|
let(:url) { uri.merge('wp-links-opml.php') }
|
|
|
|
after do
|
|
fixture = fixtures_dir + 'links_opml' + @fixture
|
|
stub_request_to_fixture(url: url, fixture: fixture)
|
|
|
|
expect(WpVersion.send(:find_from_links_opml, uri)).to eq @expected
|
|
end
|
|
|
|
it 'returns 3.4.2' do
|
|
@fixture = '/3.4.2.xml'
|
|
@expected = '3.4.2'
|
|
end
|
|
|
|
context 'when no generator' do
|
|
it 'returns nil' do
|
|
@fixture = '/no_generator.xml'
|
|
@expected = nil
|
|
end
|
|
end
|
|
end
|
|
|
|
describe '::find' do
|
|
# Stub all WpVersion::find_from_* to return nil
|
|
def stub_all_to_nil
|
|
WpVersion.methods.grep(/^find_from_/).each do |method|
|
|
allow(WpVersion).to receive(method).and_return(nil)
|
|
end
|
|
end
|
|
|
|
let(:wp_content_dir) { 'wp-content' }
|
|
let(:wp_plugins_dir) { wp_content_dir + '/plugins' }
|
|
let(:version_xml) {}
|
|
|
|
after do
|
|
stub_request(:get, /#{uri.to_s}.*/).to_return(status: 0)
|
|
|
|
version = WpVersion.find(uri, wp_content_dir, wp_plugins_dir, version_xml)
|
|
expect(version).to eq @expected
|
|
if @expected
|
|
expect(version.found_from).to eq @found_from
|
|
end
|
|
end
|
|
|
|
context 'when no version found' do
|
|
it 'returns nil' do
|
|
stub_all_to_nil()
|
|
@expected = nil
|
|
end
|
|
end
|
|
|
|
WpVersion.methods.grep(/^find_from_/).each do |method|
|
|
number = "#{rand(5)}.#{rand(3)}"
|
|
found_from = method[/^find_from_(.*)/, 1].sub('_', ' ')
|
|
|
|
context "when found from #{found_from}" do
|
|
it "returns the correct WpVersion" do
|
|
stub_all_to_nil()
|
|
|
|
allow(WpVersion).to receive(method).and_return(number)
|
|
|
|
@expected = WpVersion.new(uri, number: number)
|
|
@found_from = found_from
|
|
end
|
|
end
|
|
end
|
|
|
|
end
|
|
|
|
end
|