forked from rubocop/rubocop
/
gem_version_spec.rb
84 lines (75 loc) · 2.76 KB
/
gem_version_spec.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
# frozen_string_literal: true
RSpec.describe RuboCop::Cop::Bundler::GemVersion, :config do
context 'when EnforcedStyle is set to required (default)' do
let(:cop_config) do
{
'EnforcedStyle' => 'required',
'AllowedGems' => ['rspec']
}
end
it 'flags gems that do not specify a version' do
expect_offense(<<~RUBY)
gem 'rubocop'
^^^^^^^^^^^^^ Gem version specification is required.
gem 'rubocop', require: false
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Gem version specification is required.
gem 'rubocop', tag: '1.2.0'
^^^^^^^^^^^^^^^^^^^^^^^^^^^ Gem version specification is required.
RUBY
end
it 'does not flag gems with a specified version' do
expect_no_offenses(<<~RUBY)
gem 'rubocop', '>=1.10.0'
gem 'rubocop', '~> 1'
gem 'rubocop', '~> 1.12', require: false
gem 'rubocop', '>= 1.5.0', '< 1.10.0', git: 'https://github.com/rubocop/rubocop'
gem 'rubocop', github: 'rubocop/rubocop', tag: 'v1'
gem 'rubocop', git: 'https://github.com/rubocop/rubocop', ref: 'b3f37bc7f'
gem 'foobar', bitbucket: 'foo/bar', tag: 'v1'
RUBY
end
it 'does not flag gems included in AllowedGems metadata' do
expect_no_offenses(<<~RUBY)
gem 'rspec'
RUBY
end
end
context 'when EnforcedStyle is set to forbidden' do
let(:cop_config) do
{
'EnforcedStyle' => 'forbidden',
'AllowedGems' => ['rspec']
}
end
it 'flags gems that specify a gem version' do
expect_offense(<<~RUBY)
gem 'rubocop', '~> 1'
^^^^^^^^^^^^^^^^^^^^^ Gem version specification is forbidden.
gem 'rubocop', '>=1.10.0'
^^^^^^^^^^^^^^^^^^^^^^^^^ Gem version specification is forbidden.
gem 'rubocop', '~> 1.12', require: false
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Gem version specification is forbidden.
gem 'rubocop', '>= 1.5.0', '< 1.10.0', git: 'https://github.com/rubocop/rubocop'
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Gem version specification is forbidden.
RUBY
end
it 'does not flag gems without a specified version' do
expect_no_offenses(<<~RUBY)
gem 'rubocop'
gem 'rubocop', require: false
RUBY
end
it 'does not flag gems included in AllowedGems metadata' do
expect_no_offenses(<<~RUBY)
gem 'rspec', '~> 3.10'
RUBY
end
it 'does not flag gems using git source with tag or ref' do
expect_no_offenses(<<~RUBY)
gem 'rubocop', github: 'rubocop/rubocop', tag: 'v1'
gem 'rubocop', git: 'https://github.com/rubocop/rubocop', ref: 'b3f37bc7f'
gem 'foobar', bitbucket: 'foo/bar', tag: 'v1'
RUBY
end
end
end