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.
- checksums.yaml +7 -0
- data/mini-quick-sys.gemspec +12 -0
- data/rspec-rails-8.0.4/Capybara.md +28 -0
- data/rspec-rails-8.0.4/Changelog.md +1408 -0
- data/rspec-rails-8.0.4/LICENSE.md +25 -0
- data/rspec-rails-8.0.4/README.md +386 -0
- data/rspec-rails-8.0.4/lib/generators/rspec/authentication/authentication_generator.rb +25 -0
- data/rspec-rails-8.0.4/lib/generators/rspec/authentication/templates/user_spec.rb +5 -0
- data/rspec-rails-8.0.4/lib/generators/rspec/authentication/templates/users.yml +11 -0
- data/rspec-rails-8.0.4/lib/generators/rspec/channel/channel_generator.rb +12 -0
- data/rspec-rails-8.0.4/lib/generators/rspec/channel/templates/channel_spec.rb.erb +7 -0
- data/rspec-rails-8.0.4/lib/generators/rspec/controller/controller_generator.rb +51 -0
- data/rspec-rails-8.0.4/lib/generators/rspec/controller/templates/controller_spec.rb +16 -0
- data/rspec-rails-8.0.4/lib/generators/rspec/controller/templates/request_spec.rb +19 -0
- data/rspec-rails-8.0.4/lib/generators/rspec/controller/templates/routing_spec.rb +13 -0
- data/rspec-rails-8.0.4/lib/generators/rspec/controller/templates/view_spec.rb +5 -0
- data/rspec-rails-8.0.4/lib/generators/rspec/feature/feature_generator.rb +29 -0
- data/rspec-rails-8.0.4/lib/generators/rspec/feature/templates/feature_singular_spec.rb +5 -0
- data/rspec-rails-8.0.4/lib/generators/rspec/feature/templates/feature_spec.rb +5 -0
- data/rspec-rails-8.0.4/lib/generators/rspec/generator/generator_generator.rb +24 -0
- data/rspec-rails-8.0.4/lib/generators/rspec/generator/templates/generator_spec.rb +5 -0
- data/rspec-rails-8.0.4/lib/generators/rspec/helper/helper_generator.rb +16 -0
- data/rspec-rails-8.0.4/lib/generators/rspec/helper/templates/helper_spec.rb +17 -0
- data/rspec-rails-8.0.4/lib/generators/rspec/install/install_generator.rb +80 -0
- data/rspec-rails-8.0.4/lib/generators/rspec/install/templates/spec/rails_helper.rb +91 -0
- data/rspec-rails-8.0.4/lib/generators/rspec/job/job_generator.rb +13 -0
- data/rspec-rails-8.0.4/lib/generators/rspec/job/templates/job_spec.rb.erb +7 -0
- data/rspec-rails-8.0.4/lib/generators/rspec/mailbox/mailbox_generator.rb +14 -0
- data/rspec-rails-8.0.4/lib/generators/rspec/mailbox/templates/mailbox_spec.rb.erb +7 -0
- data/rspec-rails-8.0.4/lib/generators/rspec/mailer/mailer_generator.rb +30 -0
- data/rspec-rails-8.0.4/lib/generators/rspec/mailer/templates/fixture +3 -0
- data/rspec-rails-8.0.4/lib/generators/rspec/mailer/templates/mailer_spec.rb +25 -0
- data/rspec-rails-8.0.4/lib/generators/rspec/mailer/templates/preview.rb +13 -0
- data/rspec-rails-8.0.4/lib/generators/rspec/model/model_generator.rb +37 -0
- data/rspec-rails-8.0.4/lib/generators/rspec/model/templates/fixtures.yml +19 -0
- data/rspec-rails-8.0.4/lib/generators/rspec/model/templates/model_spec.rb +7 -0
- data/rspec-rails-8.0.4/lib/generators/rspec/request/request_generator.rb +17 -0
- data/rspec-rails-8.0.4/lib/generators/rspec/request/templates/request_spec.rb +10 -0
- data/rspec-rails-8.0.4/lib/generators/rspec/scaffold/scaffold_generator.rb +136 -0
- data/rspec-rails-8.0.4/lib/generators/rspec/scaffold/templates/api_controller_spec.rb +129 -0
- data/rspec-rails-8.0.4/lib/generators/rspec/scaffold/templates/api_request_spec.rb +131 -0
- data/rspec-rails-8.0.4/lib/generators/rspec/scaffold/templates/controller_spec.rb +145 -0
- data/rspec-rails-8.0.4/lib/generators/rspec/scaffold/templates/edit_spec.rb +27 -0
- data/rspec-rails-8.0.4/lib/generators/rspec/scaffold/templates/index_spec.rb +26 -0
- data/rspec-rails-8.0.4/lib/generators/rspec/scaffold/templates/new_spec.rb +22 -0
- data/rspec-rails-8.0.4/lib/generators/rspec/scaffold/templates/request_spec.rb +138 -0
- data/rspec-rails-8.0.4/lib/generators/rspec/scaffold/templates/routing_spec.rb +46 -0
- data/rspec-rails-8.0.4/lib/generators/rspec/scaffold/templates/show_spec.rb +21 -0
- data/rspec-rails-8.0.4/lib/generators/rspec/system/system_generator.rb +24 -0
- data/rspec-rails-8.0.4/lib/generators/rspec/system/templates/system_spec.rb +9 -0
- data/rspec-rails-8.0.4/lib/generators/rspec/view/templates/view_spec.rb +5 -0
- data/rspec-rails-8.0.4/lib/generators/rspec/view/view_generator.rb +22 -0
- data/rspec-rails-8.0.4/lib/generators/rspec.rb +56 -0
- data/rspec-rails-8.0.4/lib/rspec/rails/active_record.rb +25 -0
- data/rspec-rails-8.0.4/lib/rspec/rails/adapters.rb +196 -0
- data/rspec-rails-8.0.4/lib/rspec/rails/configuration.rb +158 -0
- data/rspec-rails-8.0.4/lib/rspec/rails/example/channel_example_group.rb +93 -0
- data/rspec-rails-8.0.4/lib/rspec/rails/example/controller_example_group.rb +217 -0
- data/rspec-rails-8.0.4/lib/rspec/rails/example/feature_example_group.rb +53 -0
- data/rspec-rails-8.0.4/lib/rspec/rails/example/helper_example_group.rb +42 -0
- data/rspec-rails-8.0.4/lib/rspec/rails/example/job_example_group.rb +23 -0
- data/rspec-rails-8.0.4/lib/rspec/rails/example/mailbox_example_group.rb +80 -0
- data/rspec-rails-8.0.4/lib/rspec/rails/example/mailer_example_group.rb +38 -0
- data/rspec-rails-8.0.4/lib/rspec/rails/example/model_example_group.rb +11 -0
- data/rspec-rails-8.0.4/lib/rspec/rails/example/rails_example_group.rb +23 -0
- data/rspec-rails-8.0.4/lib/rspec/rails/example/request_example_group.rb +27 -0
- data/rspec-rails-8.0.4/lib/rspec/rails/example/routing_example_group.rb +61 -0
- data/rspec-rails-8.0.4/lib/rspec/rails/example/system_example_group.rb +177 -0
- data/rspec-rails-8.0.4/lib/rspec/rails/example/view_example_group.rb +214 -0
- data/rspec-rails-8.0.4/lib/rspec/rails/example.rb +13 -0
- data/rspec-rails-8.0.4/lib/rspec/rails/extensions/active_record/proxy.rb +11 -0
- data/rspec-rails-8.0.4/lib/rspec/rails/extensions.rb +1 -0
- data/rspec-rails-8.0.4/lib/rspec/rails/feature_check.rb +51 -0
- data/rspec-rails-8.0.4/lib/rspec/rails/file_fixture_support.rb +18 -0
- data/rspec-rails-8.0.4/lib/rspec/rails/fixture_file_upload_support.rb +39 -0
- data/rspec-rails-8.0.4/lib/rspec/rails/fixture_support.rb +58 -0
- data/rspec-rails-8.0.4/lib/rspec/rails/matchers/action_cable/have_broadcasted_to.rb +180 -0
- data/rspec-rails-8.0.4/lib/rspec/rails/matchers/action_cable/have_streams.rb +58 -0
- data/rspec-rails-8.0.4/lib/rspec/rails/matchers/action_cable.rb +70 -0
- data/rspec-rails-8.0.4/lib/rspec/rails/matchers/action_mailbox.rb +73 -0
- data/rspec-rails-8.0.4/lib/rspec/rails/matchers/active_job.rb +534 -0
- data/rspec-rails-8.0.4/lib/rspec/rails/matchers/base_matcher.rb +179 -0
- data/rspec-rails-8.0.4/lib/rspec/rails/matchers/be_a_new.rb +83 -0
- data/rspec-rails-8.0.4/lib/rspec/rails/matchers/be_new_record.rb +30 -0
- data/rspec-rails-8.0.4/lib/rspec/rails/matchers/be_valid.rb +49 -0
- data/rspec-rails-8.0.4/lib/rspec/rails/matchers/have_enqueued_mail.rb +259 -0
- data/rspec-rails-8.0.4/lib/rspec/rails/matchers/have_http_status.rb +381 -0
- data/rspec-rails-8.0.4/lib/rspec/rails/matchers/have_rendered.rb +64 -0
- data/rspec-rails-8.0.4/lib/rspec/rails/matchers/redirect_to.rb +38 -0
- data/rspec-rails-8.0.4/lib/rspec/rails/matchers/relation_match_array.rb +3 -0
- data/rspec-rails-8.0.4/lib/rspec/rails/matchers/routing_matchers.rb +125 -0
- data/rspec-rails-8.0.4/lib/rspec/rails/matchers/send_email.rb +122 -0
- data/rspec-rails-8.0.4/lib/rspec/rails/matchers.rb +36 -0
- data/rspec-rails-8.0.4/lib/rspec/rails/tasks/rspec.rake +49 -0
- data/rspec-rails-8.0.4/lib/rspec/rails/vendor/capybara.rb +32 -0
- data/rspec-rails-8.0.4/lib/rspec/rails/version.rb +9 -0
- data/rspec-rails-8.0.4/lib/rspec/rails/view_assigns.rb +27 -0
- data/rspec-rails-8.0.4/lib/rspec/rails/view_path_builder.rb +29 -0
- data/rspec-rails-8.0.4/lib/rspec/rails/view_rendering.rb +166 -0
- data/rspec-rails-8.0.4/lib/rspec/rails/view_spec_methods.rb +56 -0
- data/rspec-rails-8.0.4/lib/rspec/rails.rb +18 -0
- data/rspec-rails-8.0.4/lib/rspec-rails.rb +91 -0
- 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,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
|