@@ -213,12 +213,41 @@ def alternative(color)
213213 it "should have no winner initially" do
214214 expect ( experiment . winner ) . to be_nil
215215 end
216+ end
216217
218+ describe 'winner=' do
217219 it "should allow you to specify a winner" do
218220 experiment . save
219221 experiment . winner = 'red'
220222 expect ( experiment . winner . name ) . to eq ( 'red' )
221223 end
224+
225+ context 'when has_winner state is memoized' do
226+ before { expect ( experiment ) . to_not have_winner }
227+
228+ it 'should keep has_winner state consistent' do
229+ experiment . winner = 'red'
230+ expect ( experiment ) . to have_winner
231+ end
232+ end
233+ end
234+
235+ describe 'reset_winner' do
236+ before { experiment . winner = 'green' }
237+
238+ it 'should reset the winner' do
239+ experiment . reset_winner
240+ expect ( experiment . winner ) . to be_nil
241+ end
242+
243+ context 'when has_winner state is memoized' do
244+ before { expect ( experiment ) . to have_winner }
245+
246+ it 'should keep has_winner state consistent' do
247+ experiment . reset_winner
248+ expect ( experiment ) . to_not have_winner
249+ end
250+ end
222251 end
223252
224253 describe 'has_winner?' do
@@ -235,6 +264,12 @@ def alternative(color)
235264 expect ( experiment ) . to_not have_winner
236265 end
237266 end
267+
268+ it 'memoizes has_winner state' do
269+ expect ( experiment ) . to receive ( :winner ) . once
270+ expect ( experiment ) . to_not have_winner
271+ expect ( experiment ) . to_not have_winner
272+ end
238273 end
239274
240275 describe 'reset' do
0 commit comments