it "should login with a valid openid credential" do my_openid = "http://identityprovider/username" # mock Openid model oid = mock_model(Openid) user = mock_model(User) oid.should_receive(:user).and_return(user) Openid.should_receive(:find_by_openid).with(my_openid).and_return(oid) # mock OpenID::Response oid_response = mock("OpenID::Response") oid_response.should_receive(:status).and_return(OpenID::Consumer::SUCCESS) oid_response.should_receive(:identity_url).and_return(my_openid) # mock OpenID::Consumer consumer = mock("OpenID::Consumer") consumer.should_receive(:complete).and_return(oid_response) # mock the lib/OpenidUtility controller.should_receive(:consumer).and_return(consumer) controller.should_receive(:current_user=) get 'complete' response.should redirect_to("http://test.host/items") end ## controller def complete return_to = url_for(:action => 'complete', :only_path => false) parameters = params.reject{|k,v|request.path_parameters[k]} oidresp = consumer.complete(parameters, return_to) jump = {:action => :login} case oidresp.status when OpenID::Consumer::FAILURE if oidresp.identity_url flash[:error] = "Verification of #{oidresp.identity_url} failed: #{oidresp.message}" else flash[:error] = "Verification failed: #{oidresp.message}" end when OpenID::Consumer::SUCCESS identity_url = oidresp.identity_url flash[:alert] = "Verification of #{identity_url} succeeded." openid = Openid.find_by_openid(identity_url) if openid flash[:alert] += " existing user" current_user = openid.user else flash[:alert] += " new user" current_user = User.create end jump = {:controller => :items} when OpenID::Consumer::SETUP_NEEDED flash[:alert] = "Immediate request failed - Setup Needed" when OpenID::Consumer::CANCEL flash[:alert] = "OpenID transaction cancelled." end redirect_to jump end end ## error 1) Spec::Mocks::MockExpectationError in 'WelcomeController should login with a valid openid credential' Mock 'WelcomeController' expected :current_user= with (#) once, but received it 0 times /home/donp/src/ruby/rails/catmystuff/vendor/plugins/rspec_on_rails/lib/spec/rails/example/behaviour/controller_example_group.rb:211:in `should_receive'