I have this function in my controller: def open_id_authentication(openid_url) authenticate_with_open_id(openid_url, :required => [:nickname, :email], :optional => [:fullname]) do |result, identity_url, registration| if result.successful? @user = User.find_or_initialize_by_identity_url(identity_url) if @user.new_record? @user.login = registration[''nickname''] @user.fullname = registration[''fullname''] @user.email = registration[''email''] @user.save! @user.activate end self.current_user = @user successful_login else failed_login result.message, ''openid'' end end end I tried to make a stub but with no success, maybe because it''s a block. Any hint about that one please? Thanks in advance Pat
On 29 Apr 2008, at 17:00, Patrick Aljord wrote:> I tried to make a stub but with no success, maybe because it''s a > block. Any hint about that one please?What are you trying to stub? Are you trying to stub authenticate_with_open_id?> def open_id_authentication(openid_url) > authenticate_with_open_id(openid_url, :required => [:nickname, > :email], :optional => [:fullname]) do |result, identity_url, > registration| > if result.successful? > @user = User.find_or_initialize_by_identity_url(identity_url) > ... > end > end > endIf so, you could try controller.stub! (:authenticate_with_open_id ).and_yield(:result, :identity_url, :registration) so that the code in the block actually gets run (a normal stub, or one with and_return with simply eat the block). Obviously, make sure that it''s yielding the values you want it to. HTH Matt -- Matt Patterson | Design & Code <matt at reprocessed org> | http://www.reprocessed.org/
ok thanks, I still get a "undefined method `successful?''", successful? is a method that is used inside of the block, it''s partof the open_id_authentication plugin, any way to include the plugin in the spec so that it recognizes the method? thanks in advance Pat
If you used Matt''s code below, then successful? is most likely referring to a method after your open_id_authentication method. When you stub! that method you''re effectively telling rspec to skip over it and return what I tell you instead. You''d need to paste more of your spec and controller action that you''re stubbing for anyone to be of further help. On Apr 30, 2008, at 1:00 AM, Patrick Aljord wrote:> ok thanks, I still get a "undefined method `successful?''", successful? > is a method that is used inside of the block, it''s partof the > open_id_authentication plugin, any way to include the plugin in the > spec so that it recognizes the method? > > thanks in advance > > Pat > _______________________________________________ > rspec-users mailing list > rspec-users at rubyforge.org > http://rubyforge.org/mailman/listinfo/rspec-users
> You''d need to paste more of your spec and controller action that you''re > stubbing for anyone to be of further help. >I think I posted it on my first post, here it is: def open_id_authentication(openid_url) authenticate_with_open_id(openid_url, :required => [:nickname, :email], :optional => [:fullname]) do |result, identity_url, registration| if result.successful? @user = User.find_or_initialize_by_identity_url(identity_url) if @user.new_record? @user.login = registration[''nickname''] @user.fullname = registration[''fullname''] @user.email = registration[''email''] @user.save! @user.activate end self.current_user = @user successful_login else failed_login result.message, ''openid'' end end end My spec looks like this: it "should login with openid and redirect" do openid_url = "patcito.myopenid.com" controller.stub!(:using_open_id?).and_return(true) controller.stub!(:authenticate_with_open_id).and_yield(result,openid_url,registration={"nickname"=>"patcito","email"=>"bob at gmail.com","fullname"=>''bobby bob''}) post :create, :openid_url => openid_url session[:user_id].should_not be(nil) response.should be_redirect end I tried to do something similar to this http://pastie.textmate.org/102377 but it complains that OpenID::Consumer::SUCCESS is not recognized. I guess I''d have to include my open_id_authentication plugin lib in my spec to get it recognized no? is there another way to include a lib in my spec to make it work? thanks in advance Pat
On Wed, 2008-04-30 at 11:26 -0500, Patrick Aljord wrote:> My spec looks like this: > it "should login with openid and redirect" do > openid_url = "patcito.myopenid.com" > controller.stub!(:using_open_id?).and_return(true) > controller.stub!(:authenticate_with_open_id).and_yield(result,openid_url,registration={"nickname"=>"patcito","email"=>"bob at gmail.com","fullname"=>''bobby > bob''}) > post :create, :openid_url => openid_url > session[:user_id].should_not be(nil) > response.should be_redirect > endresult is not defined, so the successful? method isn''t known. I''d create a mock for it and stub! that method. result = mock(''openid result'') result.stub!(:successful?).and_return(true) You can then use result.should_receive(:successful?) in subsequent specs to describe what happens if the result of the call is and isn''t successful. Kind regards, Hans -------------- next part -------------- A non-text attachment was scrubbed... Name: not available Type: application/pgp-signature Size: 197 bytes Desc: This is a digitally signed message part URL: <http://rubyforge.org/pipermail/rspec-users/attachments/20080506/56c3f208/attachment.bin>