Fixes #164 README.txt detection

This commit is contained in:
erwanlr
2013-04-15 15:01:06 +02:00
parent 698197248e
commit b1ce7bdcc5
5 changed files with 51 additions and 20 deletions

View File

@@ -7,17 +7,30 @@ class WpItem
# @return [ Boolean ] # @return [ Boolean ]
def has_readme? def has_readme?
Browser.get(readme_url).code == 200 ? true : false !readme_url.nil?
end end
# @return [ String ] The url to the readme file # @return [ String,nil ] The url to the readme file, nil if not found
def readme_url def readme_url
@uri.merge('readme.txt').to_s %w{readme.txt README.txt}.each do |readme|
url = @uri.merge(readme).to_s
return url if url_is_200?(url)
end
nil
end end
# @return [ Boolean ] # @return [ Boolean ]
def has_changelog? def has_changelog?
Browser.get(changelog_url).code == 200 ? true : false url_is_200?(changelog_url)
end
# Checks if the url status code is 200
#
# @param [ String ] url
#
# @return [ Boolean ] True if the url status is 200
def url_is_200?(url)
Browser.get(url).code == 200
end end
# @return [ String ] The url to the changelog file # @return [ String ] The url to the changelog file

View File

@@ -6,7 +6,6 @@ describe WpItem do
it_behaves_like 'WpItem::Existable' it_behaves_like 'WpItem::Existable'
it_behaves_like 'WpItem::Findable#Found_From=' it_behaves_like 'WpItem::Findable#Found_From='
it_behaves_like 'WpItem::Infos' do it_behaves_like 'WpItem::Infos' do
let(:readme_url) { uri.merge('readme.txt').to_s }
let(:changelog_url) { uri.merge('changelog.txt').to_s } let(:changelog_url) { uri.merge('changelog.txt').to_s }
let(:error_log_url) { uri.merge('error_log').to_s } let(:error_log_url) { uri.merge('error_log').to_s }
end end

View File

@@ -4,30 +4,46 @@ shared_examples 'WpItem::Infos' do
# 3 expected urls have to be set in the described class (or subject) # 3 expected urls have to be set in the described class (or subject)
# e.g : # e.g :
# let(:readme_url) { }
# let(:changelog_url) { } # let(:changelog_url) { }
# let(:error_log_url) { } # let(:error_log_url) { }
describe '#readme_url' do describe '#readme_url' do
it 'returns the correct url' do after { subject.readme_url.should === @expected }
subject.readme_url.should == readme_url
it 'returns nil' do
stub_request(:get, /.*/).to_return(status: 404)
@expected = nil
end
context 'when the file exists' do
%w{readme.txt README.txt}.each do |readme|
it 'returns the correct url' do
url = uri.merge(readme).to_s
@expected = url
stub_request(:get, %r{^(?!#{url})}).to_return(status: 404)
stub_request(:get, url).to_return(status: 200)
end
end
end end
end end
describe '#has_readme?' do describe '#has_readme?' do
after :each do after do
stub_request(:get, subject.readme_url).to_return(status: @status) subject.stub(readme_url: @stub)
subject.has_readme?.should === @expected subject.has_readme?.should === @expected
end end
it 'returns true on a 200' do context 'when readme_url is nil'
@status = 200 it 'returns false' do
@expected = true @stub = nil
@expected = false
end end
it 'returns false otherwise' do context 'when readme_url is not nil'
@status = 404 it 'returns true' do
@expected = false @stub = uri.merge('readme.txt').to_s
@expected = true
end end
end end

View File

@@ -4,6 +4,7 @@ shared_examples 'WpItem::Versionable' do
describe '#version' do describe '#version' do
let(:fixtures_dir) { MODELS_FIXTURES + '/wp_item/versionable' } let(:fixtures_dir) { MODELS_FIXTURES + '/wp_item/versionable' }
let(:readme_url) { subject.uri.merge('readme.txt').to_s }
context 'when the version is already set' do context 'when the version is already set' do
it 'returns it' do it 'returns it' do
@@ -14,7 +15,7 @@ shared_examples 'WpItem::Versionable' do
context 'otherwise' do context 'otherwise' do
after do after do
stub_request_to_fixture(url: subject.readme_url, fixture: fixtures_dir + @file) stub_request_to_fixture(url: readme_url, fixture: fixtures_dir + @file)
subject.version.should == @expected subject.version.should == @expected
end end

View File

@@ -21,11 +21,12 @@ shared_examples 'WpTheme::Versionable' do
end end
context 'when the version is not found' do context 'when the version is not found' do
let(:file) { 'twentyeleven-unknow.css' } let(:file) { 'twentyeleven-unknow.css' }
let(:readme_url) { subject.uri.merge('readme.txt').to_s }
context 'from the style_url' do context 'from the style_url' do
it 'gets it from the readme' do it 'gets it from the readme' do
stub_request(:get, subject.readme_url).to_return(status: 200, body: 'Stable Tag: 1.3.4') stub_request(:get, readme_url).to_return(status: 200, body: 'Stable Tag: 1.3.4')
@file = file @file = file
@expected = '1.3.4' @expected = '1.3.4'
@@ -34,7 +35,8 @@ shared_examples 'WpTheme::Versionable' do
context 'from both style & readme' do context 'from both style & readme' do
it 'returns nil' do it 'returns nil' do
stub_request(:get, subject.readme_url).to_return(status: 404) subject.stub(readme_url: readme_url)
stub_request(:get, readme_url).to_return(status: 404)
@file = file @file = file
@expected = nil @expected = nil