2017-07-19 01:14:14 +05:30
require " rubocop "
require " rubocop/rspec/support "
require_relative " ../../extend/string "
require_relative " ../../rubocops/urls_cop "
describe RuboCop :: Cop :: FormulaAudit :: Urls do
subject ( :cop ) { described_class . new }
context " When auditing urls " do
it " with offenses " do
formulas = [ {
" url " = > " https://ftpmirror.gnu.org/lightning/lightning-2.1.0.tar.gz " ,
" msg " = > 'Please use "https://ftp.gnu.org/gnu/lightning/lightning-2.1.0.tar.gz" instead of https://ftpmirror.gnu.org/lightning/lightning-2.1.0.tar.gz.' ,
" col " = > 2 ,
} , {
" url " = > " https://fossies.org/linux/privat/monit-5.23.0.tar.gz " ,
" msg " = > " Please don't use fossies.org in the url (using as a mirror is fine) " ,
" col " = > 2 ,
} , {
" url " = > " http://tools.ietf.org/tools/rfcmarkup/rfcmarkup-1.119.tgz " ,
" msg " = > " Please use https:// for http://tools.ietf.org/tools/rfcmarkup/rfcmarkup-1.119.tgz " ,
" col " = > 2 ,
} , {
" url " = > " http://search.mcpan.org/CPAN/authors/id/Z/ZE/ZEFRAM/Perl4-CoreLibs-0.003.tar.gz " ,
" msg " = > " http://search.mcpan.org/CPAN/authors/id/Z/ZE/ZEFRAM/Perl4-CoreLibs-0.003.tar.gz should be `https://cpan.metacpan.org/authors/id/Z/ZE/ZEFRAM/Perl4-CoreLibs-0.003.tar.gz` " ,
" col " = > 2 ,
} , {
" url " = > " http://ftp.gnome.org/pub/GNOME/binaries/mac/banshee/banshee-2.macosx.intel.dmg " ,
" msg " = > " http://ftp.gnome.org/pub/GNOME/binaries/mac/banshee/banshee-2.macosx.intel.dmg should be `https://download.gnome.org/binaries/mac/banshee/banshee-2.macosx.intel.dmg` " ,
" col " = > 2 ,
2017-07-20 01:51:43 +05:30
} , {
" url " = > " git://anonscm.debian.org/users/foo/foostrap.git " ,
" msg " = > " git://anonscm.debian.org/users/foo/foostrap.git should be `https://anonscm.debian.org/git/users/foo/foostrap.git` " ,
" col " = > 2 ,
} , {
" url " = > " ftp://ftp.mirrorservice.org/foo-1.tar.gz " ,
" msg " = > " Please use https:// for ftp://ftp.mirrorservice.org/foo-1.tar.gz " ,
" col " = > 2 ,
} , {
" url " = > " ftp://ftp.cpan.org/pub/CPAN/foo-1.tar.gz " ,
" msg " = > " ftp://ftp.cpan.org/pub/CPAN/foo-1.tar.gz should be `http://search.cpan.org/CPAN/foo-1.tar.gz` " ,
" col " = > 2 ,
} , {
" url " = > " http://sourceforge.net/projects/something/files/Something-1.2.3.dmg " ,
" msg " = > " Use https://downloads.sourceforge.net to get geolocation (url is http://sourceforge.net/projects/something/files/Something-1.2.3.dmg). " ,
" col " = > 2 ,
} , {
" url " = > " https://downloads.sourceforge.net/project/foo/download " ,
" msg " = > " Don't use /download in SourceForge urls (url is https://downloads.sourceforge.net/project/foo/download). " ,
" col " = > 2 ,
} , {
" url " = > " https://sourceforge.net/project/foo " ,
" msg " = > " Use https://downloads.sourceforge.net to get geolocation (url is https://sourceforge.net/project/foo). " ,
" col " = > 2 ,
} , {
" url " = > " http://prdownloads.sourceforge.net/foo/foo-1.tar.gz " ,
2017-08-17 11:41:58 +05:30
" msg " = > <<-EOS.undent.chomp,
Don ' t use prdownloads in SourceForge urls ( url is http : / / prdownloads . sourceforge . net / foo / foo - 1 . tar . gz ) .
See : http : / / librelist . com / browser / homebrew / 2011 / 1 / 12 / prdownloads - is - bad /
EOS
2017-07-20 01:51:43 +05:30
" col " = > 2 ,
} , {
" url " = > " http://foo.dl.sourceforge.net/sourceforge/foozip/foozip_1.0.tar.bz2 " ,
" msg " = > " Don't use specific dl mirrors in SourceForge urls (url is http://foo.dl.sourceforge.net/sourceforge/foozip/foozip_1.0.tar.bz2). " ,
" col " = > 2 ,
} , {
" url " = > " http://downloads.sourceforge.net/project/foo/foo/2/foo-2.zip " ,
" msg " = > " Please use https:// for http://downloads.sourceforge.net/project/foo/foo/2/foo-2.zip " ,
" col " = > 2 ,
} , {
" url " = > " http://http.debian.net/debian/dists/foo/ " ,
2017-08-17 11:41:58 +05:30
" msg " = > <<-EOS.undent,
Please use a secure mirror for Debian URLs .
We recommend :
https : / /mi rrors . ocf . berkeley . edu / debian / dists / foo /
EOS
2017-07-20 01:51:43 +05:30
" col " = > 2 ,
} , {
" url " = > " http://foo.googlecode.com/files/foo-1.0.zip " ,
" msg " = > " Please use https:// for http://foo.googlecode.com/files/foo-1.0.zip " ,
" col " = > 2 ,
} , {
" url " = > " git://github.com/foo.git " ,
" msg " = > " Please use https:// for git://github.com/foo.git " ,
" col " = > 2 ,
} , {
" url " = > " git://gitorious.org/foo/foo5 " ,
" msg " = > " Please use https:// for git://gitorious.org/foo/foo5 " ,
" col " = > 2 ,
} , {
" url " = > " http://github.com/foo/foo5.git " ,
" msg " = > " Please use https:// for http://github.com/foo/foo5.git " ,
" col " = > 2 ,
} , {
" url " = > " https://github.com/foo/foobar/archive/master.zip " ,
" msg " = > " Use versioned rather than branch tarballs for stable checksums. " ,
" col " = > 2 ,
} , {
" url " = > " https://github.com/foo/bar/tarball/v1.2.3 " ,
" msg " = > " Use /archive/ URLs for GitHub tarballs (url is https://github.com/foo/bar/tarball/v1.2.3). " ,
" col " = > 2 ,
} , {
" url " = > " https://codeload.github.com/foo/bar/tar.gz/v0.1.1 " ,
2017-08-17 11:41:58 +05:30
" msg " = > <<-EOS.undent,
Use GitHub archive URLs :
https : / / github . com / foo / bar / archive / v0 . 1 . 1 . tar . gz
Rather than codeload :
https : / / codeload . github . com / foo / bar / tar . gz / v0 . 1 . 1
EOS
2017-07-20 01:51:43 +05:30
" col " = > 2 ,
} , {
" url " = > " https://central.maven.org/maven2/com/bar/foo/1.1/foo-1.1.jar " ,
" msg " = > " https://central.maven.org/maven2/com/bar/foo/1.1/foo-1.1.jar should be `https://search.maven.org/remotecontent?filepath=com/bar/foo/1.1/foo-1.1.jar` " ,
" col " = > 2 ,
2017-07-19 01:14:14 +05:30
} ]
formulas . each do | formula |
source = <<-EOS.undent
class Foo < Formula
desc " foo "
url " #{ formula [ " url " ] } "
end
EOS
expected_offenses = [ { message : formula [ " msg " ] ,
severity : :convention ,
line : 3 ,
column : formula [ " col " ] ,
source : source } ]
2017-10-07 22:31:23 +02:00
inspect_source ( source )
2017-07-19 01:14:14 +05:30
expected_offenses . zip ( cop . offenses . reverse ) . each do | expected , actual |
expect_offense ( expected , actual )
end
end
end
2017-07-20 01:51:43 +05:30
it " with offenses in stable/devel/head block " do
formulas = [ {
" url " = > " git://github.com/foo.git " ,
" msg " = > " Please use https:// for git://github.com/foo.git " ,
" col " = > 4 ,
} ]
formulas . each do | formula |
source = <<-EOS.undent
class Foo < Formula
desc " foo "
url " https://foo.com "
devel do
url " #{ formula [ " url " ] } " ,
:tag = > " v1.0.0-alpha.1 " ,
:revision = > " aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa "
version " 1.0.0-alpha.1 "
end
end
EOS
expected_offenses = [ { message : formula [ " msg " ] ,
severity : :convention ,
line : 6 ,
column : formula [ " col " ] ,
source : source } ]
2017-10-07 22:31:23 +02:00
inspect_source ( source )
2017-07-20 01:51:43 +05:30
expected_offenses . zip ( cop . offenses . reverse ) . each do | expected , actual |
expect_offense ( expected , actual )
end
end
end
it " with duplicate mirror " do
source = <<-EOS.undent
class Foo < Formula
desc " foo "
url " https://ftpmirror.fnu.org/foo/foo-1.0.tar.gz "
mirror " https://ftpmirror.fnu.org/foo/foo-1.0.tar.gz "
end
EOS
expected_offenses = [ { message : " URL should not be duplicated as a mirror: https://ftpmirror.fnu.org/foo/foo-1.0.tar.gz " ,
severity : :convention ,
line : 4 ,
column : 2 ,
source : source } ]
2017-10-07 22:31:23 +02:00
inspect_source ( source )
2017-07-20 01:51:43 +05:30
expected_offenses . zip ( cop . offenses . reverse ) . each do | expected , actual |
expect_offense ( expected , actual )
end
end
2017-07-19 01:14:14 +05:30
end
end
2017-07-30 12:57:57 +05:30
describe RuboCop :: Cop :: FormulaAuditStrict :: PyPiUrls do
subject ( :cop ) { described_class . new }
context " When auditing urls " do
it " with pypi offenses " do
formulas = [ {
" url " = > " https://pypi.python.org/packages/source/foo/foo-0.1.tar.gz " ,
" msg " = > " https://pypi.python.org/packages/source/foo/foo-0.1.tar.gz should be `https://files.pythonhosted.org/packages/source/foo/foo-0.1.tar.gz` " ,
" col " = > 2 ,
" corrected_url " = > " https://files.pythonhosted.org/packages/source/foo/foo-0.1.tar.gz " ,
} ]
formulas . each do | formula |
source = <<-EOS.undent
class Foo < Formula
desc " foo "
url " #{ formula [ " url " ] } "
end
EOS
corrected_source = <<-EOS.undent
class Foo < Formula
desc " foo "
url " #{ formula [ " corrected_url " ] } "
end
EOS
expected_offenses = [ { message : formula [ " msg " ] ,
severity : :convention ,
line : 3 ,
column : formula [ " col " ] ,
source : source } ]
2017-10-07 22:31:23 +02:00
inspect_source ( source )
2017-07-30 12:57:57 +05:30
# Check for expected offenses
expected_offenses . zip ( cop . offenses . reverse ) . each do | expected , actual |
expect_offense ( expected , actual )
end
# Check for expected auto corrected source
2017-10-07 22:31:23 +02:00
new_source = autocorrect_source ( source )
2017-07-30 12:57:57 +05:30
expect ( new_source ) . to eq ( corrected_source )
end
end
end
end