From b1ce7bdcc5e9a70fad7377e1cede8f8164640f7c Mon Sep 17 00:00:00 2001 From: erwanlr Date: Mon, 15 Apr 2013 15:01:06 +0200 Subject: [PATCH] Fixes #164 README.txt detection --- lib/common/models/wp_item/infos.rb | 21 ++++++++--- spec/lib/common/models/wp_item_spec.rb | 1 - spec/shared_examples/wp_item_infos.rb | 38 ++++++++++++++------ spec/shared_examples/wp_item_versionable.rb | 3 +- spec/shared_examples/wp_theme_versionable.rb | 8 +++-- 5 files changed, 51 insertions(+), 20 deletions(-) diff --git a/lib/common/models/wp_item/infos.rb b/lib/common/models/wp_item/infos.rb index dce401a3..ef3b5a62 100644 --- a/lib/common/models/wp_item/infos.rb +++ b/lib/common/models/wp_item/infos.rb @@ -7,17 +7,30 @@ class WpItem # @return [ Boolean ] def has_readme? - Browser.get(readme_url).code == 200 ? true : false + !readme_url.nil? 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 - @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 # @return [ Boolean ] 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 # @return [ String ] The url to the changelog file diff --git a/spec/lib/common/models/wp_item_spec.rb b/spec/lib/common/models/wp_item_spec.rb index 2c96fed5..84df9c32 100644 --- a/spec/lib/common/models/wp_item_spec.rb +++ b/spec/lib/common/models/wp_item_spec.rb @@ -6,7 +6,6 @@ describe WpItem do it_behaves_like 'WpItem::Existable' it_behaves_like 'WpItem::Findable#Found_From=' 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(:error_log_url) { uri.merge('error_log').to_s } end diff --git a/spec/shared_examples/wp_item_infos.rb b/spec/shared_examples/wp_item_infos.rb index 9b685a2e..eabfdb6a 100644 --- a/spec/shared_examples/wp_item_infos.rb +++ b/spec/shared_examples/wp_item_infos.rb @@ -4,30 +4,46 @@ shared_examples 'WpItem::Infos' do # 3 expected urls have to be set in the described class (or subject) # e.g : - # let(:readme_url) { } # let(:changelog_url) { } # let(:error_log_url) { } describe '#readme_url' do - it 'returns the correct url' do - subject.readme_url.should == readme_url + after { subject.readme_url.should === @expected } + + 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 describe '#has_readme?' do - after :each do - stub_request(:get, subject.readme_url).to_return(status: @status) + after do + subject.stub(readme_url: @stub) subject.has_readme?.should === @expected end - it 'returns true on a 200' do - @status = 200 - @expected = true + context 'when readme_url is nil' + it 'returns false' do + @stub = nil + @expected = false end - it 'returns false otherwise' do - @status = 404 - @expected = false + context 'when readme_url is not nil' + it 'returns true' do + @stub = uri.merge('readme.txt').to_s + @expected = true end end diff --git a/spec/shared_examples/wp_item_versionable.rb b/spec/shared_examples/wp_item_versionable.rb index 23b6d0e4..fadd434b 100644 --- a/spec/shared_examples/wp_item_versionable.rb +++ b/spec/shared_examples/wp_item_versionable.rb @@ -4,6 +4,7 @@ shared_examples 'WpItem::Versionable' do describe '#version' do 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 it 'returns it' do @@ -14,7 +15,7 @@ shared_examples 'WpItem::Versionable' do context 'otherwise' 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 end diff --git a/spec/shared_examples/wp_theme_versionable.rb b/spec/shared_examples/wp_theme_versionable.rb index 45ee1706..db010ad3 100644 --- a/spec/shared_examples/wp_theme_versionable.rb +++ b/spec/shared_examples/wp_theme_versionable.rb @@ -21,11 +21,12 @@ shared_examples 'WpTheme::Versionable' do end 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 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 @expected = '1.3.4' @@ -34,7 +35,8 @@ shared_examples 'WpTheme::Versionable' do context 'from both style & readme' 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 @expected = nil