diff --git a/app/controllers/invitations_controller.rb b/app/controllers/invitations_controller.rb index 1cde4353f..869b9a018 100644 --- a/app/controllers/invitations_controller.rb +++ b/app/controllers/invitations_controller.rb @@ -41,9 +41,8 @@ class InvitationsController < Devise::InvitationsController def update begin user = User.find_by_invitation_token(params[:user][:invitation_token]) - user.accept_invitation!(params[:user]) user.seed_aspects - user.save + user.accept_invitation!(params[:user]) rescue MongoMapper::DocumentNotValid => e user = nil flash[:error] = e.message diff --git a/app/models/user.rb b/app/models/user.rb index 048638695..2f1771509 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -350,7 +350,8 @@ class User self.person.save! self.save! invitations_to_me.each{|invitation| invitation.to_request!} - + + self.reload # Because to_request adds a request and saves elsewhere self end end diff --git a/spec/controllers/invitations_controller_spec.rb b/spec/controllers/invitations_controller_spec.rb index bc1977e2c..4cd6e14a5 100644 --- a/spec/controllers/invitations_controller_spec.rb +++ b/spec/controllers/invitations_controller_spec.rb @@ -11,18 +11,22 @@ describe InvitationsController do let!(:user) {make_user} let!(:aspect){user.aspects.create(:name => "WIN!!")} - + before do request.env["devise.mapping"] = Devise.mappings[:user] - user.invites = 5 - - sign_in :user, user - @invite = {:invite_messages=>"test", :aspects=> aspect.id.to_s, :email=>"abc@example.com"} - @controller.stub!(:current_user).and_return(user) - request.env["HTTP_REFERER"]= 'http://test.host/cats/foo' end + describe "#create" do + before do + user.invites = 5 + + sign_in :user, user + @invite = {:invite_messages=>"test", :aspects=> aspect.id.to_s, :email=>"abc@example.com"} + @controller.stub!(:current_user).and_return(user) + request.env["HTTP_REFERER"]= 'http://test.host/cats/foo' + end + it 'invites the requested user' do user.should_receive(:invite_user).and_return(make_user) post :create, :user => @invite @@ -72,5 +76,30 @@ describe InvitationsController do response.should redirect_to("http://test.host/cats/foo") end end + + describe "#update" do + before do + user.invites = 5 + invited_user = user.invite_user(:email => "a@a.com", :aspect_id => user.aspects.first.id) + @accept_params = {"user"=>{"password_confirmation"=>"password", "username"=>"josh", + "password"=>"password", "invitation_token" => invited_user.invitation_token}} + + end + + it 'creates user' do + put :update, @accept_params + User.find_by_username(@accept_params['user']['username']).should_not be_nil + end + + it 'seeds the aspects' do + put :update, @accept_params + User.find_by_username(@accept_params['user']['username']).aspects.count.should == 2 + end + + it 'adds a pending request' do + put :update, @accept_params + User.find_by_username(@accept_params['user']['username']).pending_requests.count.should == 1 + end + end end