From a02b80d2ea25ed0111c5afcbafb51fcfb511cb58 Mon Sep 17 00:00:00 2001 From: Vivek Date: Mon, 21 Jun 2021 11:54:18 +0530 Subject: [PATCH 01/21] Respect RSpec `default_path` for generators --- lib/generators/rspec.rb | 5 +++++ lib/generators/rspec/channel/channel_generator.rb | 2 +- lib/generators/rspec/controller/controller_generator.rb | 8 ++++---- lib/generators/rspec/feature/feature_generator.rb | 2 +- lib/generators/rspec/generator/generator_generator.rb | 2 +- lib/generators/rspec/helper/helper_generator.rb | 2 +- lib/generators/rspec/integration/integration_generator.rb | 2 +- lib/generators/rspec/job/job_generator.rb | 2 +- lib/generators/rspec/mailbox/mailbox_generator.rb | 2 +- lib/generators/rspec/mailer/mailer_generator.rb | 6 +++--- lib/generators/rspec/model/model_generator.rb | 6 +++--- lib/generators/rspec/scaffold/scaffold_generator.rb | 8 ++++---- lib/generators/rspec/system/system_generator.rb | 2 +- lib/generators/rspec/view/view_generator.rb | 4 ++-- 14 files changed, 29 insertions(+), 24 deletions(-) diff --git a/lib/generators/rspec.rb b/lib/generators/rspec.rb index f343ba115d..15b84a9767 100644 --- a/lib/generators/rspec.rb +++ b/lib/generators/rspec.rb @@ -1,4 +1,5 @@ require 'rails/generators/named_base' +require 'rspec/core' require 'rspec/rails/feature_check' # @private @@ -18,6 +19,10 @@ def self.source_root(path = nil) @_rspec_source_root ||= File.expand_path(File.join(File.dirname(__FILE__), 'rspec', generator_name, 'templates')) end end + + def target_path(*paths) + File.join(RSpec.configuration.default_path, *paths) + end end end end diff --git a/lib/generators/rspec/channel/channel_generator.rb b/lib/generators/rspec/channel/channel_generator.rb index 1e1937bc99..55b86a826d 100644 --- a/lib/generators/rspec/channel/channel_generator.rb +++ b/lib/generators/rspec/channel/channel_generator.rb @@ -5,7 +5,7 @@ module Generators # @private class ChannelGenerator < Base def create_channel_spec - template 'channel_spec.rb.erb', File.join('spec/channels', class_path, "#{file_name}_channel_spec.rb") + template 'channel_spec.rb.erb', target_path('channels', class_path, "#{file_name}_channel_spec.rb") end end end diff --git a/lib/generators/rspec/controller/controller_generator.rb b/lib/generators/rspec/controller/controller_generator.rb index 4111a9aabb..c55e093d87 100644 --- a/lib/generators/rspec/controller/controller_generator.rb +++ b/lib/generators/rspec/controller/controller_generator.rb @@ -16,14 +16,14 @@ def generate_request_spec return unless options[:request_specs] template 'request_spec.rb', - File.join('spec/requests', class_path, "#{file_name}_spec.rb") + target_path('requests', class_path, "#{file_name}_spec.rb") end def generate_controller_spec return unless options[:controller_specs] template 'controller_spec.rb', - File.join('spec/controllers', class_path, "#{file_name}_controller_spec.rb") + target_path('controllers', class_path, "#{file_name}_controller_spec.rb") end def generate_view_specs @@ -35,7 +35,7 @@ def generate_view_specs actions.each do |action| @action = action template 'view_spec.rb', - File.join("spec", "views", file_path, "#{@action}.html.#{options[:template_engine]}_spec.rb") + target_path('views', file_path, "#{@action}.html.#{options[:template_engine]}_spec.rb") end end @@ -44,7 +44,7 @@ def generate_routing_spec return unless options[:routing_specs] template 'routing_spec.rb', - File.join('spec/routing', class_path, "#{file_name}_routing_spec.rb") + target_path('routing', class_path, "#{file_name}_routing_spec.rb") end end end diff --git a/lib/generators/rspec/feature/feature_generator.rb b/lib/generators/rspec/feature/feature_generator.rb index 5b9bfc4675..4e383d3cb5 100644 --- a/lib/generators/rspec/feature/feature_generator.rb +++ b/lib/generators/rspec/feature/feature_generator.rb @@ -10,7 +10,7 @@ class FeatureGenerator < Base def generate_feature_spec return unless options[:feature_specs] - template template_name, File.join('spec/features', class_path, filename) + template template_name, target_path('features', class_path, filename) end def template_name diff --git a/lib/generators/rspec/generator/generator_generator.rb b/lib/generators/rspec/generator/generator_generator.rb index 9d73d2ddc5..40118e83a2 100644 --- a/lib/generators/rspec/generator/generator_generator.rb +++ b/lib/generators/rspec/generator/generator_generator.rb @@ -9,7 +9,7 @@ class GeneratorGenerator < Base def generate_generator_spec return unless options[:generator_specs] - template template_name, File.join('spec/generator', class_path, filename) + template template_name, target_path('generator', class_path, filename) end def template_name diff --git a/lib/generators/rspec/helper/helper_generator.rb b/lib/generators/rspec/helper/helper_generator.rb index a035f8e4a7..dd820c7dfc 100644 --- a/lib/generators/rspec/helper/helper_generator.rb +++ b/lib/generators/rspec/helper/helper_generator.rb @@ -9,7 +9,7 @@ class HelperGenerator < Base def generate_helper_spec return unless options[:helper_specs] - template 'helper_spec.rb', File.join('spec/helpers', class_path, "#{file_name}_helper_spec.rb") + template 'helper_spec.rb', target_path('helpers', class_path, "#{file_name}_helper_spec.rb") end end end diff --git a/lib/generators/rspec/integration/integration_generator.rb b/lib/generators/rspec/integration/integration_generator.rb index c0de337d72..ed281e832e 100644 --- a/lib/generators/rspec/integration/integration_generator.rb +++ b/lib/generators/rspec/integration/integration_generator.rb @@ -22,7 +22,7 @@ def generate_request_spec WARNING template 'request_spec.rb', - File.join('spec/requests', "#{name.underscore.pluralize}_spec.rb") + target_path('requests', "#{name.underscore.pluralize}_spec.rb") end end end diff --git a/lib/generators/rspec/job/job_generator.rb b/lib/generators/rspec/job/job_generator.rb index 1d167856b8..06196797bb 100644 --- a/lib/generators/rspec/job/job_generator.rb +++ b/lib/generators/rspec/job/job_generator.rb @@ -6,7 +6,7 @@ module Generators class JobGenerator < Base def create_job_spec file_suffix = file_name.end_with?('job') ? 'spec.rb' : 'job_spec.rb' - template 'job_spec.rb.erb', File.join('spec/jobs', class_path, [file_name, file_suffix].join('_')) + template 'job_spec.rb.erb', target_path('jobs', class_path, [file_name, file_suffix].join('_')) end end end diff --git a/lib/generators/rspec/mailbox/mailbox_generator.rb b/lib/generators/rspec/mailbox/mailbox_generator.rb index 1277326e3b..601c892115 100644 --- a/lib/generators/rspec/mailbox/mailbox_generator.rb +++ b/lib/generators/rspec/mailbox/mailbox_generator.rb @@ -6,7 +6,7 @@ module Generators class MailboxGenerator < Base def create_mailbox_spec template('mailbox_spec.rb.erb', - File.join('spec/mailboxes', class_path, "#{file_name}_mailbox_spec.rb") + target_path('mailboxes', class_path, "#{file_name}_mailbox_spec.rb") ) end end diff --git a/lib/generators/rspec/mailer/mailer_generator.rb b/lib/generators/rspec/mailer/mailer_generator.rb index 0030dbffe4..7aeb10eeac 100644 --- a/lib/generators/rspec/mailer/mailer_generator.rb +++ b/lib/generators/rspec/mailer/mailer_generator.rb @@ -8,20 +8,20 @@ class MailerGenerator < Base argument :actions, type: :array, default: [], banner: "method method" def generate_mailer_spec - template "mailer_spec.rb", File.join('spec/mailers', class_path, "#{file_name}_spec.rb") + template "mailer_spec.rb", target_path('mailers', class_path, "#{file_name}_spec.rb") end def generate_fixtures_files actions.each do |action| @action, @path = action, File.join(file_path, action) - template "fixture", File.join("spec/fixtures", @path) + template "fixture", target_path("fixtures", @path) end end def generate_preview_files return unless RSpec::Rails::FeatureCheck.has_action_mailer_preview? - template "preview.rb", File.join("spec/mailers/previews", class_path, "#{file_name}_preview.rb") + template "preview.rb", target_path("mailers/previews", class_path, "#{file_name}_preview.rb") end end end diff --git a/lib/generators/rspec/model/model_generator.rb b/lib/generators/rspec/model/model_generator.rb index 6ab0ffb666..3b757ce59e 100644 --- a/lib/generators/rspec/model/model_generator.rb +++ b/lib/generators/rspec/model/model_generator.rb @@ -11,8 +11,8 @@ class ModelGenerator < Base class_option :fixture, type: :boolean def create_model_spec - template_file = File.join( - 'spec/models', + template_file = target_path( + 'models', class_path, "#{file_name}_spec.rb" ) @@ -24,7 +24,7 @@ def create_model_spec def create_fixture_file return unless missing_fixture_replacement? - template 'fixtures.yml', File.join('spec/fixtures', class_path, "#{(pluralize_table_names? ? plural_file_name : file_name)}.yml") + template 'fixtures.yml', target_path('fixtures', class_path, "#{(pluralize_table_names? ? plural_file_name : file_name)}.yml") end private diff --git a/lib/generators/rspec/scaffold/scaffold_generator.rb b/lib/generators/rspec/scaffold/scaffold_generator.rb index 23987555f2..7e0af83ee0 100644 --- a/lib/generators/rspec/scaffold/scaffold_generator.rb +++ b/lib/generators/rspec/scaffold/scaffold_generator.rb @@ -58,8 +58,8 @@ def generate_view_specs def generate_routing_spec return unless options[:routing_specs] - template_file = File.join( - 'spec/routing', + template_file = target_path( + 'routing', controller_class_path, "#{controller_file_name}_routing_spec.rb" ) @@ -72,7 +72,7 @@ def generate_routing_spec def copy_view(view) template "#{view}_spec.rb", - File.join("spec/views", controller_file_path, "#{view}.html.#{options[:template_engine]}_spec.rb") + target_path("views", controller_file_path, "#{view}.html.#{options[:template_engine]}_spec.rb") end # support for namespaced-resources @@ -121,7 +121,7 @@ def raw_value_for(attribute) end def template_file(folder:, suffix: '') - File.join('spec', folder, controller_class_path, "#{controller_file_name}#{suffix}_spec.rb") + target_path(folder, controller_class_path, "#{controller_file_name}#{suffix}_spec.rb") end def banner diff --git a/lib/generators/rspec/system/system_generator.rb b/lib/generators/rspec/system/system_generator.rb index 4735632e90..6f3667a208 100644 --- a/lib/generators/rspec/system/system_generator.rb +++ b/lib/generators/rspec/system/system_generator.rb @@ -9,7 +9,7 @@ class SystemGenerator < Base def generate_system_spec return unless options[:system_specs] - template template_name, File.join('spec/system', class_path, filename) + template template_name, target_path('system', class_path, filename) end def template_name diff --git a/lib/generators/rspec/view/view_generator.rb b/lib/generators/rspec/view/view_generator.rb index 5de24267e5..75c9b2619a 100644 --- a/lib/generators/rspec/view/view_generator.rb +++ b/lib/generators/rspec/view/view_generator.rb @@ -9,12 +9,12 @@ class ViewGenerator < Base class_option :template_engine, desc: "Template engine to generate view files" def create_view_specs - empty_directory File.join("spec", "views", file_path) + empty_directory target_path("views", file_path) actions.each do |action| @action = action template 'view_spec.rb', - File.join("spec", "views", file_path, "#{@action}.html.#{options[:template_engine]}_spec.rb") + target_path("views", file_path, "#{@action}.html.#{options[:template_engine]}_spec.rb") end end end From e5847cd1e55270e4e6859dfa23df4d3b03c09714 Mon Sep 17 00:00:00 2001 From: Vivek Date: Sat, 10 Jul 2021 20:14:32 +0530 Subject: [PATCH 02/21] Load RSpec configuration before accessing it --- lib/generators/rspec.rb | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/lib/generators/rspec.rb b/lib/generators/rspec.rb index 15b84a9767..9788a0c6c7 100644 --- a/lib/generators/rspec.rb +++ b/lib/generators/rspec.rb @@ -20,8 +20,19 @@ def self.source_root(path = nil) end end + # This is specifically to parse and load `.rspec` file, + # So we can use different directory. + def self.configuration + @configuration ||= begin + configuration = RSpec.configuration + options = RSpec::Core::ConfigurationOptions.new({}) + options.configure(configuration) + configuration + end + end + def target_path(*paths) - File.join(RSpec.configuration.default_path, *paths) + File.join(self.class.configuration.default_path, *paths) end end end From dda4c6a2100b6bd2d7832183410fb183c56de1fd Mon Sep 17 00:00:00 2001 From: Vivek Date: Tue, 13 Jul 2021 20:46:16 +0530 Subject: [PATCH 03/21] Add option to install rspec at custom directory --- .../rspec/install/install_generator.rb | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/lib/generators/rspec/install/install_generator.rb b/lib/generators/rspec/install/install_generator.rb index 8b832089d3..1e445b1d82 100644 --- a/lib/generators/rspec/install/install_generator.rb +++ b/lib/generators/rspec/install/install_generator.rb @@ -12,6 +12,8 @@ class InstallGenerator < ::Rails::Generators::Base Copy rspec files to your application. DESC + class_option :default_path, type: :string, default: 'spec' + def self.source_root @source_root ||= File.expand_path(File.join(File.dirname(__FILE__), 'templates')) end @@ -20,12 +22,12 @@ def copy_spec_files Dir.mktmpdir do |dir| generate_rspec_init dir template File.join(dir, '.rspec'), '.rspec' - directory File.join(dir, 'spec'), 'spec' + directory File.join(dir, 'spec'), default_path end end def copy_rails_files - template 'spec/rails_helper.rb' + template 'spec/rails_helper.rb', "#{default_path}/rails_helper.rb" end private @@ -41,6 +43,10 @@ def generate_rspec_init(tmpdir) replace_generator_command(spec_helper_path) remove_warnings_configuration(spec_helper_path) + + dot_rspec_path = File.join(tmpdir, '.rspec') + + append_default_path(dot_rspec_path) end def replace_generator_command(spec_helper_path) @@ -58,6 +64,15 @@ def remove_warnings_configuration(spec_helper_path) '', verbose: false end + + def append_default_path(dot_rspec_path) + append_to_file dot_rspec_path, + "--default-path #{default_path}" + end + + def default_path + options[:default_path] + end end end end From c4b3b9efe505c609fac4d519df25591d565cf79c Mon Sep 17 00:00:00 2001 From: Vivek Date: Tue, 13 Jul 2021 20:47:06 +0530 Subject: [PATCH 04/21] Add feature to test `default-path` configuration --- features/generator_specs/generator_specs.feature | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/features/generator_specs/generator_specs.feature b/features/generator_specs/generator_specs.feature index 3a8e6d8360..f546cf0031 100644 --- a/features/generator_specs/generator_specs.feature +++ b/features/generator_specs/generator_specs.feature @@ -14,3 +14,17 @@ Feature: Generator spec invoke rspec create spec/generator/my_generators_generator_spec.rb """ + + Scenario: Use custom generator with different default path + When I run `bundle exec rails generate rspec:install --default-path behaviour --force` + And I run `bundle exec rails generate generator my_generator` + Then the features should pass + Then the output should contain: + """ + create lib/generators/my_generator + create lib/generators/my_generator/my_generator_generator.rb + create lib/generators/my_generator/USAGE + create lib/generators/my_generator/templates + invoke rspec + create behaviour/generator/my_generators_generator_spec.rb + """ From 4e694aa06a734d64158f8d29498257bba5634d57 Mon Sep 17 00:00:00 2001 From: Vivek Date: Sat, 17 Jul 2021 19:32:37 +0530 Subject: [PATCH 05/21] Make generator feature to documentation centered --- features/generator_specs/generator_specs.feature | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/features/generator_specs/generator_specs.feature b/features/generator_specs/generator_specs.feature index f546cf0031..a575fbd5c1 100644 --- a/features/generator_specs/generator_specs.feature +++ b/features/generator_specs/generator_specs.feature @@ -15,8 +15,11 @@ Feature: Generator spec create spec/generator/my_generators_generator_spec.rb """ - Scenario: Use custom generator with different default path - When I run `bundle exec rails generate rspec:install --default-path behaviour --force` + Scenario: Use custom generator with customized `default-path` + Given a file named ".rspec" with: + """ + --default-path behaviour + """ And I run `bundle exec rails generate generator my_generator` Then the features should pass Then the output should contain: From 897ec24c5b75ebb28862cc4a589564cb54d37fa8 Mon Sep 17 00:00:00 2001 From: Vivek Date: Sat, 17 Jul 2021 19:34:32 +0530 Subject: [PATCH 06/21] Document customize `default-path` configuration --- features/README.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/features/README.md b/features/README.md index d908df11fc..719305fc2f 100644 --- a/features/README.md +++ b/features/README.md @@ -34,11 +34,15 @@ without having to type RAILS_ENV=test. Now you can run: - script/rails generate rspec:install + bundle exec rails generate rspec:install This adds the spec directory and some skeleton files, including a .rspec file. +You can also customize the default spec path with `--default-path` option: + + bundle exec rails generate rspec:install --default-path behaviour + ## Issues The documentation for rspec-rails is a work in progress. We'll be adding From 8a23888ccba9e2dfbcc84ef386639bc014ef8b38 Mon Sep 17 00:00:00 2001 From: Phil Pirozhkov Date: Sat, 17 Jul 2021 22:33:40 +0300 Subject: [PATCH 07/21] Add changelog entry --- Changelog.md | 2 ++ lib/generators/rspec.rb | 3 +-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/Changelog.md b/Changelog.md index 5d12cece2e..4ef22ec8bb 100644 --- a/Changelog.md +++ b/Changelog.md @@ -73,6 +73,8 @@ Bug Fixes: `run_in_transaction?` method. (Stan Lo, #2495) * Prevent keyword arguments being lost when methods are invoked dynamically in controller specs. (Josh Cheek, #2509, #2514) +* Read configuration options from files to respect spec path setting. + (@vivekmiyani, #2508) ### 5.0.1 / 2021-03-18 [Full Changelog](https://github.com/rspec/rspec-rails/compare/v5.0.0...v5.0.1) diff --git a/lib/generators/rspec.rb b/lib/generators/rspec.rb index 9788a0c6c7..be8e854035 100644 --- a/lib/generators/rspec.rb +++ b/lib/generators/rspec.rb @@ -20,8 +20,7 @@ def self.source_root(path = nil) end end - # This is specifically to parse and load `.rspec` file, - # So we can use different directory. + # Read configuration options from files to respect `--default-path` def self.configuration @configuration ||= begin configuration = RSpec.configuration From 5fe76cdb900203253fddc4f1e007074f5445319f Mon Sep 17 00:00:00 2001 From: Vivek Date: Sat, 18 Sep 2021 21:04:28 +0530 Subject: [PATCH 08/21] Apply suggestions from code review --- Changelog.md | 6 ++++-- lib/generators/rspec.rb | 3 ++- lib/generators/rspec/install/install_generator.rb | 6 ++++-- 3 files changed, 10 insertions(+), 5 deletions(-) diff --git a/Changelog.md b/Changelog.md index 4ef22ec8bb..c35b17abca 100644 --- a/Changelog.md +++ b/Changelog.md @@ -1,6 +1,10 @@ ### Development [Full Changelog](https://github.com/rspec/rspec-rails/compare/v6.0.0.rc1...main) +Enhancements: + +* Generators now respects default path configuration option. (@vivekmiyani, #2508) + Breaking Changes: * Change the order of `after_teardown` from `after` to `around` in system @@ -73,8 +77,6 @@ Bug Fixes: `run_in_transaction?` method. (Stan Lo, #2495) * Prevent keyword arguments being lost when methods are invoked dynamically in controller specs. (Josh Cheek, #2509, #2514) -* Read configuration options from files to respect spec path setting. - (@vivekmiyani, #2508) ### 5.0.1 / 2021-03-18 [Full Changelog](https://github.com/rspec/rspec-rails/compare/v5.0.0...v5.0.1) diff --git a/lib/generators/rspec.rb b/lib/generators/rspec.rb index be8e854035..34bdc8ce3e 100644 --- a/lib/generators/rspec.rb +++ b/lib/generators/rspec.rb @@ -20,7 +20,8 @@ def self.source_root(path = nil) end end - # Read configuration options from files to respect `--default-path` + # @private + # Load configuration from RSpec to ensure `--default-path` is set def self.configuration @configuration ||= begin configuration = RSpec.configuration diff --git a/lib/generators/rspec/install/install_generator.rb b/lib/generators/rspec/install/install_generator.rb index 1e445b1d82..1bd4a23cb3 100644 --- a/lib/generators/rspec/install/install_generator.rb +++ b/lib/generators/rspec/install/install_generator.rb @@ -44,9 +44,11 @@ def generate_rspec_init(tmpdir) replace_generator_command(spec_helper_path) remove_warnings_configuration(spec_helper_path) - dot_rspec_path = File.join(tmpdir, '.rspec') + unless default_path == "spec" + dot_rspec_path = File.join(tmpdir, '.rspec') - append_default_path(dot_rspec_path) + append_default_path(dot_rspec_path) + end end def replace_generator_command(spec_helper_path) From 868b66a4028e5bbe08e8e5643760366dc3989a2e Mon Sep 17 00:00:00 2001 From: Vivek Date: Sun, 21 Nov 2021 14:42:52 +0530 Subject: [PATCH 09/21] Add channel generator feature --- .../generator_specs/channel_specs.feature | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 features/generator_specs/channel_specs.feature diff --git a/features/generator_specs/channel_specs.feature b/features/generator_specs/channel_specs.feature new file mode 100644 index 0000000000..26c386fe8d --- /dev/null +++ b/features/generator_specs/channel_specs.feature @@ -0,0 +1,31 @@ +Feature: Channel generator spec + + Scenario: Channel generator + When I run `bundle exec rails generate channel group` + Then the features should pass + Then the output should contain: + """ + invoke rspec + create spec/channels/group_channel_spec.rb + create app/channels/group_channel.rb + identical app/javascript/channels/index.js + identical app/javascript/channels/consumer.js + create app/javascript/channels/group_channel.js + """ + + Scenario: Channel generator with customized `default-path` + Given a file named ".rspec" with: + """ + --default-path behaviour + """ + And I run `bundle exec rails generate channel group` + Then the features should pass + Then the output should contain: + """ + invoke rspec + create behaviour/channels/group_channel_spec.rb + create app/channels/group_channel.rb + identical app/javascript/channels/index.js + identical app/javascript/channels/consumer.js + create app/javascript/channels/group_channel.js + """ From 5f18198c5c84bed94f1608cf1a7a5537930f9bf6 Mon Sep 17 00:00:00 2001 From: Vivek Date: Sun, 28 Nov 2021 15:08:32 +0530 Subject: [PATCH 10/21] Add controller generator feature --- .../generator_specs/controller_specs.feature | 43 +++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 features/generator_specs/controller_specs.feature diff --git a/features/generator_specs/controller_specs.feature b/features/generator_specs/controller_specs.feature new file mode 100644 index 0000000000..e0f438bca8 --- /dev/null +++ b/features/generator_specs/controller_specs.feature @@ -0,0 +1,43 @@ +Feature: Controller generator spec + + Scenario: Controller generator + When I run `bundle exec rails generate controller posts` + Then the features should pass + Then the output should contain: + """ + create app/controllers/posts_controller.rb + invoke erb + create app/views/posts + invoke rspec + create spec/requests/posts_spec.rb + invoke helper + create app/helpers/posts_helper.rb + invoke rspec + create spec/helpers/posts_helper_spec.rb + invoke assets + invoke css + create app/assets/stylesheets/posts.css + """ + + Scenario: Controller generator with customized `default-path` + Given a file named ".rspec" with: + """ + --default-path behaviour + """ + And I run `bundle exec rails generate controller posts` + Then the features should pass + Then the output should contain: + """ + create app/controllers/posts_controller.rb + invoke erb + create app/views/posts + invoke rspec + create behaviour/requests/posts_spec.rb + invoke helper + create app/helpers/posts_helper.rb + invoke rspec + create behaviour/helpers/posts_helper_spec.rb + invoke assets + invoke css + create app/assets/stylesheets/posts.css + """ From 7e08864ac325c463ceb096f89a75963b40f9b1a8 Mon Sep 17 00:00:00 2001 From: Vivek Date: Sun, 28 Nov 2021 15:20:05 +0530 Subject: [PATCH 11/21] Add feature generator feature --- .../generator_specs/feature_specs.feature | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 features/generator_specs/feature_specs.feature diff --git a/features/generator_specs/feature_specs.feature b/features/generator_specs/feature_specs.feature new file mode 100644 index 0000000000..761aad9ea8 --- /dev/null +++ b/features/generator_specs/feature_specs.feature @@ -0,0 +1,21 @@ +Feature: Feature generator spec + + Scenario: Feature generator + When I run `bundle exec rails generate rspec:feature posts` + Then the features should pass + Then the output should contain: + """ + create spec/features/posts_spec.rb + """ + + Scenario: Feature generator with customized `default-path` + Given a file named ".rspec" with: + """ + --default-path behaviour + """ + And I run `bundle exec rails generate rspec:feature posts` + Then the features should pass + Then the output should contain: + """ + create behaviour/features/posts_spec.rb + """ From 60e200bd01d0fe4c76b1c9e15cb74ffd4abb2a78 Mon Sep 17 00:00:00 2001 From: Vivek Date: Sun, 28 Nov 2021 15:36:03 +0530 Subject: [PATCH 12/21] Add helper generator feature --- features/generator_specs/helper_specs.feature | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 features/generator_specs/helper_specs.feature diff --git a/features/generator_specs/helper_specs.feature b/features/generator_specs/helper_specs.feature new file mode 100644 index 0000000000..515dc5ab04 --- /dev/null +++ b/features/generator_specs/helper_specs.feature @@ -0,0 +1,25 @@ +Feature: Helper generator spec + + Scenario: Helper generator + When I run `bundle exec rails generate helper posts` + Then the features should pass + Then the output should contain: + """ + create app/helpers/posts_helper.rb + invoke rspec + create spec/helpers/posts_helper_spec.rb + """ + + Scenario: Helper generator with customized `default-path` + Given a file named ".rspec" with: + """ + --default-path behaviour + """ + And I run `bundle exec rails generate helper posts` + Then the features should pass + Then the output should contain: + """ + create app/helpers/posts_helper.rb + invoke rspec + create behaviour/helpers/posts_helper_spec.rb + """ From 0670935a2bfde7f0db69dc2e8dbaa31d22146215 Mon Sep 17 00:00:00 2001 From: Vivek Date: Sun, 28 Nov 2021 16:15:44 +0530 Subject: [PATCH 13/21] Add integration generator feature --- .../generator_specs/integration_specs.feature | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 features/generator_specs/integration_specs.feature diff --git a/features/generator_specs/integration_specs.feature b/features/generator_specs/integration_specs.feature new file mode 100644 index 0000000000..7e8c56c16e --- /dev/null +++ b/features/generator_specs/integration_specs.feature @@ -0,0 +1,21 @@ +Feature: Integration generator spec + + Scenario: Integration generator + When I run `bundle exec rails generate rspec:integration posts` + Then the features should pass + Then the output should contain: + """ + create spec/requests/posts_spec.rb + """ + + Scenario: Integration generator with customized `default-path` + Given a file named ".rspec" with: + """ + --default-path behaviour + """ + And I run `bundle exec rails generate rspec:integration posts` + Then the features should pass + Then the output should contain: + """ + create behaviour/requests/posts_spec.rb + """ From 53ba6244f0044ad12533b4444f8d188ba697be6b Mon Sep 17 00:00:00 2001 From: Vivek Date: Sun, 28 Nov 2021 16:28:35 +0530 Subject: [PATCH 14/21] Add job generator feature --- features/generator_specs/job_specs.feature | 25 ++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 features/generator_specs/job_specs.feature diff --git a/features/generator_specs/job_specs.feature b/features/generator_specs/job_specs.feature new file mode 100644 index 0000000000..63bda3ef5a --- /dev/null +++ b/features/generator_specs/job_specs.feature @@ -0,0 +1,25 @@ +Feature: Job generator spec + + Scenario: Job generator + When I run `bundle exec rails generate job user` + Then the features should pass + Then the output should contain: + """ + invoke rspec + create spec/jobs/user_job_spec.rb + create app/jobs/user_job.rb + """ + + Scenario: Job generator with customized `default-path` + Given a file named ".rspec" with: + """ + --default-path behaviour + """ + And I run `bundle exec rails generate job user` + Then the features should pass + Then the output should contain: + """ + invoke rspec + create behaviour/jobs/user_job_spec.rb + create app/jobs/user_job.rb + """ From f1d6edf6d26c5cb9f77abebf457763a11506d2f4 Mon Sep 17 00:00:00 2001 From: Vivek Date: Sun, 28 Nov 2021 16:31:15 +0530 Subject: [PATCH 15/21] Add mailbox generator feature --- .../generator_specs/mailbox_specs.feature | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 features/generator_specs/mailbox_specs.feature diff --git a/features/generator_specs/mailbox_specs.feature b/features/generator_specs/mailbox_specs.feature new file mode 100644 index 0000000000..7a8de49a13 --- /dev/null +++ b/features/generator_specs/mailbox_specs.feature @@ -0,0 +1,25 @@ +Feature: Mailbox generator spec + + Scenario: Mailbox generator + When I run `bundle exec rails generate mailbox forwards` + Then the features should pass + Then the output should contain: + """ + create app/mailboxes/forwards_mailbox.rb + invoke rspec + create spec/mailboxes/forwards_mailbox_spec.rb + """ + + Scenario: Mailbox generator with customized `default-path` + Given a file named ".rspec" with: + """ + --default-path behaviour + """ + And I run `bundle exec rails generate mailbox forwards` + Then the features should pass + Then the output should contain: + """ + create app/mailboxes/forwards_mailbox.rb + invoke rspec + create behaviour/mailboxes/forwards_mailbox_spec.rb + """ From 3114b8beeb0da625b2beb6ad0c2727400e43041f Mon Sep 17 00:00:00 2001 From: Vivek Date: Sun, 28 Nov 2021 17:09:38 +0530 Subject: [PATCH 16/21] Add mailer generator feature --- features/generator_specs/mailer_specs.feature | 43 +++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 features/generator_specs/mailer_specs.feature diff --git a/features/generator_specs/mailer_specs.feature b/features/generator_specs/mailer_specs.feature new file mode 100644 index 0000000000..63778d916f --- /dev/null +++ b/features/generator_specs/mailer_specs.feature @@ -0,0 +1,43 @@ +Feature: Mailer generator spec + + Scenario: Mailer generator + When I run `bundle exec rails generate mailer posts index show` + Then the features should pass + Then the output should contain: + """ + create app/mailers/posts_mailer.rb + invoke erb + create app/views/posts_mailer + create app/views/posts_mailer/index.text.erb + create app/views/posts_mailer/index.html.erb + create app/views/posts_mailer/show.text.erb + create app/views/posts_mailer/show.html.erb + invoke rspec + create spec/mailers/posts_spec.rb + create spec/fixtures/posts/index + create spec/fixtures/posts/show + create spec/mailers/previews/posts_preview.rb + """ + + Scenario: Mailer generator with customized `default-path` + Given a file named ".rspec" with: + """ + --default-path behaviour + """ + And I run `bundle exec rails generate mailer posts index show` + Then the features should pass + Then the output should contain: + """ + create app/mailers/posts_mailer.rb + invoke erb + create app/views/posts_mailer + create app/views/posts_mailer/index.text.erb + create app/views/posts_mailer/index.html.erb + create app/views/posts_mailer/show.text.erb + create app/views/posts_mailer/show.html.erb + invoke rspec + create behaviour/mailers/posts_spec.rb + create behaviour/fixtures/posts/index + create behaviour/fixtures/posts/show + create behaviour/mailers/previews/posts_preview.rb + """ From e4c130aa733c4d07e758209e487d0d5c5c770aca Mon Sep 17 00:00:00 2001 From: Vivek Date: Sun, 28 Nov 2021 17:32:42 +0530 Subject: [PATCH 17/21] Add request generator feature --- .../generator_specs/request_specs.feature | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 features/generator_specs/request_specs.feature diff --git a/features/generator_specs/request_specs.feature b/features/generator_specs/request_specs.feature new file mode 100644 index 0000000000..428dbc899a --- /dev/null +++ b/features/generator_specs/request_specs.feature @@ -0,0 +1,21 @@ +Feature: Request generator spec + + Scenario: Request generator + When I run `bundle exec rails generate rspec:request posts` + Then the features should pass + Then the output should contain: + """ + create spec/requests/posts_spec.rb + """ + + Scenario: Request generator with customized `default-path` + Given a file named ".rspec" with: + """ + --default-path behaviour + """ + And I run `bundle exec rails generate rspec:request posts` + Then the features should pass + Then the output should contain: + """ + create behaviour/requests/posts_spec.rb + """ From c935d5786b038993c1913f893c2d3da70cdeb218 Mon Sep 17 00:00:00 2001 From: Vivek Date: Sun, 28 Nov 2021 17:36:18 +0530 Subject: [PATCH 18/21] Add system generator feature --- features/generator_specs/system_specs.feature | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 features/generator_specs/system_specs.feature diff --git a/features/generator_specs/system_specs.feature b/features/generator_specs/system_specs.feature new file mode 100644 index 0000000000..4ffb7899fd --- /dev/null +++ b/features/generator_specs/system_specs.feature @@ -0,0 +1,21 @@ +Feature: System generator spec + + Scenario: System generator + When I run `bundle exec rails generate rspec:system posts` + Then the features should pass + Then the output should contain: + """ + create spec/system/posts_spec.rb + """ + + Scenario: System generator with customized `default-path` + Given a file named ".rspec" with: + """ + --default-path behaviour + """ + And I run `bundle exec rails generate rspec:system posts` + Then the features should pass + Then the output should contain: + """ + create behaviour/system/posts_spec.rb + """ From 933bba6b944cfbf0368432d550d6dd79afdf68b7 Mon Sep 17 00:00:00 2001 From: Vivek Date: Sun, 28 Nov 2021 17:37:52 +0530 Subject: [PATCH 19/21] Add view generator feature --- features/generator_specs/view_specs.feature | 23 +++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 features/generator_specs/view_specs.feature diff --git a/features/generator_specs/view_specs.feature b/features/generator_specs/view_specs.feature new file mode 100644 index 0000000000..e98792846a --- /dev/null +++ b/features/generator_specs/view_specs.feature @@ -0,0 +1,23 @@ +Feature: View generator spec + + Scenario: View generator + When I run `bundle exec rails generate rspec:view posts index` + Then the features should pass + Then the output should contain: + """ + create spec/views/posts + create spec/views/posts/index.html.erb_spec.rb + """ + + Scenario: View generator with customized `default-path` + Given a file named ".rspec" with: + """ + --default-path behaviour + """ + And I run `bundle exec rails generate rspec:view posts index` + Then the features should pass + Then the output should contain: + """ + create behaviour/views/posts + create behaviour/views/posts/index.html.erb_spec.rb + """ From e73d83f4be46d1be3734618cda658ae8412a98b2 Mon Sep 17 00:00:00 2001 From: Phil Pirozhkov Date: Mon, 18 Jul 2022 00:39:55 +0300 Subject: [PATCH 20/21] Fix features on Rails 7 --- features/generator_specs/channel_specs.feature | 12 ++++++------ features/generator_specs/controller_specs.feature | 6 ------ 2 files changed, 6 insertions(+), 12 deletions(-) diff --git a/features/generator_specs/channel_specs.feature b/features/generator_specs/channel_specs.feature index 26c386fe8d..133d5b935f 100644 --- a/features/generator_specs/channel_specs.feature +++ b/features/generator_specs/channel_specs.feature @@ -7,10 +7,10 @@ Feature: Channel generator spec """ invoke rspec create spec/channels/group_channel_spec.rb + """ + Then the output should contain: + """ create app/channels/group_channel.rb - identical app/javascript/channels/index.js - identical app/javascript/channels/consumer.js - create app/javascript/channels/group_channel.js """ Scenario: Channel generator with customized `default-path` @@ -24,8 +24,8 @@ Feature: Channel generator spec """ invoke rspec create behaviour/channels/group_channel_spec.rb + """ + Then the output should contain: + """ create app/channels/group_channel.rb - identical app/javascript/channels/index.js - identical app/javascript/channels/consumer.js - create app/javascript/channels/group_channel.js """ diff --git a/features/generator_specs/controller_specs.feature b/features/generator_specs/controller_specs.feature index e0f438bca8..9a3dd0162b 100644 --- a/features/generator_specs/controller_specs.feature +++ b/features/generator_specs/controller_specs.feature @@ -14,9 +14,6 @@ Feature: Controller generator spec create app/helpers/posts_helper.rb invoke rspec create spec/helpers/posts_helper_spec.rb - invoke assets - invoke css - create app/assets/stylesheets/posts.css """ Scenario: Controller generator with customized `default-path` @@ -37,7 +34,4 @@ Feature: Controller generator spec create app/helpers/posts_helper.rb invoke rspec create behaviour/helpers/posts_helper_spec.rb - invoke assets - invoke css - create app/assets/stylesheets/posts.css """ From 30c7065c49bbe0de2b8aef3b3d14f13c031998a6 Mon Sep 17 00:00:00 2001 From: Phil Pirozhkov Date: Mon, 18 Jul 2022 01:21:01 +0300 Subject: [PATCH 21/21] Adapt request generator to use custom paths --- lib/generators/rspec/request/request_generator.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/generators/rspec/request/request_generator.rb b/lib/generators/rspec/request/request_generator.rb index ea8bd182e2..b6114e1e3b 100644 --- a/lib/generators/rspec/request/request_generator.rb +++ b/lib/generators/rspec/request/request_generator.rb @@ -10,7 +10,7 @@ def generate_request_spec return unless options[:request_specs] template 'request_spec.rb', - File.join('spec/requests', "#{name.underscore.pluralize}_spec.rb") + target_path('requests', "#{name.underscore.pluralize}_spec.rb") end end end