rubocop-rspec 1.19.0 → 1.20.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 98cb4ed6eefcee97bb8b5dea2093bb2cab7abc99
4
- data.tar.gz: ce92dd968c520f5dbe633443262235b05f038cf1
2
+ SHA256:
3
+ metadata.gz: 75a86e91f1a68118254233b1bc1f34b78c8b96ce3e0f807bde3dc7a3450db2b8
4
+ data.tar.gz: 956ce60a540a49bf96425aeb3a856028600bff19a482dc5e90198e0419879b83
5
5
  SHA512:
6
- metadata.gz: c89f710f27e3fe8695428c11866a4f853a1397a5adece3f89963d73521edd8ea102f29e625756390d99d27afe2f33d620b0da3e761e361800eac04bef3f450f2
7
- data.tar.gz: 3464b491a898fa51fa8709fa632274b221f44529845bd291d892706bdc5e9fc99e1ea234fa54b331b6af1aa6544e57397c68add5cd4c96e37fd68b0f527d91d7
6
+ metadata.gz: bb066d3c753eb46efffb2acd402f9747a6673af7d8c7748c7c9f7ddec23d67533902dc851315d8750a97f194a8b2266b05c84835c41ff768f3240aa88c8b077d
7
+ data.tar.gz: 040ec718d9a63756636881881b6f8002ed40f04e1eb2a50efd5c2def669487b9d4184e430e9ecf45b39781f5593d064e1604c5b4549689f9fc575afbe0282c25
data/CHANGELOG.md CHANGED
@@ -2,6 +2,17 @@
2
2
 
3
3
  ## Master (Unreleased)
4
4
 
5
+ ## 1.20.0 (2017-11-09)
6
+
7
+ * Rename namespace `FactoryGirl` to `FactoryBot` following original library update. ([@walf443][])
8
+ * Fix exception in `RSpec/ReturnFromStub` on empty block. ([@yevhene][])
9
+ * Add `RSpec/ContextWording` cop. ([@pirj][], [@telmofcosta][])
10
+ * Fix `RSpec/SubjectStub` cop matches receive message inside all matcher. ([@walf443][])
11
+
12
+ ## 1.19.0 (2017-10-18)
13
+
14
+ Compatibility release so users can upgrade RuboCop to 0.51.0. No new features.
15
+
5
16
  ## 1.18.0 (2017-09-29)
6
17
 
7
18
  * Fix false positive in `Capybara/FeatureMethods`. ([@Darhazer][])
@@ -255,3 +266,7 @@
255
266
  [@bmorrall]: https:/github.com/bmorrall
256
267
  [@zverok]: https:/github.com/zverok
257
268
  [@timrogers]: https://github.com/timrogers
269
+ [@yevhene]: https://github.com/yevhene
270
+ [@walf443]: https://github.com/walf443
271
+ [@pirj]: https://github.com/pirj
272
+ [@telmofcosta]: https://github.com/telmofcosta
data/README.md CHANGED
@@ -98,11 +98,7 @@ RSpec/FilePath:
98
98
 
99
99
  ## Contributing
100
100
 
101
- 1. Fork it
102
- 2. Create your feature branch (`git checkout -b my-new-feature`)
103
- 3. Commit your changes (`git commit -am 'Add some feature'`)
104
- 4. Push to the branch (`git push origin my-new-feature`)
105
- 5. Create new Pull Request
101
+ Checkout the [contribution guidelines](.github/CONTRIBUTING.md)
106
102
 
107
103
  ## License
108
104
 
data/config/default.yml CHANGED
@@ -4,7 +4,7 @@ AllCops:
4
4
  Patterns:
5
5
  - _spec.rb
6
6
  - "(?:^|/)spec/"
7
- RSpec/FactoryGirl:
7
+ RSpec/FactoryBot:
8
8
  Patterns:
9
9
  - spec/factories/**/*.rb
10
10
  - features/support/factories/**/*.rb
@@ -43,6 +43,14 @@ RSpec/BeforeAfterAll:
43
43
  - spec/support/**/*.rb
44
44
  StyleGuide: http://www.rubydoc.info/gems/rubocop-rspec/RuboCop/Cop/RSpec/BeforeAfterAll
45
45
 
