require 'spec_helper'

describe UsersController do

  describe "POST create" do
    let(:user) { mock_model(User).as_null_object }

    before do
      User.stub(:new).and_return(user)
    end

    context "when user saved" do
      let(:provider) { 'foo' }
      let(:uid) { '123' }
      let(:avatar_url) { 'url' }

      before do
        session[:new_user] = {
          :provider   => provider,
          :uid        => uid,
          :avatar_url => avatar_url
        }

        user.stub!(:save => true)
      end

      it "assigns provider and uid" do
        user.should_receive(:provider=).with(provider).and_return(true)
        user.should_receive(:uid=).with(uid).and_return(true)
        user.should_receive(:avatar_url=).with(avatar_url).and_return(true)

        post :create
      end

      it "sets current_user" do
        post :create
        @controller.current_user.should_not be_nil
      end

      it "clears user session data" do
        post :create

        session[:new_user].should be_nil
      end

      it "redirects back" do
        post :create
        should redirect_to(root_url)
      end

    end

    context "when not valid data" do
      before do
        user.stub!(:save => false)
      end

      it "renders user/new" do
        post :create
        should render_template('users/new')
      end
    end
  end
end

require 'spec_helper'

describe UsersController do

  describe "#create" do
    let(:user) { mock_model(User).as_null_object }

    before do
      User.stub(:new).and_return(user)
    end

    context "when user saved" do
      let(:provider) { 'foo' }
      let(:uid) { '123' }
      let(:avatar_url) { 'url' }

      before do
        session[:new_user] = {
          :provider   => provider,
          :uid        => uid,
          :avatar_url => avatar_url
        }

        user.stub!(:save => true)
      end

      it "assigns provider and uid" do
        user.should_receive(:provider=).with(provider).and_return(true)
        user.should_receive(:uid=).with(uid).and_return(true)
        user.should_receive(:avatar_url=).with(avatar_url).and_return(true)

        post :create
      end

      it "sets current_user" do
        post :create
        @controller.current_user.should_not be_nil
      end

      it "clears user session data" do
        post :create

        session[:new_user].should be_nil
      end

      it "redirects back" do
        post :create
        should redirect_to(root_url)
      end

    end

    context "when not valid data" do
      before do
        user.stub!(:save => false)
      end

      it "renders user/new" do
        post :create
        should render_template('users/new')
      end
    end
  end
end

Use "method" naming for describe blocks in controller specs
Use "method" naming for describe blocks in controller specs
