mini-quick-sys 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (103) hide show
  1. checksums.yaml +7 -0
  2. data/mini-quick-sys.gemspec +12 -0
  3. data/rspec-rails-8.0.4/Capybara.md +28 -0
  4. data/rspec-rails-8.0.4/Changelog.md +1408 -0
  5. data/rspec-rails-8.0.4/LICENSE.md +25 -0
  6. data/rspec-rails-8.0.4/README.md +386 -0
  7. data/rspec-rails-8.0.4/lib/generators/rspec/authentication/authentication_generator.rb +25 -0
  8. data/rspec-rails-8.0.4/lib/generators/rspec/authentication/templates/user_spec.rb +5 -0
  9. data/rspec-rails-8.0.4/lib/generators/rspec/authentication/templates/users.yml +11 -0
  10. data/rspec-rails-8.0.4/lib/generators/rspec/channel/channel_generator.rb +12 -0
  11. data/rspec-rails-8.0.4/lib/generators/rspec/channel/templates/channel_spec.rb.erb +7 -0
  12. data/rspec-rails-8.0.4/lib/generators/rspec/controller/controller_generator.rb +51 -0
  13. data/rspec-rails-8.0.4/lib/generators/rspec/controller/templates/controller_spec.rb +16 -0
  14. data/rspec-rails-8.0.4/lib/generators/rspec/controller/templates/request_spec.rb +19 -0
  15. data/rspec-rails-8.0.4/lib/generators/rspec/controller/templates/routing_spec.rb +13 -0
  16. data/rspec-rails-8.0.4/lib/generators/rspec/controller/templates/view_spec.rb +5 -0
  17. data/rspec-rails-8.0.4/lib/generators/rspec/feature/feature_generator.rb +29 -0
  18. data/rspec-rails-8.0.4/lib/generators/rspec/feature/templates/feature_singular_spec.rb +5 -0
  19. data/rspec-rails-8.0.4/lib/generators/rspec/feature/templates/feature_spec.rb +5 -0
  20. data/rspec-rails-8.0.4/lib/generators/rspec/generator/generator_generator.rb +24 -0
  21. data/rspec-rails-8.0.4/lib/generators/rspec/generator/templates/generator_spec.rb +5 -0
  22. data/rspec-rails-8.0.4/lib/generators/rspec/helper/helper_generator.rb +16 -0
  23. data/rspec-rails-8.0.4/lib/generators/rspec/helper/templates/helper_spec.rb +17 -0
  24. data/rspec-rails-8.0.4/lib/generators/rspec/install/install_generator.rb +80 -0
  25. data/rspec-rails-8.0.4/lib/generators/rspec/install/templates/spec/rails_helper.rb +91 -0
  26. data/rspec-rails-8.0.4/lib/generators/rspec/job/job_generator.rb +13 -0
  27. data/rspec-rails-8.0.4/lib/generators/rspec/job/templates/job_spec.rb.erb +7 -0
  28. data/rspec-rails-8.0.4/lib/generators/rspec/mailbox/mailbox_generator.rb +14 -0
  29. data/rspec-rails-8.0.4/lib/generators/rspec/mailbox/templates/mailbox_spec.rb.erb +7 -0
  30. data/rspec-rails-8.0.4/lib/generators/rspec/mailer/mailer_generator.rb +30 -0
  31. data/rspec-rails-8.0.4/lib/generators/rspec/mailer/templates/fixture +3 -0
  32. data/rspec-rails-8.0.4/lib/generators/rspec/mailer/templates/mailer_spec.rb +25 -0
  33. data/rspec-rails-8.0.4/lib/generators/rspec/mailer/templates/preview.rb +13 -0
  34. data/rspec-rails-8.0.4/lib/generators/rspec/model/model_generator.rb +37 -0
  35. data/rspec-rails-8.0.4/lib/generators/rspec/model/templates/fixtures.yml +19 -0
  36. data/rspec-rails-8.0.4/lib/generators/rspec/model/templates/model_spec.rb +7 -0
  37. data/rspec-rails-8.0.4/lib/generators/rspec/request/request_generator.rb +17 -0
  38. data/rspec-rails-8.0.4/lib/generators/rspec/request/templates/request_spec.rb +10 -0
  39. data/rspec-rails-8.0.4/lib/generators/rspec/scaffold/scaffold_generator.rb +136 -0
  40. data/rspec-rails-8.0.4/lib/generators/rspec/scaffold/templates/api_controller_spec.rb +129 -0
  41. data/rspec-rails-8.0.4/lib/generators/rspec/scaffold/templates/api_request_spec.rb +131 -0
  42. data/rspec-rails-8.0.4/lib/generators/rspec/scaffold/templates/controller_spec.rb +145 -0
  43. data/rspec-rails-8.0.4/lib/generators/rspec/scaffold/templates/edit_spec.rb +27 -0
  44. data/rspec-rails-8.0.4/lib/generators/rspec/scaffold/templates/index_spec.rb +26 -0
  45. data/rspec-rails-8.0.4/lib/generators/rspec/scaffold/templates/new_spec.rb +22 -0
  46. data/rspec-rails-8.0.4/lib/generators/rspec/scaffold/templates/request_spec.rb +138 -0
  47. data/rspec-rails-8.0.4/lib/generators/rspec/scaffold/templates/routing_spec.rb +46 -0
  48. data/rspec-rails-8.0.4/lib/generators/rspec/scaffold/templates/show_spec.rb +21 -0
  49. data/rspec-rails-8.0.4/lib/generators/rspec/system/system_generator.rb +24 -0
  50. data/rspec-rails-8.0.4/lib/generators/rspec/system/templates/system_spec.rb +9 -0
  51. data/rspec-rails-8.0.4/lib/generators/rspec/view/templates/view_spec.rb +5 -0
  52. data/rspec-rails-8.0.4/lib/generators/rspec/view/view_generator.rb +22 -0
  53. data/rspec-rails-8.0.4/lib/generators/rspec.rb +56 -0
  54. data/rspec-rails-8.0.4/lib/rspec/rails/active_record.rb +25 -0
  55. data/rspec-rails-8.0.4/lib/rspec/rails/adapters.rb +196 -0
  56. data/rspec-rails-8.0.4/lib/rspec/rails/configuration.rb +158 -0
  57. data/rspec-rails-8.0.4/lib/rspec/rails/example/channel_example_group.rb +93 -0
  58. data/rspec-rails-8.0.4/lib/rspec/rails/example/controller_example_group.rb +217 -0
  59. data/rspec-rails-8.0.4/lib/rspec/rails/example/feature_example_group.rb +53 -0
  60. data/rspec-rails-8.0.4/lib/rspec/rails/example/helper_example_group.rb +42 -0
  61. data/rspec-rails-8.0.4/lib/rspec/rails/example/job_example_group.rb +23 -0
  62. data/rspec-rails-8.0.4/lib/rspec/rails/example/mailbox_example_group.rb +80 -0
  63. data/rspec-rails-8.0.4/lib/rspec/rails/example/mailer_example_group.rb +38 -0
  64. data/rspec-rails-8.0.4/lib/rspec/rails/example/model_example_group.rb +11 -0
  65. data/rspec-rails-8.0.4/lib/rspec/rails/example/rails_example_group.rb +23 -0
  66. data/rspec-rails-8.0.4/lib/rspec/rails/example/request_example_group.rb +27 -0
  67. data/rspec-rails-8.0.4/lib/rspec/rails/example/routing_example_group.rb +61 -0
  68. data/rspec-rails-8.0.4/lib/rspec/rails/example/system_example_group.rb +177 -0
  69. data/rspec-rails-8.0.4/lib/rspec/rails/example/view_example_group.rb +214 -0
  70. data/rspec-rails-8.0.4/lib/rspec/rails/example.rb +13 -0
  71. data/rspec-rails-8.0.4/lib/rspec/rails/extensions/active_record/proxy.rb +11 -0
  72. data/rspec-rails-8.0.4/lib/rspec/rails/extensions.rb +1 -0
  73. data/rspec-rails-8.0.4/lib/rspec/rails/feature_check.rb +51 -0
  74. data/rspec-rails-8.0.4/lib/rspec/rails/file_fixture_support.rb +18 -0
  75. data/rspec-rails-8.0.4/lib/rspec/rails/fixture_file_upload_support.rb +39 -0
  76. data/rspec-rails-8.0.4/lib/rspec/rails/fixture_support.rb +58 -0
  77. data/rspec-rails-8.0.4/lib/rspec/rails/matchers/action_cable/have_broadcasted_to.rb +180 -0
  78. data/rspec-rails-8.0.4/lib/rspec/rails/matchers/action_cable/have_streams.rb +58 -0
  79. data/rspec-rails-8.0.4/lib/rspec/rails/matchers/action_cable.rb +70 -0
  80. data/rspec-rails-8.0.4/lib/rspec/rails/matchers/action_mailbox.rb +73 -0
  81. data/rspec-rails-8.0.4/lib/rspec/rails/matchers/active_job.rb +534 -0
  82. data/rspec-rails-8.0.4/lib/rspec/rails/matchers/base_matcher.rb +179 -0
  83. data/rspec-rails-8.0.4/lib/rspec/rails/matchers/be_a_new.rb +83 -0
  84. data/rspec-rails-8.0.4/lib/rspec/rails/matchers/be_new_record.rb +30 -0
  85. data/rspec-rails-8.0.4/lib/rspec/rails/matchers/be_valid.rb +49 -0
  86. data/rspec-rails-8.0.4/lib/rspec/rails/matchers/have_enqueued_mail.rb +259 -0
  87. data/rspec-rails-8.0.4/lib/rspec/rails/matchers/have_http_status.rb +381 -0
  88. data/rspec-rails-8.0.4/lib/rspec/rails/matchers/have_rendered.rb +64 -0
  89. data/rspec-rails-8.0.4/lib/rspec/rails/matchers/redirect_to.rb +38 -0
  90. data/rspec-rails-8.0.4/lib/rspec/rails/matchers/relation_match_array.rb +3 -0
  91. data/rspec-rails-8.0.4/lib/rspec/rails/matchers/routing_matchers.rb +125 -0
  92. data/rspec-rails-8.0.4/lib/rspec/rails/matchers/send_email.rb +122 -0
  93. data/rspec-rails-8.0.4/lib/rspec/rails/matchers.rb +36 -0
  94. data/rspec-rails-8.0.4/lib/rspec/rails/tasks/rspec.rake +49 -0
  95. data/rspec-rails-8.0.4/lib/rspec/rails/vendor/capybara.rb +32 -0
  96. data/rspec-rails-8.0.4/lib/rspec/rails/version.rb +9 -0
  97. data/rspec-rails-8.0.4/lib/rspec/rails/view_assigns.rb +27 -0
  98. data/rspec-rails-8.0.4/lib/rspec/rails/view_path_builder.rb +29 -0
  99. data/rspec-rails-8.0.4/lib/rspec/rails/view_rendering.rb +166 -0
  100. data/rspec-rails-8.0.4/lib/rspec/rails/view_spec_methods.rb +56 -0
  101. data/rspec-rails-8.0.4/lib/rspec/rails.rb +18 -0
  102. data/rspec-rails-8.0.4/lib/rspec-rails.rb +91 -0
  103. metadata +142 -0