46
+ RSpec/ContextWording:
47
+ Description: "`context` block descriptions should start with 'when', or 'with'."
48
+ Enabled: true
49
+ Prefixes:
50
+ - when
51
+ - with
52
+ StyleGuide: http://www.rubydoc.info/gems/rubocop-rspec/RuboCop/Cop/RSpec/ContextWording
53
+
46
54
  RSpec/DescribeClass:
47
55
  Description: Check that the first argument to the top level describe is a constant.
48
56
  Enabled: true
@@ -335,7 +343,7 @@ Capybara/FeatureMethods:
335
343
  Enabled: true
336
344
  StyleGuide: http://www.rubydoc.info/gems/rubocop-rspec/RuboCop/Cop/RSpec/Capybara/FeatureMethods
337
345
 
338
- FactoryGirl/DynamicAttributeDefinedStatically:
346
+ FactoryBot/DynamicAttributeDefinedStatically:
339
347
  Description: Prefer declaring dynamic attribute values in a block.
340
348
  Enabled: true
341
- StyleGuide: http://www.rubydoc.info/gems/rubocop-rspec/RuboCop/Cop/RSpec/FactoryGirl/DynamicAttributeDefinedStatically
349
+ StyleGuide: http://www.rubydoc.info/gems/rubocop-rspec/RuboCop/Cop/RSpec/FactoryBot/DynamicAttributeDefinedStatically
data/lib/rubocop-rspec.rb CHANGED
@@ -18,7 +18,7 @@ require 'rubocop/rspec/hook'
18
18
  require 'rubocop/cop/rspec/cop'
19
19
  require 'rubocop/rspec/align_let_brace'
20
20
  require 'rubocop/rspec/capybara'
21
- require 'rubocop/rspec/factory_girl'
21
+ require 'rubocop/rspec/factory_bot'
22
22
 
23
23
  RuboCop::RSpec::Inject.defaults!
24
24
 
@@ -31,6 +31,7 @@ require 'rubocop/cop/rspec/be_eql'
31
31
  require 'rubocop/cop/rspec/before_after_all'
32
32
  require 'rubocop/cop/rspec/capybara/current_path_expectation'
33
33
  require 'rubocop/cop/rspec/capybara/feature_methods'
34
+ require 'rubocop/cop/rspec/context_wording'
34
35
  require 'rubocop/cop/rspec/describe_class'
35
36
  require 'rubocop/cop/rspec/describe_method'
36
37
  require 'rubocop/cop/rspec/describe_symbol'
@@ -43,7 +44,7 @@ require 'rubocop/cop/rspec/example_wording'
43
44
  require 'rubocop/cop/rspec/expect_actual'
44
45
  require 'rubocop/cop/rspec/expect_in_hook'
45
46
  require 'rubocop/cop/rspec/expect_output'
46
- require 'rubocop/cop/rspec/factory_girl/dynamic_attribute_defined_statically'
47
+ require 'rubocop/cop/rspec/factory_bot/dynamic_attribute_defined_statically'
47
48
  require 'rubocop/cop/rspec/file_path'
48
49
  require 'rubocop/cop/rspec/focus'
49
50
  require 'rubocop/cop/rspec/hook_argument'
