
Anywhere we can use `blob/master` we can use `blob/HEAD` instead. This will make life easier if we ever rename our default branch in future (once/if Git and GitHub provides the necessary tooling to do so).
216 lines
6.3 KiB
Ruby
216 lines
6.3 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
require "rubocops/rubocop-cask"
|
|
require "test/rubocops/cask/shared_examples/cask_cop"
|
|
|
|
describe RuboCop::Cop::Cask::HomepageMatchesUrl do
|
|
include CaskCop
|
|
|
|
subject(:cop) { described_class.new }
|
|
|
|
context "when the url matches the homepage and there is no comment" do
|
|
let(:source) do
|
|
<<-CASK.undent
|
|
cask 'foo' do
|
|
url 'https://foo.brew.sh/foo.zip'
|
|
homepage 'https://foo.brew.sh'
|
|
end
|
|
CASK
|
|
end
|
|
|
|
include_examples "does not report any offenses"
|
|
end
|
|
|
|
context "when the url matches the homepage and the url stanza has " \
|
|
"a referrer and no interpolation" do
|
|
let(:source) do
|
|
<<-CASK.undent
|
|
cask 'foo' do
|
|
url 'https://foo.brew.sh/foo.zip',
|
|
referrer: 'https://brew.sh/foo/'
|
|
homepage 'https://foo.brew.sh'
|
|
end
|
|
CASK
|
|
end
|
|
|
|
include_examples "does not report any offenses"
|
|
end
|
|
|
|
context "when the url matches the homepage and the url stanza has " \
|
|
"a referrer and interpolation" do
|
|
let(:source) do
|
|
<<-CASK.undent
|
|
cask 'foo' do
|
|
version '1.8.0_72,8.13.0.5'
|
|
url "https://foo.brew.sh/foo-\#{version.after_comma}-\#{version.minor}.\#{version.patch}.\#{version.before_comma.sub(\%r{.*_}, '')}.zip",
|
|
referrer: 'https://brew.sh/foo/'
|
|
homepage 'https://foo.brew.sh'
|
|
end
|
|
CASK
|
|
end
|
|
|
|
include_examples "does not report any offenses"
|
|
end
|
|
|
|
context "when the url matches the homepage but there is a comment " \
|
|
"which does not match the url" do
|
|
let(:source) do
|
|
<<-CASK.undent
|
|
cask 'foo' do
|
|
# this is just a comment with information
|
|
url 'https://brew.sh/foo.zip'
|
|
homepage 'https://brew.sh'
|
|
end
|
|
CASK
|
|
end
|
|
|
|
include_examples "does not report any offenses"
|
|
end
|
|
|
|
context "when the url matches the homepage " \
|
|
"but there is a comment matching the url" do
|
|
let(:source) do
|
|
<<-CASK.undent
|
|
cask 'foo' do
|
|
# foo.brew.sh was verified as official when first introduced to the cask
|
|
url 'https://foo.brew.sh/foo.zip'
|
|
homepage 'https://foo.brew.sh'
|
|
end
|
|
CASK
|
|
end
|
|
let(:expected_offenses) do
|
|
[{
|
|
message: "The URL's domain `foo.brew.sh` matches the homepage " \
|
|
"`foo.brew.sh`, the comment above the `url` stanza is " \
|
|
"unnecessary",
|
|
severity: :convention,
|
|
line: 2,
|
|
column: 2,
|
|
source: "# foo.brew.sh was verified as official when " \
|
|
"first introduced to the cask",
|
|
}]
|
|
end
|
|
|
|
include_examples "reports offenses"
|
|
end
|
|
|
|
context "when the url does not match the homepage" do
|
|
context "when there is a comment matching the url " \
|
|
"but not matching the expected format" do
|
|
let(:source) do
|
|
<<-CASK.undent
|
|
cask 'foo' do
|
|
# brew.sh was verified as official
|
|
url 'https://brew.sh/foo.zip'
|
|
homepage 'https://foo.example.org'
|
|
end
|
|
CASK
|
|
end
|
|
let(:expected_offenses) do
|
|
[{
|
|
message: "`# brew.sh was verified as official` does not " \
|
|
"match the expected comment format. For details, see " \
|
|
"https://github.com/Homebrew/homebrew-cask/blob/HEAD/doc/" \
|
|
"cask_language_reference/stanzas/url.md#when-url-and-homepage-hostnames-differ-add-a-comment",
|
|
severity: :convention,
|
|
line: 2,
|
|
column: 2,
|
|
source: "# brew.sh was verified as official",
|
|
}]
|
|
end
|
|
|
|
include_examples "reports offenses"
|
|
end
|
|
|
|
context "when there is a comment matching the url " \
|
|
"and does not have slashes" do
|
|
let(:source) do
|
|
<<-CASK.undent
|
|
cask 'foo' do
|
|
# brew.sh was verified as official when first introduced to the cask
|
|
url 'https://brew.sh/foo.zip'
|
|
homepage 'https://foo.example.org'
|
|
end
|
|
CASK
|
|
end
|
|
|
|
include_examples "does not report any offenses"
|
|
end
|
|
|
|
context "when there is a comment matching the url and has slashes" do
|
|
let(:source) do
|
|
<<-CASK.undent
|
|
cask 'foo' do
|
|
# brew.sh/vendor/app was verified as official when first introduced to the cask
|
|
url 'https://downloads.brew.sh/vendor/app/foo.zip'
|
|
homepage 'https://vendor.example.org/app/'
|
|
end
|
|
CASK
|
|
end
|
|
|
|
include_examples "does not report any offenses"
|
|
end
|
|
|
|
context "when there is a comment which does not match the url" do
|
|
let(:source) do
|
|
<<-CASK.undent
|
|
cask 'foo' do
|
|
# brew.sh was verified as official when first introduced to the cask
|
|
url 'https://example.org/foo.zip'
|
|
homepage 'https://foo.brew.sh'
|
|
end
|
|
CASK
|
|
end
|
|
let(:expected_offenses) do
|
|
[{
|
|
message: "`brew.sh` does not match `example.org/foo.zip`",
|
|
severity: :convention,
|
|
line: 2,
|
|
column: 2,
|
|
source: "# brew.sh was verified as official when " \
|
|
"first introduced to the cask",
|
|
}]
|
|
end
|
|
|
|
include_examples "reports offenses"
|
|
end
|
|
|
|
context "when the comment is missing" do
|
|
let(:source) do
|
|
<<-CASK.undent
|
|
cask 'foo' do
|
|
url 'https://brew.sh/foo.zip'
|
|
homepage 'https://example.org'
|
|
end
|
|
CASK
|
|
end
|
|
let(:expected_offenses) do
|
|
[{
|
|
message: "`brew.sh` does not match `example.org`, a comment " \
|
|
"has to be added above the `url` stanza. For details, see " \
|
|
"https://github.com/Homebrew/homebrew-cask/blob/HEAD/doc/" \
|
|
"cask_language_reference/stanzas/url.md#when-url-and-homepage-hostnames-differ-add-a-comment",
|
|
severity: :convention,
|
|
line: 2,
|
|
column: 2,
|
|
source: "url 'https://brew.sh/foo.zip'",
|
|
}]
|
|
end
|
|
|
|
include_examples "reports offenses"
|
|
end
|
|
end
|
|
|
|
context "when there is no homepage" do
|
|
let(:source) do
|
|
<<-CASK.undent
|
|
cask 'foo' do
|
|
url 'https://brew.sh/foo.zip'
|
|
end
|
|
CASK
|
|
end
|
|
|
|
include_examples "does not report any offenses"
|
|
end
|
|
end
|