WpVersion::Findable specs
This commit is contained in:
202
spec/lib/common/models/wp_version/findable_spec.rb
Normal file
202
spec/lib/common/models/wp_version/findable_spec.rb
Normal file
@@ -0,0 +1,202 @@
|
||||
# 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)
|
||||
|
||||
WpVersion.send(method, uri).should == @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
|
||||
)
|
||||
version.should == @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)
|
||||
|
||||
WpVersion.send(:find_from_readme, uri).should == @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)
|
||||
|
||||
WpVersion.send(:find_from_links_opml, uri).should == @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|
|
||||
WpVersion.stub(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
|
||||
version = WpVersion.find(uri, wp_content_dir, wp_plugins_dir, version_xml)
|
||||
version.should == @expected
|
||||
if @expected
|
||||
version.found_from.should == @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()
|
||||
|
||||
WpVersion.stub(method).and_return(number)
|
||||
|
||||
@expected = WpVersion.new(uri, number: number)
|
||||
@found_from = found_from
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
end
|
||||
Reference in New Issue
Block a user