@@ -0,0 +1,21 @@
1
+ require 'rails_helper'
2
+
3
+ <% output_attributes = attributes.reject{|attribute| [:datetime, :timestamp, :time, :date].index(attribute.type) } -%>
4
+ RSpec.describe "<%= ns_table_name %>/show", <%= type_metatag(:view) %> do
5
+ before(:each) do
6
+ assign(:<%= singular_table_name %>, <%= class_name %>.create!(<%= '))' if output_attributes.empty? %>
7
+ <% output_attributes.each_with_index do |attribute, attribute_index| -%>
8
+ <%= attribute.name %>: <%= value_for(attribute) %><%= attribute_index == output_attributes.length - 1 ? '' : ','%>
9
+ <% end -%>
10
+ <% if !output_attributes.empty? -%>
11
+ ))
12
+ <% end -%>
13
+ end
14
+
15
+ it "renders attributes in <p>" do
16
+ render
17
+ <% for attribute in output_attributes -%>
18
+ expect(rendered).to match(/<%= raw_value_for(attribute) %>/)
19
+ <% end -%>
20
+ end
21
+ end
@@ -0,0 +1,24 @@
1
+ require 'generators/rspec'
2
+
3
+ module Rspec
4
+ module Generators
5
+ # @private
6
+ class SystemGenerator < Base
7
+ class_option :system_specs, type: :boolean, default: true, desc: "Generate system specs"
8
+
9
+ def generate_system_spec
10
+ return unless options[:system_specs]
11
+
12
+ template template_name, target_path('system', class_path, filename)
13
+ end
14
+
15
+ def template_name
16
+ 'system_spec.rb'
17
+ end
18
+
19
+ def filename
20
+ "#{table_name}_spec.rb"
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,9 @@
1
+ require 'rails_helper'
2
+
3
+ RSpec.describe "<%= class_name.pluralize %>", <%= type_metatag(:system) %> do
4
+ before do
5
+ driven_by(:rack_test)
6
+ end
7
+
8
+ pending "add some scenarios (or delete) #{__FILE__}"
9
+ end
@@ -0,0 +1,5 @@
1
+ require 'rails_helper'
2
+
3
+ RSpec.describe "<%= file_path %>/<%= @action %>", <%= type_metatag(:view) %> do
4
+ pending "add some examples to (or delete) #{__FILE__}"
5
+ end
@@ -0,0 +1,22 @@
1
+ require 'generators/rspec'
2
+
3
+ module Rspec
4
+ module Generators
5
+ # @private
6
+ class ViewGenerator < Base
7
+ argument :actions, type: :array, default: [], banner: "action action"
8
+
9
+ class_option :template_engine, desc: "Template engine to generate view files"
10
+
11
+ def create_view_specs
12
+ empty_directory target_path("views", file_path)
13
+
14
+ actions.each do |action|
15
+ @action = action
16
+ template 'view_spec.rb',
17
+ target_path("views", file_path, "#{@action}.html.#{options[:template_engine]}_spec.rb")
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,56 @@
1
+ require 'rails/generators/named_base'
2
+ require 'rspec/core'
3
+ require 'rspec/rails/feature_check'
4
+
5
+ # @private
6
+ # Weirdly named generators namespace (should be `RSpec`) for compatibility with
7
+ # rails loading.
8
+ module Rspec
9
+ # @private
10
+ module Generators
11
+ # @private
12
+ class Base < ::Rails::Generators::NamedBase
13
+ include RSpec::Rails::FeatureCheck
14
+
15
+ def self.source_root(path = nil)
16
+ if path
17
+ @_rspec_source_root = path
18
+ else
19
+ @_rspec_source_root ||= File.expand_path(File.join(File.dirname(__FILE__), 'rspec', generator_name, 'templates'))
20
+ end
21
+ end
22
+
23
+ # @private
24
+ # Load configuration from RSpec to ensure `--default-path` is set
25
+ def self.configuration
26
+ @configuration ||=
27
+ begin
28
+ configuration = RSpec.configuration
29
+ options = RSpec::Core::ConfigurationOptions.new({})
30
+ options.configure(configuration)
31
+ configuration
32
+ end
33
+ end
34
+
35
+ def target_path(*paths)
36
+ File.join(self.class.configuration.default_path, *paths)
37
+ end
38
+ end
39
+ end
40
+ end
41
+
42
+ # @private
43
+ module Rails
44
+ module Generators
45
+ # @private
46
+ class GeneratedAttribute
47
+ def input_type
48
+ @input_type ||= if type == :text
49
+ "textarea"
50
+ else
51
+ "input"
52
+ end
53
+ end
54
+ end
55
+ end
56
+ end
@@ -0,0 +1,25 @@
1
+ module RSpec
2
+ module Rails
3
+ # Fake class to document RSpec ActiveRecord configuration options. In practice,
4
+ # these are dynamically added to the normal RSpec configuration object.
5
+ class ActiveRecordConfiguration
6
+ # @private
7
+ def self.initialize_activerecord_configuration(config)
8
+ config.before :suite do
9
+ # This allows dynamic columns etc to be used on ActiveRecord models when creating instance_doubles
10
+ if defined?(ActiveRecord) && defined?(ActiveRecord::Base) && defined?(::RSpec::Mocks) && (::RSpec::Mocks.respond_to?(:configuration))
11
+ ::RSpec::Mocks.configuration.when_declaring_verifying_double do |possible_model|
12
+ target = possible_model.target
13
+
14
+ if Class === target && ActiveRecord::Base > target && !target.abstract_class?
15
+ target.define_attribute_methods
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
21
+
22
+ initialize_activerecord_configuration RSpec.configuration
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,196 @@
1
+ require 'delegate'
2
+ require 'active_support'
3
+ require 'active_support/concern'
4
+ require 'active_support/core_ext/string'
5
+
6
+ module RSpec
7
+ module Rails
8
+ # @private
9
+ def self.disable_testunit_autorun
10
+ # `Test::Unit::AutoRunner.need_auto_run=` was introduced to the test-unit
11
+ # gem in version 2.4.9. Previous to this version `Test::Unit.run=` was
12
+ # used. The implementation of test-unit included with Ruby has neither
13
+ # method.
14
+ if defined?(Test::Unit::AutoRunner.need_auto_run = ())
15
+ Test::Unit::AutoRunner.need_auto_run = false
16
+ elsif defined?(Test::Unit.run = ())
17
+ Test::Unit.run = false
18
+ end
19
+ end
20
+ private_class_method :disable_testunit_autorun
21
+
22
+ if defined?(Kernel.gem)
23
+ gem 'minitest'
24
+ else
25
+ require 'minitest'
26
+ end
27
+ require 'minitest/assertions'
28
+ # Constant aliased to either Minitest or TestUnit, depending on what is
29
+ # loaded.
30
+ Assertions = Minitest::Assertions
31
+
32
+ # @private
33
+ class AssertionDelegator < Module
34
+ def initialize(*assertion_modules)
35
+ assertion_class = Class.new(SimpleDelegator) do
36
+ include ::RSpec::Rails::Assertions
37
+ include ::RSpec::Rails::MinitestCounters
38
+ assertion_modules.each { |mod| include mod }
39
+ end
40
+
41
+ super() do
42
+ define_method :build_assertion_instance do
43
+ assertion_class.new(self)
44
+ end
45
+
46
+ def assertion_instance
47
+ @assertion_instance ||= build_assertion_instance
48
+ end
49
+
50
+ assertion_modules.each do |mod|
51
+ mod.public_instance_methods.each do |method|
52
+ next if method == :method_missing || method == "method_missing"
53
+
54
+ define_method(method.to_sym) do |*args, &block|
55
+ assertion_instance.send(method.to_sym, *args, &block)
56
+ end
57
+ end
58
+ end
59
+ end
60
+ end
61
+ end
62
+
63
+ # Adapts example groups for `Minitest::Test::LifecycleHooks`
64
+ #
65
+ # @private
66
+ module MinitestLifecycleAdapter
67
+ extend ActiveSupport::Concern
68
+
69
+ included do |group|
70
+ group.before { after_setup }
71
+ group.after { before_teardown }
72
+
73
+ group.around do |example|
74
+ before_setup
75
+ example.run
76
+ after_teardown
77
+ end
78
+ end
79
+
80
+ def before_setup
81
+ end
82
+
83
+ def after_setup
84
+ end
85
+
86
+ def before_teardown
87
+ end
88
+
89
+ def after_teardown
90
+ end
91
+ end
92
+
93
+ # @private
94
+ module MinitestCounters
95
+ attr_writer :assertions
96
+ def assertions
97
+ @assertions ||= 0
98
+ end
99
+ end
100
+
101
+ # @private
102
+ module SetupAndTeardownAdapter
103
+ extend ActiveSupport::Concern
104
+
105
+ module ClassMethods
106
+ # Wraps `setup` calls from within Rails' testing framework in `before`
107
+ # hooks.
108
+ def setup(*methods, &block)
109
+ methods.each do |method|
110
+ if method.to_s =~ /^setup_(with_controller|fixtures|controller_request_and_response)$/
111
+ prepend_before { __send__ method }
112
+ else
113
+ before { __send__ method }
114
+ end
115
+ end
116
+ before(&block) if block
117
+ end
118
+
119
+ # @api private
120
+ #
121
+ # Wraps `teardown` calls from within Rails' testing framework in
122
+ # `after` hooks.
123
+ def teardown(*methods, &block)
124
+ methods.each { |method| after { __send__ method } }
125
+ after(&block) if block
126
+ end
127
+ end
128
+
129
+ def initialize(*args)
130
+ super
131
+ @example = nil
132
+ end
133
+
134
+ def method_name
135
+ @example
136
+ end
137
+ end
138
+
139
+ # @private
140
+ module MinitestAssertionAdapter
141
+ extend ActiveSupport::Concern
142
+
143
+ # @private
144
+ module ClassMethods
145
+ # Returns the names of assertion methods that we want to expose to
146
+ # examples without exposing non-assertion methods in Test::Unit or
147
+ # Minitest.
148
+ def assertion_method_names
149
+ ::RSpec::Rails::Assertions
150
+ .public_instance_methods
151
+ .select do |m|
152
+ m.to_s =~ /^(assert|flunk|refute)/
153
+ end
154
+ end
155
+
156
+ def define_assertion_delegators
157
+ assertion_method_names.each do |m|
158
+ define_method(m.to_sym) do |*args, &block|
159
+ assertion_delegator.send(m.to_sym, *args, &block)
160
+ end
161
+ end
162
+ end
163
+ end
164
+
165
+ class AssertionDelegator
166
+ include ::RSpec::Rails::Assertions
167
+ include ::RSpec::Rails::MinitestCounters
168
+ end
169
+
170
+ def assertion_delegator
171
+ @assertion_delegator ||= AssertionDelegator.new
172
+ end
173
+
174
+ included do
175
+ define_assertion_delegators
176
+ end
177
+ end
178
+
179
+ # Backwards compatibility. It's unlikely that anyone is using this
180
+ # constant, but we had forgotten to mark it as `@private` earlier
181
+ #
182
+ # @private
183
+ TestUnitAssertionAdapter = MinitestAssertionAdapter
184
+
185
+ # @private
186
+ module TaggedLoggingAdapter
187
+ private
188
+ # Vendored from activesupport/lib/active_support/testing/tagged_logging.rb
189
+ # This implements the tagged_logger method where it is expected, but
190
+ # doesn't call `name` or set it up like Rails does.
191
+ def tagged_logger
192
+ @tagged_logger ||= (defined?(Rails.logger) && Rails.logger)
193
+ end
194
+ end
195
+ end
196
+ end
@@ -0,0 +1,158 @@
1
+ module RSpec
2
+ module Rails
3
+ # Fake class to document RSpec Rails configuration options. In practice,
4
+ # these are dynamically added to the normal RSpec configuration object.
5
+ class Configuration
6
+ # @!method infer_spec_type_from_file_location!
7
+ # Automatically tag specs in conventional directories with matching `type`
8
+ # metadata so that they have relevant helpers available to them. See
9
+ # `RSpec::Rails::DIRECTORY_MAPPINGS` for details on which metadata is
10
+ # applied to each directory.
11
+
12
+ # @!method render_views=(val)
13
+ #
14
+ # When set to `true`, controller specs will render the relevant view as
15
+ # well. Defaults to `false`.
16
+
17
+ # @!method render_views(val)
18
+ # Enables view rendering for controllers specs.
19
+
20
+ # @!method render_views?
21
+ # Reader for currently value of `render_views` setting.
22
+ end
23
+
24
+ # Mappings used by `infer_spec_type_from_file_location!`.
25
+ #
26
+ # @api private
27
+ DIRECTORY_MAPPINGS = {
28
+ channel: %w[spec channels],
29
+ controller: %w[spec controllers],
30
+ generator: %w[spec generator],
31
+ helper: %w[spec helpers],
32
+ job: %w[spec jobs],
33
+ mailer: %w[spec mailers],
34
+ model: %w[spec models],
35
+ request: %w[spec (requests|integration|api)],
36
+ routing: %w[spec routing],
37
+ view: %w[spec views],
38
+ feature: %w[spec features],
39
+ system: %w[spec system],
40
+ mailbox: %w[spec mailboxes]
41
+ }
42
+
43
+ # Sets up the different example group modules for the different spec types
44
+ #
45
+ # @api private
46
+ def self.add_test_type_configurations(config)
47
+ config.include RSpec::Rails::ControllerExampleGroup, type: :controller
48
+ config.include RSpec::Rails::HelperExampleGroup, type: :helper
49
+ config.include RSpec::Rails::ModelExampleGroup, type: :model
50
+ config.include RSpec::Rails::RequestExampleGroup, type: :request
51
+ config.include RSpec::Rails::RoutingExampleGroup, type: :routing
52
+ config.include RSpec::Rails::ViewExampleGroup, type: :view
53
+ config.include RSpec::Rails::FeatureExampleGroup, type: :feature
54
+ config.include RSpec::Rails::Matchers
55
+ config.include RSpec::Rails::SystemExampleGroup, type: :system
56
+ end
57
+
58
+ # @private
59
+ def self.initialize_configuration(config) # rubocop:disable Metrics/MethodLength
60
+ config.backtrace_exclusion_patterns << /vendor\//
61
+ config.backtrace_exclusion_patterns << %r{lib/rspec/rails}
62
+
63
+ # controller settings
64
+ config.add_setting :infer_base_class_for_anonymous_controllers, default: true
65
+
66
+ # fixture support
67
+ config.add_setting :use_active_record, default: true
68
+ config.add_setting :use_transactional_fixtures, alias_with: :use_transactional_examples
69
+ config.add_setting :use_instantiated_fixtures
70
+ config.add_setting :global_fixtures
71
+ config.add_setting :fixture_paths
72
+
73
+ config.include RSpec::Rails::FixtureSupport, :use_fixtures
74
+
75
+ # We'll need to create a deprecated module in order to properly report to
76
+ # gems / projects which are relying on this being loaded globally.
77
+ #
78
+ # See rspec/rspec-rails#1355 for history
79
+ #
80
+ # @deprecated Include `RSpec::Rails::RailsExampleGroup` or
81
+ # `RSpec::Rails::FixtureSupport` directly instead
82
+ config.include RSpec::Rails::FixtureSupport
83
+
84
+ config.add_setting :file_fixture_path, default: 'spec/fixtures/files'
85
+ config.include RSpec::Rails::FileFixtureSupport
86
+
87
+ # Add support for fixture_paths on fixture_file_upload
88
+ config.include RSpec::Rails::FixtureFileUploadSupport
89
+
90
+ # This allows us to expose `render_views` as a config option even though it
91
+ # breaks the convention of other options by using `render_views` as a
92
+ # command (i.e. `render_views = true`), where it would normally be used
93
+ # as a getter. This makes it easier for rspec-rails users because we use
94
+ # `render_views` directly in example groups, so this aligns the two APIs,
95
+ # but requires this workaround:
96
+ config.add_setting :rendering_views, default: false
97
+
98
+ config.instance_exec do
99
+ def render_views=(val)
100
+ self.rendering_views = val
101
+ end
102
+
103
+ def render_views
104
+ self.rendering_views = true
105
+ end
106
+
107
+ def render_views?
108
+ rendering_views?
109
+ end
110
+
111
+ def infer_spec_type_from_file_location!
112
+ DIRECTORY_MAPPINGS.each do |type, dir_parts|
113
+ escaped_path = Regexp.compile(dir_parts.join('[\\\/]') + '[\\\/]')
114
+ define_derived_metadata(file_path: escaped_path) do |metadata|
115
+ metadata[:type] ||= type
116
+ end
117
+ end
118
+ end
119
+
120
+ # Adds exclusion filters for gems included with Rails
121
+ def filter_rails_from_backtrace!
122
+ filter_gems_from_backtrace "actionmailer", "actionpack", "actionview"
123
+ filter_gems_from_backtrace "activemodel", "activerecord",
124
+ "activesupport", "activejob"
125
+ end
126
+ end
127
+
128
+ add_test_type_configurations(config)
129
+
130
+ if defined?(::Rails::Controller::Testing)
131
+ [:controller, :view, :request].each do |type|
132
+ config.include ::Rails::Controller::Testing::TestProcess, type: type
133
+ config.include ::Rails::Controller::Testing::TemplateAssertions, type: type
134
+ config.include ::Rails::Controller::Testing::Integration, type: type
135
+ end
136
+ end
137
+
138
+ if RSpec::Rails::FeatureCheck.has_action_mailer?
139
+ config.include RSpec::Rails::MailerExampleGroup, type: :mailer
140
+ config.after { ActionMailer::Base.deliveries.clear }
141
+ end
142
+
143
+ if RSpec::Rails::FeatureCheck.has_active_job?
144
+ config.include RSpec::Rails::JobExampleGroup, type: :job
145
+ end
146
+
147
+ if RSpec::Rails::FeatureCheck.has_action_cable_testing?
148
+ config.include RSpec::Rails::ChannelExampleGroup, type: :channel
149
+ end
150
+
151
+ if RSpec::Rails::FeatureCheck.has_action_mailbox?
152
+ config.include RSpec::Rails::MailboxExampleGroup, type: :mailbox
153
+ end
154
+ end
155
+
156
+ initialize_configuration RSpec.configuration
157
+ end
158
+ end
@@ -0,0 +1,93 @@
1
+ require "rspec/rails/matchers/action_cable/have_streams"
2
+
3
+ module RSpec
4
+ module Rails
5
+ # @api public
6
+ # Container module for channel spec functionality. It is only available if
7
+ # ActionCable has been loaded before it.
8
+ module ChannelExampleGroup
9
+ # @private
10
+ module ClassMethods
11
+ # These blank modules are only necessary for YARD processing. It doesn't
12
+ # handle the conditional check below very well and reports undocumented objects.
13
+ end
14
+ end
15
+ end
16
+ end
17
+
18
+ if RSpec::Rails::FeatureCheck.has_action_cable_testing?
19
+ module RSpec
20
+ module Rails
21
+ # @api public
22
+ # Container module for channel spec functionality.
23
+ module ChannelExampleGroup
24
+ extend ActiveSupport::Concern
25
+ include RSpec::Rails::RailsExampleGroup
26
+ include ActionCable::Connection::TestCase::Behavior
27
+ include ActionCable::Channel::TestCase::Behavior
28
+
29
+ # Class-level DSL for channel specs.
30
+ module ClassMethods
31
+ # @private
32
+ def channel_class
33
+ (_channel_class || described_class).tap do |klass|
34
+ next if klass <= ::ActionCable::Channel::Base
35
+
36
+ raise "Described class is not a channel class.\n" \
37
+ "Specify the channel class in the `describe` statement " \
38
+ "or set it manually using `tests MyChannelClass`"
39
+ end
40
+ end
41
+
42
+ # @private
43
+ def connection_class
44
+ (_connection_class || described_class).tap do |klass|
45
+ next if klass <= ::ActionCable::Connection::Base
46
+
47
+ raise "Described class is not a connection class.\n" \
48
+ "Specify the connection class in the `describe` statement " \
49
+ "or set it manually using `tests MyConnectionClass`"
50
+ end
51
+ end
52
+ end
53
+
54
+ # Checks that the connection attempt has been rejected.
55
+ #
56
+ # @example
57
+ # expect { connect }.to have_rejected_connection
58
+ def have_rejected_connection
59
+ raise_error(::ActionCable::Connection::Authorization::UnauthorizedError)
60
+ end
61
+
62
+ # Checks that the subscription is subscribed to at least one stream.
63
+ #
64
+ # @example
65
+ # expect(subscription).to have_streams
66
+ def have_streams
67
+ check_subscribed!
68
+
69
+ RSpec::Rails::Matchers::ActionCable::HaveStream.new
70
+ end
71
+
72
+ # Checks that the channel has been subscribed to the given stream
73
+ #
74
+ # @example
75
+ # expect(subscription).to have_stream_from("chat_1")
76
+ def have_stream_from(stream)
77
+ check_subscribed!
78
+
79
+ RSpec::Rails::Matchers::ActionCable::HaveStream.new(stream)
80
+ end
81
+
82
+ # Checks that the channel has been subscribed to a stream for the given model
83
+ #
84
+ # @example
85
+ # expect(subscription).to have_stream_for(user)
86
+ def have_stream_for(object)
87
+ check_subscribed!
88
+ RSpec::Rails::Matchers::ActionCable::HaveStream.new(broadcasting_for(object))
89
+ end
90
+ end
91
+ end
92
+ end
93
+ end