File tree Expand file tree Collapse file tree 3 files changed +64
-0
lines changed
lib/rspec/active_model/mocks
spec/rspec/active_model/mocks Expand file tree Collapse file tree 3 files changed +64
-0
lines changed Original file line number Diff line number Diff line change @@ -124,6 +124,11 @@ def self.primary_key; :id; end
124124 :blank? => false } . merge ( stubs )
125125
126126 double ( "#{ model_class . name } _#{ stubs [ :id ] } " , stubs ) . tap do |m |
127+ if model_class . method ( :=== ) . owner == Module && !stubs . has_key? ( :=== )
128+ allow ( model_class ) . to receive ( :=== ) . and_wrap_original do |original , other |
129+ m === other || original . call ( other )
130+ end
131+ end
127132 msingleton = class << m ; self ; end
128133 msingleton . class_eval do
129134 include ActiveModelInstanceMethods
Original file line number Diff line number Diff line change 157157 end
158158 end
159159
160+ describe "#===" do
161+ it "works with a case statement" do
162+ case mock_model ( MockableModel )
163+ when MockableModel then true
164+ else
165+ raise
166+ end
167+
168+ case :not_mockable_model
169+ when MockableModel then raise
170+ else
171+ true
172+ end
173+ end
174+
175+ it "won't break previous stubs" do
176+ allow ( MockableModel ) . to receive ( :=== ) . with ( "string" ) { true }
177+ mock_model ( MockableModel )
178+
179+ case "string"
180+ when MockableModel then true
181+ else
182+ raise
183+ end
184+ end
185+
186+ it "won't override class definitions" do
187+ another_mockable_model =
188+ Class . new ( MockableModel ) do
189+ def self . ===( other )
190+ true
191+ end
192+ end
193+
194+ mock_model ( another_mockable_model )
195+
196+ case "string"
197+ when another_mockable_model then true
198+ else
199+ raise
200+ end
201+ end
202+ end
203+
160204 describe "#kind_of?" do
161205 before ( :each ) do
162206 @model = mock_model ( SubMockableModel )
Original file line number Diff line number Diff line change @@ -161,6 +161,21 @@ def model_class
161161 end
162162 expect ( model ) . to be ( @block_arg )
163163 end
164+ end
165+
166+ describe "#===" do
167+ it "works with a case statement" do
168+ case stub_model ( MockableModel )
169+ when MockableModel then true
170+ else
171+ raise
172+ end
164173
174+ case :not_stub_model
175+ when MockableModel then raise
176+ else
177+ true
178+ end
179+ end
165180 end
166181end
You can’t perform that action at this time.
0 commit comments