@@ -0,0 +1,63 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RuboCop
4
+ module Cop
5
+ module RSpec
6
+ # `context` block descriptions should start with 'when', or 'with'.
7
+ #
8
+ # @see https://github.com/reachlocal/rspec-style-guide#context-descriptions
9
+ # @see http://www.betterspecs.org/#contexts
10
+ #
11
+ # @example `Prefixes` configuration option, defaults: 'when', and 'with'
12
+ # Prefixes:
13
+ # - when
14
+ # - with
15
+ # - without
16
+ #
17
+ # @example
18
+ # # bad
19
+ # context 'the display name not present' do
20
+ # ...
21
+ # end
22
+ #
23
+ # # good
24
+ # context 'when the display name is not present' do
25
+ # ...
26
+ # end
27
+ class ContextWording < Cop
28
+ MSG = 'Start context description with %<prefixes>s.'.freeze
29
+
30
+ def_node_matcher :context_wording, <<-PATTERN
31
+ (block (send _ { :context :shared_context } $(str #bad_prefix?)) ...)
32
+ PATTERN
33
+
34
+ def on_block(node)
35
+ context_wording(node) do |context|
36
+ add_offense(context, message: message)
37
+ end
38
+ end
39
+
40
+ private
41
+
42
+ def bad_prefix?(description)
43
+ !prefixes.include?(description.split.first)
44
+ end
45
+
46
+ def prefixes
47
+ cop_config['Prefixes'] || []
48
+ end
49
+
50
+ def message
51
+ format(MSG, prefixes: joined_prefixes)
52
+ end
53
+
54
+ def joined_prefixes
55
+ quoted = prefixes.map { |prefix| "'#{prefix}'" }
56
+ return quoted.first if quoted.size == 1
57
+ quoted << "or #{quoted.pop}"
58
+ quoted.join(', ')
59
+ end
60
+ end
61
+ end
62
+ end
63
+ end
@@ -3,7 +3,7 @@
3
3
  module RuboCop
4
4
  module Cop
5
5
  module RSpec
6
- module FactoryGirl
6
+ module FactoryBot
7
7
  # Prefer declaring dynamic attribute values in a block.
8
8
  #
9
9
  # @example
@@ -72,7 +72,7 @@ module RuboCop
72
72
  return unless block
73
73
 
74
74
  _receiver, _args, body = *block
75
- unless dynamic?(body) # rubocop:disable Style/GuardClause
75
+ unless body && dynamic?(body) # rubocop:disable Style/GuardClause
76
76
  add_offense(
77
77
  node,
78
78
  location: :expression,
@@ -55,15 +55,26 @@ module RuboCop
55
55
  # expect(foo).to receive(:bar)
56
56
  # expect(foo).to receive(:bar).with(1)
57
57
  # expect(foo).to receive(:bar).with(1).and_return(2)
58
+ #
59
+ # @example source that not matches
60
+ # expect(foo).to all(receive(:bar))
61
+ #
58
62
  def_node_matcher :message_expectation?, <<-PATTERN
59
63
  {
60
64
  (send nil? :allow (send nil? %))
61
- (send (send nil? :expect (send nil? %)) :to #receive_message?)
65
+ (send (send nil? :expect (send nil? %)) :to #expectation?)
62
66
  }
63
67
  PATTERN
64
68
 
69
+ def_node_matcher :all_matcher?, '(send nil? :all ...)'
70
+
65
71
  def_node_search :receive_message?, '(send nil? :receive ...)'
66
72
 
73
+ def expectation?(node)
74
+ return if all_matcher?(node)
75
+ receive_message?(node)
76
+ end
77
+
67
78
  def on_block(node)
68
79
  return unless example_group?(node)
69
80
 
@@ -4,7 +4,7 @@ module RuboCop
4
4
  module RSpec
5
5
  # Builds a YAML config file from two config hashes
6
6
  class ConfigFormatter
7
- NAMESPACES = /^(#{Regexp.union('RSpec', 'Capybara', 'FactoryGirl')})/
7
+ NAMESPACES = /^(#{Regexp.union('RSpec', 'Capybara', 'FactoryBot')})/
8
8
  STYLE_GUIDE_BASE_URL = 'http://www.rubydoc.info/gems/rubocop-rspec/RuboCop/Cop/RSpec/'.freeze
9
9
 
10
10
  def initialize(config, descriptions)
@@ -0,0 +1,7 @@
1
+ module RuboCop
2
+ module RSpec
3
+ # RuboCop FactoryBot project namespace
4
+ module FactoryBot
5
+ end
6
+ end
7
+ end
@@ -4,7 +4,7 @@ module RuboCop
4
4
  module RSpec
5
5
  # Version information for the RSpec RuboCop plugin.
6
6
  module Version
7
- STRING = '1.19.0'.freeze
7
+ STRING = '1.20.0'.freeze
8
8
  end
9
9
  end
10
10
  end
@@ -7,10 +7,10 @@ RSpec.describe 'config/default.yml' do
7
7
  namespaces = {
8
8
  'rspec' => 'RSpec',
9
9
  'capybara' => 'Capybara',
10
- 'factory_girl' => 'FactoryGirl'
10
+ 'factory_bot' => 'FactoryBot'
11
11
  }
12
12
  glob = SpecHelper::ROOT.join('lib', 'rubocop', 'cop',
13
- 'rspec', '{capybara/,,factory_girl/}*.rb')
13
+ 'rspec', '{capybara/,,factory_bot/}*.rb')
14
14
  cop_names =
15
15
  Pathname.glob(glob).map do |file|
16
16
  file_name = file.basename('.rb').to_s
@@ -0,0 +1,62 @@
1
+ RSpec.describe RuboCop::Cop::RSpec::ContextWording, :config do
2
+ subject(:cop) { described_class.new(config) }
3
+
4
+ let(:cop_config) { { 'Prefixes' => %w[when with] } }
5
+
6
+ it 'skips describe blocks' do
7
+ expect_no_offenses(<<-RUBY)
8
+ describe 'the display name not present' do
9
+ end
10
+ RUBY
11
+ end
12
+
13
+ it 'finds context without `when` at the beginning' do
14
+ expect_offense(<<-RUBY)
15
+ context 'the display name not present' do
16
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Start context description with 'when', or 'with'.
17
+ end
18
+ RUBY
19
+ end
20
+
21
+ it 'finds shared_context without `when` at the beginning' do
22
+ expect_offense(<<-RUBY)
23
+ shared_context 'the display name not present' do
24
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Start context description with 'when', or 'with'.
25
+ end
26
+ RUBY
27
+ end
28
+
29
+ it "skips descriptions beginning with 'when'" do
30
+ expect_no_offenses(<<-RUBY)
31
+ context 'when the display name is not present' do
32
+ end
33
+ RUBY
34
+ end
35
+
36
+ it 'finds context without separate `when` at the beginning' do
37
+ expect_offense(<<-RUBY)
38
+ context 'whenever you do' do
39
+ ^^^^^^^^^^^^^^^^^ Start context description with 'when', or 'with'.
40
+ end
41
+ RUBY
42
+ end
43
+
44
+ context 'when configured' do
45
+ let(:cop_config) { { 'Prefixes' => %w[without] } }
46
+
47
+ it 'finds context without whitelisted prefixes at the beginning' do
48
+ expect_offense(<<-RUBY)
49
+ context 'when display name is present' do
50
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Start context description with 'without'.
51
+ end
52
+ RUBY
53
+ end
54
+
55
+ it 'skips descriptions with whitelisted prefixes at the beginning' do
56
+ expect_no_offenses(<<-RUBY)
57
+ context 'without a display name' do
58
+ end
59
+ RUBY
60
+ end
61
+ end
62
+ end
@@ -0,0 +1,91 @@
1
+ # frozen_string_literal: true
2
+
3
+ # rubocop:disable Metrics/LineLength
4
+ RSpec.describe RuboCop::Cop::RSpec::FactoryBot::DynamicAttributeDefinedStatically do
5
+ subject(:cop) { described_class.new(config) }
6
+
7
+ let(:config) { RuboCop::Config.new }
8
+
9
+ %w[FactoryBot FactoryGirl].each do |factory_bot|
10
+ context "when using #{factory_bot}" do
11
+ it 'registers an offense for offending code' do
12
+ expect_offense(<<-RUBY)
13
+ #{factory_bot}.define do
14
+ factory :post do
15
+ published_at 1.day.from_now
16
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^ Use a block to set a dynamic value to an attribute.
17
+ status [:draft, :published].sample
18
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Use a block to set a dynamic value to an attribute.
19
+ created_at 1.day.ago
20
+ ^^^^^^^^^^^^^^^^^^^^ Use a block to set a dynamic value to an attribute.
21
+ end
22
+ end
23
+ RUBY
24
+ end
25
+
26
+ it 'registers an offense in a trait' do
27
+ expect_offense(<<-RUBY)
28
+ #{factory_bot}.define do
29
+ factory :post do
30
+ title "Something"
31
+ trait :published do
32
+ published_at 1.day.from_now
33
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^ Use a block to set a dynamic value to an attribute.
34
+ end
35
+ end
36
+ end
37
+ RUBY
38
+ end
39
+
40
+ it 'accepts' do
41
+ expect_no_offenses(<<-RUBY)
42
+ #{factory_bot}.define do
43
+ factory :post do
44
+ trait :published do
45
+ published_at { 1.day.from_now }
46
+ end
47
+ created_at { 1.day.ago }
48
+ status :draft
49
+ comments_count 0
50
+ title "Static"
51
+ description { FFaker::Lorem.paragraph(10) }
52
+ tag Tag::MAGIC
53
+ end
54
+ end
55
+ RUBY
56
+ end
57
+
58
+ it 'does not add offense if out of factory girl block' do
59
+ expect_no_offenses(<<-RUBY)
60
+ status [:draft, :published].sample
61
+ published_at 1.day.from_now
62
+ created_at 1.day.ago
63
+ RUBY
64
+ end
65
+
66
+ bad = <<-RUBY
67
+ #{factory_bot}.define do
68
+ factory :post do
69
+ status([:draft, :published].sample)
70
+ published_at 1.day.from_now
71
+ created_at(1.day.ago)
72
+ updated_at Time.current
73
+ end
74
+ end
75
+ RUBY
76
+
77
+ corrected = <<-RUBY
78
+ #{factory_bot}.define do
79
+ factory :post do
80
+ status { [:draft, :published].sample }
81
+ published_at { 1.day.from_now }
82
+ created_at { 1.day.ago }
83
+ updated_at { Time.current }
84
+ end
85
+ end
86
+ RUBY
87
+
88
+ include_examples 'autocorrect', bad, corrected
89
+ end
90
+ end
91
+ end
@@ -17,6 +17,15 @@ RSpec.describe RuboCop::Cop::RSpec::ReturnFromStub, :config do
17
17
  RUBY
18
18
  end
19
19
 
20
+ it 'finds empty values returned from block' do
21
+ expect_offense(<<-RUBY)
22
+ it do
23
+ allow(Foo).to receive(:bar) {}
24
+ ^^^^^^^^^^^^^ Use `and_return` for static values.
25
+ end
26
+ RUBY
27
+ end
28
+
20
29
  it 'finds array with only static values returned from block' do
21
30
  expect_offense(<<-RUBY)
22
31
  it do
@@ -1,7 +1,7 @@
1
1
  RSpec.describe RuboCop::Cop::RSpec::SharedContext do
2
2
  subject(:cop) { described_class.new }
3
3
 
4
- context 'shared_context' do
4
+ describe 'shared_context' do
5
5
  it 'does not register an offense for empty contexts' do
6
6
  expect_no_offenses(<<-RUBY)
7
7
  shared_context 'empty' do
@@ -55,7 +55,7 @@ RSpec.describe RuboCop::Cop::RSpec::SharedContext do
55
55
  end
56
56
  end
57
57
 
58
- context 'shared_examples' do
58
+ describe 'shared_examples' do
59
59
  it 'does not register an offense for empty examples' do
60
60
  expect_no_offenses(<<-RUBY)
61
61
  shared_examples 'empty' do
@@ -59,6 +59,17 @@ RSpec.describe RuboCop::Cop::RSpec::SubjectStub do
59
59
  RUBY
60
60
  end
61
61
 
62
+ it 'ignores stub when inside all matcher' do
63
+ expect_no_offenses(<<-RUBY)
64
+ describe Foo do
65
+ subject(:foo) { [Object.new] }
66
+ it 'tries to trick rubocop-rspec' do
67
+ expect(foo).to all(receive(:baz))
68
+ end
69
+ end
70
+ RUBY
71
+ end
72
+
62
73
  it 'flags nested subject stubs when nested subject uses same name' do
63
74
  expect_offense(<<-RUBY)
64
75
  describe Foo do
@@ -36,7 +36,7 @@ RSpec.describe RuboCop::RSpec::Example do
36
36
  expect(described_class.new(node).to_node).to be(node)
37
37
  end
38
38
 
39
- context 'value object semantics' do
39
+ describe 'value object semantics' do
40
40
  it 'compares by value' do
41
41
  aggregate_failures 'equality semantics' do
42
42
  expect(example('it("foo")')).to eq(example('it("foo")'))
@@ -11,7 +11,7 @@ RSpec.describe RuboCop::RSpec::Language::SelectorSet do
11
11
  expect(selector_set).not_to eq(described_class.new(%i[foo bar baz]))
12
12
  end
13
13
 
14
- context '#include?' do
14
+ describe '#include?' do
15
15
  it 'returns false for selectors not in the set' do
16
16
  expect(selector_set.include?(:baz)).to be(false)
17
17
  end
@@ -21,25 +21,25 @@ RSpec.describe RuboCop::RSpec::Language::SelectorSet do
21
21
  end
22
22
  end
23
23
 
24
- context '#node_pattern' do
24
+ describe '#node_pattern' do
25
25
  it 'builds a node pattern' do
26
26
  expect(selector_set.node_pattern).to eql(':foo :bar')
27
27
  end
28
28
  end
29
29
 
30
- context '#node_pattern_union' do
30
+ describe '#node_pattern_union' do
31
31
  it 'builds a node pattern union' do
32
32
  expect(selector_set.node_pattern_union).to eql('{:foo :bar}')
33
33
  end
34
34
  end
35
35
 
36
- context '#send_pattern' do
36
+ describe '#send_pattern' do
37
37
  it 'builds a send matching pattern' do
38
38
  expect(selector_set.send_pattern).to eql('(send _ {:foo :bar} ...)')
39
39
  end
40
40
  end
41
41
 
42
- context '#block_pattern' do
42
+ describe '#block_pattern' do
43
43
  it 'builds a block matching pattern' do
44
44
  expect(selector_set.block_pattern).to eql(
45
45
  '(block (send _ {:foo :bar} ...) ...)'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rubocop-rspec
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.19.0
4
+ version: 1.20.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - John Backus
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2017-10-19 00:00:00.000000000 Z
13
+ date: 2017-11-09 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: rubocop
@@ -110,6 +110,7 @@ files:
110
110
  - lib/rubocop/cop/rspec/before_after_all.rb
111
111
  - lib/rubocop/cop/rspec/capybara/current_path_expectation.rb
112
112
  - lib/rubocop/cop/rspec/capybara/feature_methods.rb
113
+ - lib/rubocop/cop/rspec/context_wording.rb
113
114
  - lib/rubocop/cop/rspec/cop.rb
114
115
  - lib/rubocop/cop/rspec/describe_class.rb
115
116
  - lib/rubocop/cop/rspec/describe_method.rb
@@ -123,7 +124,7 @@ files:
123
124
  - lib/rubocop/cop/rspec/expect_actual.rb
124
125
  - lib/rubocop/cop/rspec/expect_in_hook.rb
125
126
  - lib/rubocop/cop/rspec/expect_output.rb
126
- - lib/rubocop/cop/rspec/factory_girl/dynamic_attribute_defined_statically.rb
127
+ - lib/rubocop/cop/rspec/factory_bot/dynamic_attribute_defined_statically.rb
127
128
  - lib/rubocop/cop/rspec/file_path.rb
128
129
  - lib/rubocop/cop/rspec/focus.rb
129
130
  - lib/rubocop/cop/rspec/hook_argument.rb
@@ -165,7 +166,7 @@ files:
165
166
  - lib/rubocop/rspec/description_extractor.rb
166
167
  - lib/rubocop/rspec/example.rb
167
168
  - lib/rubocop/rspec/example_group.rb
168
- - lib/rubocop/rspec/factory_girl.rb
169
+ - lib/rubocop/rspec/factory_bot.rb
169
170
  - lib/rubocop/rspec/hook.rb
170
171
  - lib/rubocop/rspec/inject.rb
171
172
  - lib/rubocop/rspec/language.rb
@@ -186,6 +187,7 @@ files:
186
187
  - spec/rubocop/cop/rspec/before_after_all_spec.rb
187
188
  - spec/rubocop/cop/rspec/capybara/current_path_expectation_spec.rb
188
189
  - spec/rubocop/cop/rspec/capybara/feature_methods_spec.rb
190
+ - spec/rubocop/cop/rspec/context_wording_spec.rb
189
191
  - spec/rubocop/cop/rspec/cop_spec.rb
190
192
  - spec/rubocop/cop/rspec/describe_class_spec.rb
191
193
  - spec/rubocop/cop/rspec/describe_method_spec.rb
@@ -199,7 +201,7 @@ files:
199
201
  - spec/rubocop/cop/rspec/expect_actual_spec.rb
200
202
  - spec/rubocop/cop/rspec/expect_in_hook_spec.rb
201
203
  - spec/rubocop/cop/rspec/expect_output_spec.rb
202
- - spec/rubocop/cop/rspec/factory_girl/dynamic_attribute_defined_statically_spec.rb
204
+ - spec/rubocop/cop/rspec/factory_bot/dynamic_attribute_defined_statically_spec.rb
203
205
  - spec/rubocop/cop/rspec/file_path_spec.rb
204
206
  - spec/rubocop/cop/rspec/focus_spec.rb
205
207
  - spec/rubocop/cop/rspec/hook_argument_spec.rb
@@ -265,7 +267,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
265
267
  version: '0'
266
268
  requirements: []
267
269
  rubyforge_project:
268
- rubygems_version: 2.6.13
270
+ rubygems_version: 2.7.2
269
271
  signing_key:
270
272
  specification_version: 4
271
273
  summary: Code style checking for RSpec files
@@ -281,6 +283,7 @@ test_files:
281
283
  - spec/rubocop/cop/rspec/before_after_all_spec.rb
282
284
  - spec/rubocop/cop/rspec/capybara/current_path_expectation_spec.rb
283
285
  - spec/rubocop/cop/rspec/capybara/feature_methods_spec.rb
286
+ - spec/rubocop/cop/rspec/context_wording_spec.rb
284
287
  - spec/rubocop/cop/rspec/cop_spec.rb
285
288
  - spec/rubocop/cop/rspec/describe_class_spec.rb
286
289
  - spec/rubocop/cop/rspec/describe_method_spec.rb
@@ -294,7 +297,7 @@ test_files:
294
297
  - spec/rubocop/cop/rspec/expect_actual_spec.rb
295
298
  - spec/rubocop/cop/rspec/expect_in_hook_spec.rb
296
299
  - spec/rubocop/cop/rspec/expect_output_spec.rb
297
- - spec/rubocop/cop/rspec/factory_girl/dynamic_attribute_defined_statically_spec.rb
300
+ - spec/rubocop/cop/rspec/factory_bot/dynamic_attribute_defined_statically_spec.rb
298
301
  - spec/rubocop/cop/rspec/file_path_spec.rb
299
302
  - spec/rubocop/cop/rspec/focus_spec.rb
300
303
  - spec/rubocop/cop/rspec/hook_argument_spec.rb
@@ -1,7 +0,0 @@
1
- module RuboCop
2
- module RSpec
3
- # RuboCop FactoryGirl project namespace
4
- module FactoryGirl
5
- end
6
- end
7
- end
@@ -1,87 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- # rubocop:disable Metrics/LineLength
4
- RSpec.describe RuboCop::Cop::RSpec::FactoryGirl::DynamicAttributeDefinedStatically do
5
- subject(:cop) { described_class.new(config) }
6
-
7
- let(:config) { RuboCop::Config.new }
8
-
9
- it 'registers an offense for offending code' do
10
- expect_offense(<<-RUBY)
11
- FactoryGirl.define do
12
- factory :post do
13
- published_at 1.day.from_now
14
- ^^^^^^^^^^^^^^^^^^^^^^^^^^^ Use a block to set a dynamic value to an attribute.
15
- status [:draft, :published].sample
16
- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Use a block to set a dynamic value to an attribute.
17
- created_at 1.day.ago
18
- ^^^^^^^^^^^^^^^^^^^^ Use a block to set a dynamic value to an attribute.
19
- end
20
- end
21
- RUBY
22
- end
23
-
24
- it 'registers an offense in a trait' do
25
- expect_offense(<<-RUBY)
26
- FactoryGirl.define do
27
- factory :post do
28
- title "Something"
29
- trait :published do
30
- published_at 1.day.from_now
31
- ^^^^^^^^^^^^^^^^^^^^^^^^^^^ Use a block to set a dynamic value to an attribute.
32
- end
33
- end
34
- end
35
- RUBY
36
- end
37
-
38
- it 'accepts' do
39
- expect_no_offenses(<<-RUBY)
40
- FactoryGirl.define do
41
- factory :post do
42
- trait :published do
43
- published_at { 1.day.from_now }
44
- end
45
- created_at { 1.day.ago }
46
- status :draft
47
- comments_count 0
48
- title "Static"
49
- description { FFaker::Lorem.paragraph(10) }
50
- tag Tag::MAGIC
51
- end
52
- end
53
- RUBY
54
- end
55
-
56
- it 'does not add offense if out of factory girl block' do
57
- expect_no_offenses(<<-RUBY)
58
- status [:draft, :published].sample
59
- published_at 1.day.from_now
60
- created_at 1.day.ago
61
- RUBY
62
- end
63
-
64
- bad = <<-RUBY
65
- FactoryGirl.define do
66
- factory :post do
67
- status([:draft, :published].sample)
68
- published_at 1.day.from_now
69
- created_at(1.day.ago)
70
- updated_at Time.current
71
- end
72
- end
73
- RUBY
74
-
75
- corrected = <<-RUBY
76
- FactoryGirl.define do
77
- factory :post do
78
- status { [:draft, :published].sample }
79
- published_at { 1.day.from_now }
80
- created_at { 1.day.ago }
81
- updated_at { Time.current }
82
- end
83
- end
84
- RUBY
85
-
86
- include_examples 'autocorrect', bad, corrected
87
- end