rspec-activemodel-mocks 1.0.3 → 1.2.0
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 +5 -5
- checksums.yaml.gz.sig +0 -0
- data/README.md +3 -7
- data/features/step_definitions/additional_cli_steps.rb +4 -3
- data/features/support/env.rb +5 -4
- data/features/support/rubinius.rb +3 -2
- data/lib/rspec/active_model/mocks/mocks.rb +68 -36
- data/lib/rspec/active_model/mocks/version.rb +2 -1
- data/lib/rspec/active_model/mocks.rb +2 -1
- data/lib/rspec-activemodel-mocks.rb +1 -0
- data/spec/rspec/active_model/mocks/mock_model_spec.rb +66 -10
- data/spec/rspec/active_model/mocks/stub_model_spec.rb +20 -1
- data/spec/spec_helper.rb +9 -4
- data/spec/support/ar_classes.rb +7 -6
- data/spec/support/helpers.rb +1 -0
- data/spec/support/matchers.rb +3 -2
- data/spec/support/minitest_support.rb +1 -0
- data/spec/support/null_object.rb +1 -0
- data.tar.gz.sig +0 -0
- metadata +15 -84
- metadata.gz.sig +0 -0
- data/features/step_definitions/model_steps.rb +0 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 7c03088fe7611777d052655997f79e7394142634a18c47f12ef2b62d21c1225d
|
4
|
+
data.tar.gz: 59d467700bd06b7246d40282f73bf9f374574c951455f3400e7ec47e3e0dedc5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 19ddf1bdf625c89ae9908c504af7ba69204d9e07dcaffddf7baafc4401fcd5b90a1c0e9b747b63be4bf05e10017976dd63a9c3c435626344469a05542d401282
|
7
|
+
data.tar.gz: fddd4cf43f973358d3b04762aaedebcc629a7e714bbcf0e82f13f875e6fb6f5c3eb2bf4b328c7227ea55c1b03e12e047420b92463277e47e5a284f551eabfad6
|
checksums.yaml.gz.sig
CHANGED
Binary file
|
data/README.md
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# RSpec::ActiveModel::Mocks [](https://github.com/rspec/rspec-activemodel-mocks/actions/workflows/ci.yml)
|
2
2
|
|
3
3
|
RSpec::ActiveModel::Mocks provides tools for testing `ActiveModel` classes.
|
4
4
|
|
@@ -14,12 +14,8 @@ And then execute:
|
|
14
14
|
|
15
15
|
$ bundle
|
16
16
|
|
17
|
-
|
18
|
-
|
19
|
-
and `mock_model`.
|
20
|
-
|
21
|
-
To use `stub_model` and `mock_model` without rspec-rails, require the
|
22
|
-
following file:
|
17
|
+
To finish the installation and start using `stub_model` and `mock_model`, require the
|
18
|
+
following file in your `spec_helper.rb` or `rails_helper.rb`.
|
23
19
|
|
24
20
|
require 'rspec/active_model/mocks'
|
25
21
|
|
@@ -1,4 +1,5 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
step
|
1
|
+
# frozen_string_literal: true
|
2
|
+
Then(/^the example(s)? should( all)? pass$/) do |_, _|
|
3
|
+
step 'the output should contain "0 failures"'
|
4
|
+
step 'the exit status should be 0'
|
4
5
|
end
|
data/features/support/env.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
require 'aruba/cucumber'
|
2
3
|
|
3
4
|
module ArubaExt
|
@@ -17,7 +18,7 @@ unless File.directory?('./tmp/sample')
|
|
17
18
|
end
|
18
19
|
|
19
20
|
def aruba_path(file_or_dir)
|
20
|
-
File.expand_path("../../../#{file_or_dir.sub('sample','aruba')}", __FILE__)
|
21
|
+
File.expand_path("../../../#{file_or_dir.sub('sample', 'aruba')}", __FILE__)
|
21
22
|
end
|
22
23
|
|
23
24
|
def sample_path(file_or_dir)
|
@@ -37,12 +38,12 @@ def copy(file_or_dir)
|
|
37
38
|
end
|
38
39
|
|
39
40
|
Before do
|
40
|
-
steps %
|
41
|
+
steps %(
|
41
42
|
Given a directory named "spec"
|
42
|
-
|
43
|
+
)
|
43
44
|
|
44
45
|
Dir['tmp/sample/*'].each do |file_or_dir|
|
45
|
-
if
|
46
|
+
if file_or_dir !~ /spec$/
|
46
47
|
write_symlink(file_or_dir)
|
47
48
|
end
|
48
49
|
end
|
@@ -1,6 +1,7 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
# Required until https://github.com/rubinius/rubinius/issues/2430 is resolved
|
2
|
-
ENV['RBXOPT'] = "#{ENV
|
3
|
+
ENV['RBXOPT'] = "#{ENV.fetch("RBXOPT", nil)} -Xcompiler.no_rbc"
|
3
4
|
|
4
|
-
Around "@unsupported-on-rbx" do |
|
5
|
+
Around "@unsupported-on-rbx" do |_scenario, block|
|
5
6
|
block.call unless defined?(Rubinius)
|
6
7
|
end
|
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
require 'active_support'
|
2
3
|
require 'active_support/core_ext/object/to_param'
|
3
4
|
require 'active_model'
|
@@ -5,7 +6,6 @@ require 'active_model'
|
|
5
6
|
module RSpec::ActiveModel::Mocks
|
6
7
|
class IllegalDataAccessException < StandardError; end
|
7
8
|
module Mocks
|
8
|
-
|
9
9
|
module ActiveModelInstanceMethods
|
10
10
|
# Stubs `persisted?` to return false and `id` to return nil
|
11
11
|
# @return self
|
@@ -38,6 +38,11 @@ module RSpec::ActiveModel::Mocks
|
|
38
38
|
def initialize(association_name)
|
39
39
|
@association_name = association_name
|
40
40
|
end
|
41
|
+
|
42
|
+
def inversed_from(record)
|
43
|
+
self.target = record
|
44
|
+
@inversed = !!record
|
45
|
+
end
|
41
46
|
end
|
42
47
|
|
43
48
|
module ActiveRecordInstanceMethods
|
@@ -69,6 +74,8 @@ module RSpec::ActiveModel::Mocks
|
|
69
74
|
end
|
70
75
|
end
|
71
76
|
|
77
|
+
# rubocop:disable Metrics/AbcSize,Metrics/CyclomaticComplexity,Metrics/MethodLength,Metrics/PerceivedComplexity
|
78
|
+
|
72
79
|
# Creates a test double representing `string_or_model_class` with common
|
73
80
|
# ActiveModel methods stubbed out. Additional methods may be easily
|
74
81
|
# stubbed (via add_stubs) if `stubs` is passed. This is most useful for
|
@@ -86,14 +93,23 @@ module RSpec::ActiveModel::Mocks
|
|
86
93
|
# * A String representing a Class that does not exist
|
87
94
|
# * A String representing a Class that extends ActiveModel::Naming
|
88
95
|
# * A Class that extends ActiveModel::Naming
|
89
|
-
def mock_model(string_or_model_class, stubs
|
96
|
+
def mock_model(string_or_model_class, stubs={})
|
90
97
|
if String === string_or_model_class
|
91
98
|
if Object.const_defined?(string_or_model_class)
|
92
99
|
model_class = Object.const_get(string_or_model_class)
|
93
100
|
else
|
94
101
|
model_class = Object.const_set(string_or_model_class, Class.new do
|
102
|
+
# rubocop:disable Style/SingleLineMethods
|
95
103
|
extend ::ActiveModel::Naming
|
96
104
|
def self.primary_key; :id; end
|
105
|
+
|
106
|
+
# For detection of being a valid association in 7+
|
107
|
+
def self.<(other); other == ActiveRecord::Base; end
|
108
|
+
def self._reflect_on_association(_other); nil; end
|
109
|
+
def self.composite_primary_key?; false; end
|
110
|
+
def self.has_query_constraints?; false; end
|
111
|
+
def self.param_delimiter; "-"; end
|
112
|
+
# rubocop:enable Style/SingleLineMethods
|
97
113
|
end)
|
98
114
|
end
|
99
115
|
else
|
@@ -101,24 +117,29 @@ module RSpec::ActiveModel::Mocks
|
|
101
117
|
end
|
102
118
|
|
103
119
|
unless model_class.kind_of? ::ActiveModel::Naming
|
104
|
-
raise ArgumentError
|
120
|
+
raise ArgumentError, <<-EOM
|
105
121
|
The mock_model method can only accept as its first argument:
|
106
122
|
* A String representing a Class that does not exist
|
107
123
|
* A String representing a Class that extends ActiveModel::Naming
|
108
124
|
* A Class that extends ActiveModel::Naming
|
109
125
|
|
110
126
|
It received #{model_class.inspect}
|
111
|
-
EOM
|
127
|
+
EOM
|
112
128
|
end
|
113
129
|
|
114
|
-
stubs = {:id => next_id}.merge(stubs)
|
115
|
-
stubs = {:persisted? => !!stubs[:id],
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
130
|
+
stubs = { :id => next_id }.merge(stubs)
|
131
|
+
stubs = { :persisted? => !!stubs[:id],
|
132
|
+
:destroyed? => false,
|
133
|
+
:marked_for_destruction? => false,
|
134
|
+
:valid? => true,
|
135
|
+
:blank? => false }.merge(stubs)
|
120
136
|
|
121
137
|
double("#{model_class.name}_#{stubs[:id]}", stubs).tap do |m|
|
138
|
+
if model_class.method(:===).owner == Module && !stubs.key?(:===)
|
139
|
+
allow(model_class).to receive(:===).and_wrap_original do |original, other|
|
140
|
+
m === other || original.call(other)
|
141
|
+
end
|
142
|
+
end
|
122
143
|
msingleton = class << m; self; end
|
123
144
|
msingleton.class_eval do
|
124
145
|
include ActiveModelInstanceMethods
|
@@ -126,25 +147,22 @@ EOM
|
|
126
147
|
include ActiveModel::Conversion
|
127
148
|
include ActiveModel::Validations
|
128
149
|
end
|
129
|
-
if defined?(ActiveRecord)
|
130
|
-
|
131
|
-
|
132
|
-
RSpec::Mocks.allow_message(m.errors, :empty?).and_return(false)
|
133
|
-
end
|
134
|
-
end
|
150
|
+
if defined?(ActiveRecord) && stubs.values_at(:save, :update_attributes, :update).include?(false)
|
151
|
+
RSpec::Mocks.allow_message(m.errors, :empty?).and_return(false)
|
152
|
+
RSpec::Mocks.allow_message(m.errors, :blank?).and_return(false)
|
135
153
|
end
|
136
154
|
|
137
155
|
msingleton.__send__(:define_method, :is_a?) do |other|
|
138
156
|
model_class.ancestors.include?(other)
|
139
|
-
end unless stubs.
|
157
|
+
end unless stubs.key?(:is_a?)
|
140
158
|
|
141
159
|
msingleton.__send__(:define_method, :kind_of?) do |other|
|
142
160
|
model_class.ancestors.include?(other)
|
143
|
-
end unless stubs.
|
161
|
+
end unless stubs.key?(:kind_of?)
|
144
162
|
|
145
163
|
msingleton.__send__(:define_method, :instance_of?) do |other|
|
146
164
|
other == model_class
|
147
|
-
end unless stubs.
|
165
|
+
end unless stubs.key?(:instance_of?)
|
148
166
|
|
149
167
|
msingleton.__send__(:define_method, :__model_class_has_column?) do |method_name|
|
150
168
|
model_class.respond_to?(:column_names) && model_class.column_names.include?(method_name.to_s)
|
@@ -152,28 +170,33 @@ EOM
|
|
152
170
|
|
153
171
|
msingleton.__send__(:define_method, :has_attribute?) do |attr_name|
|
154
172
|
__model_class_has_column?(attr_name)
|
155
|
-
end unless stubs.
|
173
|
+
end unless stubs.key?(:has_attribute?)
|
156
174
|
|
157
175
|
msingleton.__send__(:define_method, :respond_to?) do |method_name, *args|
|
158
|
-
|
176
|
+
include_private = args.first || false
|
159
177
|
__model_class_has_column?(method_name) ? true : super(method_name, include_private)
|
160
|
-
end unless stubs.
|
178
|
+
end unless stubs.key?(:respond_to?)
|
161
179
|
|
162
|
-
msingleton.__send__(:define_method, :method_missing) do |
|
163
|
-
respond_to?(
|
180
|
+
msingleton.__send__(:define_method, :method_missing) do |missing_m, *a, &b|
|
181
|
+
if respond_to?(missing_m)
|
182
|
+
null_object? ? self : nil
|
183
|
+
else
|
184
|
+
super(missing_m, *a, &b)
|
185
|
+
end
|
164
186
|
end
|
165
187
|
|
166
188
|
msingleton.__send__(:define_method, :class) do
|
167
189
|
model_class
|
168
|
-
end unless stubs.
|
190
|
+
end unless stubs.key?(:class)
|
169
191
|
|
170
192
|
mock_param = to_param
|
171
193
|
msingleton.__send__(:define_method, :to_s) do
|
172
194
|
"#{model_class.name}_#{mock_param}"
|
173
|
-
end unless stubs.
|
195
|
+
end unless stubs.key?(:to_s)
|
174
196
|
yield m if block_given?
|
175
197
|
end
|
176
198
|
end
|
199
|
+
# rubocop:enable Metrics/AbcSize,Metrics/CyclomaticComplexity,Metrics/MethodLength,Metrics/PerceivedComplexity
|
177
200
|
|
178
201
|
module ActiveModelStubExtensions
|
179
202
|
# Stubs `persisted` to return false and `id` to return nil
|
@@ -192,7 +215,7 @@ EOM
|
|
192
215
|
module ActiveRecordStubExtensions
|
193
216
|
# Stubs `id` (or other primary key method) to return nil
|
194
217
|
def as_new_record
|
195
|
-
|
218
|
+
__send__("#{self.class.primary_key}=", nil)
|
196
219
|
super
|
197
220
|
end
|
198
221
|
|
@@ -204,10 +227,13 @@ EOM
|
|
204
227
|
# Raises an IllegalDataAccessException (stubbed models are not allowed to access the database)
|
205
228
|
# @raises IllegalDataAccessException
|
206
229
|
def connection
|
207
|
-
raise RSpec::ActiveModel::Mocks::IllegalDataAccessException
|
230
|
+
raise RSpec::ActiveModel::Mocks::IllegalDataAccessException,
|
231
|
+
"stubbed models are not allowed to access the database"
|
208
232
|
end
|
209
233
|
end
|
210
234
|
|
235
|
+
# rubocop:disable Metrics/AbcSize,Metrics/MethodLength
|
236
|
+
|
211
237
|
# Creates an instance of `Model` with `to_param` stubbed using a
|
212
238
|
# generated value that is unique to each object. If `Model` is an
|
213
239
|
# `ActiveRecord` model, it is prohibited from accessing the database.
|
@@ -241,17 +267,21 @@ EOM
|
|
241
267
|
if defined?(ActiveRecord) && model_class < ActiveRecord::Base && model_class.primary_key
|
242
268
|
m.extend ActiveRecordStubExtensions
|
243
269
|
primary_key = model_class.primary_key.to_sym
|
244
|
-
stubs = {primary_key => next_id}.merge(stubs)
|
245
|
-
stubs = {:persisted? => !!stubs[primary_key]}.merge(stubs)
|
270
|
+
stubs = { primary_key => next_id }.merge(stubs)
|
271
|
+
stubs = { :persisted? => !!stubs[primary_key] }.merge(stubs)
|
246
272
|
else
|
247
|
-
stubs = {:id => next_id}.merge(stubs)
|
248
|
-
stubs = {:persisted? => !!stubs[:id]}.merge(stubs)
|
273
|
+
stubs = { :id => next_id }.merge(stubs)
|
274
|
+
stubs = { :persisted? => !!stubs[:id] }.merge(stubs)
|
249
275
|
end
|
250
|
-
stubs = {:blank? => false}.merge(stubs)
|
276
|
+
stubs = { :blank? => false }.merge(stubs)
|
251
277
|
|
252
278
|
stubs.each do |message, return_value|
|
253
279
|
if m.respond_to?("#{message}=")
|
254
|
-
|
280
|
+
begin
|
281
|
+
m.__send__("#{message}=", return_value)
|
282
|
+
rescue ActiveModel::MissingAttributeError
|
283
|
+
RSpec::Mocks.allow_message(m, message).and_return(return_value)
|
284
|
+
end
|
255
285
|
else
|
256
286
|
RSpec::Mocks.allow_message(m, message).and_return(return_value)
|
257
287
|
end
|
@@ -260,15 +290,17 @@ EOM
|
|
260
290
|
yield m if block_given?
|
261
291
|
end
|
262
292
|
end
|
293
|
+
# rubocop:enable Metrics/AbcSize,Metrics/MethodLength
|
263
294
|
|
264
|
-
|
295
|
+
private
|
265
296
|
|
297
|
+
# rubocop:disable Style/ClassVars
|
266
298
|
@@model_id = 1000
|
267
299
|
|
268
300
|
def next_id
|
269
301
|
@@model_id += 1
|
270
302
|
end
|
271
|
-
|
303
|
+
# rubocop:enable Style/ClassVars
|
272
304
|
end
|
273
305
|
end
|
274
306
|
|
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
require 'spec_helper'
|
2
3
|
|
3
4
|
describe "mock_model(RealModel)" do
|
@@ -81,6 +82,7 @@ describe "mock_model(RealModel)" do
|
|
81
82
|
it "is empty" do
|
82
83
|
model = mock_model(MockableModel)
|
83
84
|
expect(model.errors).to be_empty
|
85
|
+
expect(model.errors).to be_blank
|
84
86
|
end
|
85
87
|
end
|
86
88
|
|
@@ -88,6 +90,7 @@ describe "mock_model(RealModel)" do
|
|
88
90
|
it "is not empty" do
|
89
91
|
model = mock_model(MockableModel, :save => false)
|
90
92
|
expect(model.errors).not_to be_empty
|
93
|
+
expect(model.errors).not_to be_blank
|
91
94
|
end
|
92
95
|
end
|
93
96
|
|
@@ -95,15 +98,16 @@ describe "mock_model(RealModel)" do
|
|
95
98
|
it "is not empty" do
|
96
99
|
model = mock_model(MockableModel, :save => false)
|
97
100
|
expect(model.errors).not_to be_empty
|
101
|
+
expect(model.errors).not_to be_blank
|
98
102
|
end
|
99
103
|
end
|
100
104
|
end
|
101
105
|
|
102
106
|
describe "with params" do
|
103
107
|
it "does not mutate its parameters" do
|
104
|
-
params = {:a => 'b'}
|
108
|
+
params = { :a => 'b' }
|
105
109
|
mock_model(MockableModel, params)
|
106
|
-
expect(params).to eq({:a => 'b'})
|
110
|
+
expect(params).to eq({ :a => 'b' })
|
107
111
|
end
|
108
112
|
end
|
109
113
|
|
@@ -157,6 +161,56 @@ describe "mock_model(RealModel)" do
|
|
157
161
|
end
|
158
162
|
end
|
159
163
|
|
164
|
+
describe "#===" do
|
165
|
+
it "works with a case statement" do
|
166
|
+
case mock_model(MockableModel)
|
167
|
+
when MockableModel then true
|
168
|
+
else
|
169
|
+
raise
|
170
|
+
end
|
171
|
+
|
172
|
+
# rubocop:disable Lint/LiteralAsCondition
|
173
|
+
case :not_mockable_model
|
174
|
+
when MockableModel then raise
|
175
|
+
else
|
176
|
+
true
|
177
|
+
end
|
178
|
+
# rubocop:enable Lint/LiteralAsCondition
|
179
|
+
end
|
180
|
+
|
181
|
+
it "won't break previous stubs" do
|
182
|
+
allow(MockableModel).to receive(:===).with("string") { true }
|
183
|
+
mock_model(MockableModel)
|
184
|
+
|
185
|
+
# rubocop:disable Lint/LiteralAsCondition
|
186
|
+
case "string"
|
187
|
+
when MockableModel then true
|
188
|
+
else
|
189
|
+
raise
|
190
|
+
end
|
191
|
+
# rubocop:enable Lint/LiteralAsCondition
|
192
|
+
end
|
193
|
+
|
194
|
+
it "won't override class definitions" do
|
195
|
+
another_mockable_model =
|
196
|
+
Class.new(MockableModel) do
|
197
|
+
def self.===(_other)
|
198
|
+
true
|
199
|
+
end
|
200
|
+
end
|
201
|
+
|
202
|
+
mock_model(another_mockable_model)
|
203
|
+
|
204
|
+
# rubocop:disable Lint/LiteralAsCondition
|
205
|
+
case "string"
|
206
|
+
when another_mockable_model then true
|
207
|
+
else
|
208
|
+
raise
|
209
|
+
end
|
210
|
+
# rubocop:enable Lint/LiteralAsCondition
|
211
|
+
end
|
212
|
+
end
|
213
|
+
|
160
214
|
describe "#kind_of?" do
|
161
215
|
before(:each) do
|
162
216
|
@model = mock_model(SubMockableModel)
|
@@ -196,7 +250,7 @@ describe "mock_model(RealModel)" do
|
|
196
250
|
describe "#has_attribute?" do
|
197
251
|
context "with an ActiveRecord model" do
|
198
252
|
before(:each) do
|
199
|
-
MockableModel.stub(:column_names).and_return([
|
253
|
+
MockableModel.stub(:column_names).and_return(%w[column_a column_b])
|
200
254
|
@model = mock_model(MockableModel)
|
201
255
|
end
|
202
256
|
|
@@ -223,7 +277,7 @@ describe "mock_model(RealModel)" do
|
|
223
277
|
describe "#respond_to?" do
|
224
278
|
context "with an ActiveRecord model" do
|
225
279
|
before(:each) do
|
226
|
-
allow(MockableModel).to receive(:column_names).and_return([
|
280
|
+
allow(MockableModel).to receive(:column_names).and_return(%w[column_a column_b])
|
227
281
|
@model = mock_model(MockableModel)
|
228
282
|
end
|
229
283
|
|
@@ -416,6 +470,7 @@ describe "mock_model(RealModel)" do
|
|
416
470
|
end
|
417
471
|
|
418
472
|
describe "ActiveModel Lint tests" do
|
473
|
+
# rubocop:disable Lint/EmptyExpression,Metrics/BlockNesting
|
419
474
|
begin
|
420
475
|
require 'minitest/assertions'
|
421
476
|
include Minitest::Assertions
|
@@ -451,9 +506,9 @@ describe "mock_model(RealModel)" do
|
|
451
506
|
ERR
|
452
507
|
end
|
453
508
|
include Test::Unit::Assertions
|
454
|
-
if defined?(Test::Unit::AutoRunner.need_auto_run = ())
|
509
|
+
if defined?((Test::Unit::AutoRunner.need_auto_run = ()))
|
455
510
|
Test::Unit::AutoRunner.need_auto_run = false
|
456
|
-
elsif defined?(Test::Unit.run = ())
|
511
|
+
elsif defined?((Test::Unit.run = ()))
|
457
512
|
Test::Unit.run = false
|
458
513
|
end
|
459
514
|
else
|
@@ -464,20 +519,21 @@ describe "mock_model(RealModel)" do
|
|
464
519
|
else
|
465
520
|
require 'test/unit/assertions'
|
466
521
|
include Test::Unit::Assertions
|
467
|
-
if defined?(Test::Unit::AutoRunner.need_auto_run = ())
|
522
|
+
if defined?((Test::Unit::AutoRunner.need_auto_run = ()))
|
468
523
|
Test::Unit::AutoRunner.need_auto_run = false
|
469
|
-
elsif defined?(Test::Unit.run = ())
|
524
|
+
elsif defined?((Test::Unit.run = ()))
|
470
525
|
Test::Unit.run = false
|
471
526
|
end
|
472
527
|
end
|
473
528
|
end
|
529
|
+
# rubocop:enable Lint/EmptyExpression,Metrics/BlockNesting
|
474
530
|
|
475
531
|
require 'active_model/lint'
|
476
532
|
include ActiveModel::Lint::Tests
|
477
533
|
|
478
534
|
# to_s is to support ruby-1.9
|
479
|
-
ActiveModel::Lint::Tests.public_instance_methods.map{|m| m.to_s}.grep(/^test/).each do |m|
|
480
|
-
example m.gsub('_',' ') do
|
535
|
+
ActiveModel::Lint::Tests.public_instance_methods.map {|m| m.to_s}.grep(/^test/).each do |m|
|
536
|
+
example m.gsub('_', ' ') do
|
481
537
|
send m
|
482
538
|
end
|
483
539
|
end
|
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
require 'spec_helper'
|
2
3
|
|
3
4
|
describe "stub_model" do
|
@@ -89,7 +90,8 @@ describe "stub_model" do
|
|
89
90
|
it "raises when hitting the db" do
|
90
91
|
expect do
|
91
92
|
stub_model(MockableModel).connection
|
92
|
-
end.to raise_error(RSpec::ActiveModel::Mocks::IllegalDataAccessException,
|
93
|
+
end.to raise_error(RSpec::ActiveModel::Mocks::IllegalDataAccessException,
|
94
|
+
/stubbed models are not allowed to access the database/)
|
93
95
|
end
|
94
96
|
|
95
97
|
it "increments the id" do
|
@@ -161,6 +163,23 @@ describe "stub_model" do
|
|
161
163
|
end
|
162
164
|
expect(model).to be(@block_arg)
|
163
165
|
end
|
166
|
+
end
|
167
|
+
|
168
|
+
describe "#===" do
|
169
|
+
it "works with a case statement" do
|
170
|
+
case stub_model(MockableModel)
|
171
|
+
when MockableModel then true
|
172
|
+
else
|
173
|
+
raise
|
174
|
+
end
|
164
175
|
|
176
|
+
# rubocop:disable Lint/LiteralAsCondition
|
177
|
+
case :not_stub_model
|
178
|
+
when MockableModel then raise
|
179
|
+
else
|
180
|
+
true
|
181
|
+
end
|
182
|
+
# rubocop:enable Lint/LiteralAsCondition
|
183
|
+
end
|
165
184
|
end
|
166
185
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -1,11 +1,16 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
require 'rspec/active_model/mocks'
|
2
3
|
require 'active_record'
|
3
4
|
|
4
|
-
Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each {|f| require f}
|
5
|
+
Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].sort.each {|f| require f}
|
5
6
|
|
6
|
-
|
7
|
-
|
8
|
-
|
7
|
+
module RSpec
|
8
|
+
module Core
|
9
|
+
class ExampleGroup
|
10
|
+
def self.run_all(reporter=nil)
|
11
|
+
run(reporter || RSpec::Mocks::Mock.new('reporter').as_null_object)
|
12
|
+
end
|
13
|
+
end
|
9
14
|
end
|
10
15
|
end
|
11
16
|
|
data/spec/support/ar_classes.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
ActiveRecord::Base.establish_connection(
|
2
3
|
:adapter => 'sqlite3',
|
3
4
|
:database => ':memory:'
|
@@ -5,31 +6,31 @@ ActiveRecord::Base.establish_connection(
|
|
5
6
|
|
6
7
|
module Connections
|
7
8
|
def self.extended(host)
|
8
|
-
host.connection.execute <<-
|
9
|
+
host.connection.execute <<-EOSQL
|
9
10
|
CREATE TABLE #{host.table_name} (
|
10
11
|
#{host.primary_key} integer PRIMARY KEY AUTOINCREMENT,
|
11
12
|
associated_model_id integer,
|
12
13
|
mockable_model_id integer,
|
13
14
|
nonexistent_model_id integer
|
14
15
|
)
|
15
|
-
|
16
|
+
EOSQL
|
16
17
|
end
|
17
18
|
end
|
18
19
|
|
19
20
|
module ConnectionsView
|
20
21
|
def self.extended(host)
|
21
|
-
host.connection.execute <<-
|
22
|
+
host.connection.execute <<-EOSQL
|
22
23
|
CREATE TABLE some_table (
|
23
24
|
associated_model_id integer,
|
24
25
|
mockable_model_id integer,
|
25
26
|
nonexistent_model_id integer
|
26
27
|
)
|
27
|
-
|
28
|
+
EOSQL
|
28
29
|
|
29
|
-
host.connection.execute <<-
|
30
|
+
host.connection.execute <<-EOSQL
|
30
31
|
CREATE VIEW #{host.table_name} AS
|
31
32
|
select * from some_table;
|
32
|
-
|
33
|
+
EOSQL
|
33
34
|
end
|
34
35
|
end
|
35
36
|
|
data/spec/support/helpers.rb
CHANGED
data/spec/support/matchers.rb
CHANGED
@@ -1,7 +1,8 @@
|
|
1
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
RSpec::Matchers.define :be_included_in_files_in do |path|
|
2
3
|
match do |mod|
|
3
4
|
stub_metadata(
|
4
|
-
:example_group => {:file_path => "#{path}whatever_spec.rb:15"}
|
5
|
+
:example_group => { :file_path => "#{path}whatever_spec.rb:15" }
|
5
6
|
)
|
6
7
|
group = RSpec::Core::ExampleGroup.describe
|
7
8
|
group.included_modules.include?(mod)
|
data/spec/support/null_object.rb
CHANGED
data.tar.gz.sig
CHANGED
Binary file
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rspec-activemodel-mocks
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0
|
4
|
+
version: 1.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- David Chelimsky
|
8
8
|
- Andy Lindeman
|
9
9
|
- Thomas Holmes
|
10
|
-
autorequire:
|
10
|
+
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain:
|
13
13
|
- |
|
@@ -45,10 +45,10 @@ cert_chain:
|
|
45
45
|
ZsVDj6a7lH3cNqtWXZxrb2wO38qV5AkYj8SQK7Hj3/Yui9myUX3crr+PdetazSqQ
|
46
46
|
F3MdtaDehhjC
|
47
47
|
-----END CERTIFICATE-----
|
48
|
-
date:
|
48
|
+
date: 2023-12-10 00:00:00.000000000 Z
|
49
49
|
dependencies:
|
50
50
|
- !ruby/object:Gem::Dependency
|
51
|
-
name:
|
51
|
+
name: activemodel
|
52
52
|
requirement: !ruby/object:Gem::Requirement
|
53
53
|
requirements:
|
54
54
|
- - ">="
|
@@ -62,7 +62,7 @@ dependencies:
|
|
62
62
|
- !ruby/object:Gem::Version
|
63
63
|
version: '3.0'
|
64
64
|
- !ruby/object:Gem::Dependency
|
65
|
-
name:
|
65
|
+
name: activesupport
|
66
66
|
requirement: !ruby/object:Gem::Requirement
|
67
67
|
requirements:
|
68
68
|
- - ">="
|
@@ -95,76 +95,6 @@ dependencies:
|
|
95
95
|
- - "<"
|
96
96
|
- !ruby/object:Gem::Version
|
97
97
|
version: '4.0'
|
98
|
-
- !ruby/object:Gem::Dependency
|
99
|
-
name: rake
|
100
|
-
requirement: !ruby/object:Gem::Requirement
|
101
|
-
requirements:
|
102
|
-
- - "~>"
|
103
|
-
- !ruby/object:Gem::Version
|
104
|
-
version: 10.0.0
|
105
|
-
type: :development
|
106
|
-
prerelease: false
|
107
|
-
version_requirements: !ruby/object:Gem::Requirement
|
108
|
-
requirements:
|
109
|
-
- - "~>"
|
110
|
-
- !ruby/object:Gem::Version
|
111
|
-
version: 10.0.0
|
112
|
-
- !ruby/object:Gem::Dependency
|
113
|
-
name: cucumber
|
114
|
-
requirement: !ruby/object:Gem::Requirement
|
115
|
-
requirements:
|
116
|
-
- - "~>"
|
117
|
-
- !ruby/object:Gem::Version
|
118
|
-
version: 1.3.5
|
119
|
-
type: :development
|
120
|
-
prerelease: false
|
121
|
-
version_requirements: !ruby/object:Gem::Requirement
|
122
|
-
requirements:
|
123
|
-
- - "~>"
|
124
|
-
- !ruby/object:Gem::Version
|
125
|
-
version: 1.3.5
|
126
|
-
- !ruby/object:Gem::Dependency
|
127
|
-
name: aruba
|
128
|
-
requirement: !ruby/object:Gem::Requirement
|
129
|
-
requirements:
|
130
|
-
- - "~>"
|
131
|
-
- !ruby/object:Gem::Version
|
132
|
-
version: 0.4.11
|
133
|
-
type: :development
|
134
|
-
prerelease: false
|
135
|
-
version_requirements: !ruby/object:Gem::Requirement
|
136
|
-
requirements:
|
137
|
-
- - "~>"
|
138
|
-
- !ruby/object:Gem::Version
|
139
|
-
version: 0.4.11
|
140
|
-
- !ruby/object:Gem::Dependency
|
141
|
-
name: ZenTest
|
142
|
-
requirement: !ruby/object:Gem::Requirement
|
143
|
-
requirements:
|
144
|
-
- - "~>"
|
145
|
-
- !ruby/object:Gem::Version
|
146
|
-
version: 4.9.5
|
147
|
-
type: :development
|
148
|
-
prerelease: false
|
149
|
-
version_requirements: !ruby/object:Gem::Requirement
|
150
|
-
requirements:
|
151
|
-
- - "~>"
|
152
|
-
- !ruby/object:Gem::Version
|
153
|
-
version: 4.9.5
|
154
|
-
- !ruby/object:Gem::Dependency
|
155
|
-
name: activerecord
|
156
|
-
requirement: !ruby/object:Gem::Requirement
|
157
|
-
requirements:
|
158
|
-
- - ">="
|
159
|
-
- !ruby/object:Gem::Version
|
160
|
-
version: '3.0'
|
161
|
-
type: :development
|
162
|
-
prerelease: false
|
163
|
-
version_requirements: !ruby/object:Gem::Requirement
|
164
|
-
requirements:
|
165
|
-
- - ">="
|
166
|
-
- !ruby/object:Gem::Version
|
167
|
-
version: '3.0'
|
168
98
|
description: RSpec test doubles for ActiveModel and ActiveRecord
|
169
99
|
email: rspec@googlegroups.com
|
170
100
|
executables: []
|
@@ -177,7 +107,6 @@ files:
|
|
177
107
|
- features/mocks/mock_model.feature
|
178
108
|
- features/mocks/stub_model.feature
|
179
109
|
- features/step_definitions/additional_cli_steps.rb
|
180
|
-
- features/step_definitions/model_steps.rb
|
181
110
|
- features/support/env.rb
|
182
111
|
- features/support/rubinius.rb
|
183
112
|
- lib/rspec-activemodel-mocks.rb
|
@@ -195,8 +124,13 @@ files:
|
|
195
124
|
homepage: https://github.com/rspec/rspec-activemodel-mocks
|
196
125
|
licenses:
|
197
126
|
- MIT
|
198
|
-
metadata:
|
199
|
-
|
127
|
+
metadata:
|
128
|
+
bug_tracker_uri: https://github.com/rspec/rspec-activemodel-mocks/issues
|
129
|
+
documentation_uri: https://rspec.info/documentation/
|
130
|
+
mailing_list_uri: https://groups.google.com/forum/#!forum/rspec
|
131
|
+
source_code_uri: https://github.com/rspec/rspec-activemodel-mocks
|
132
|
+
rubygems_mfa_required: 'true'
|
133
|
+
post_install_message:
|
200
134
|
rdoc_options:
|
201
135
|
- "--charset=UTF-8"
|
202
136
|
require_paths:
|
@@ -212,16 +146,14 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
212
146
|
- !ruby/object:Gem::Version
|
213
147
|
version: '0'
|
214
148
|
requirements: []
|
215
|
-
|
216
|
-
|
217
|
-
signing_key:
|
149
|
+
rubygems_version: 3.4.10
|
150
|
+
signing_key:
|
218
151
|
specification_version: 4
|
219
|
-
summary: rspec-activemodel-mocks-1.0
|
152
|
+
summary: rspec-activemodel-mocks-1.2.0
|
220
153
|
test_files:
|
221
154
|
- features/mocks/mock_model.feature
|
222
155
|
- features/mocks/stub_model.feature
|
223
156
|
- features/step_definitions/additional_cli_steps.rb
|
224
|
-
- features/step_definitions/model_steps.rb
|
225
157
|
- features/support/env.rb
|
226
158
|
- features/support/rubinius.rb
|
227
159
|
- spec/rspec/active_model/mocks/mock_model_spec.rb
|
@@ -232,4 +164,3 @@ test_files:
|
|
232
164
|
- spec/support/matchers.rb
|
233
165
|
- spec/support/minitest_support.rb
|
234
166
|
- spec/support/null_object.rb
|
235
|
-
has_rdoc:
|
metadata.gz.sig
CHANGED
Binary file
|