# Copyright (c) 2010-2011, Diaspora Inc. This file is # licensed under the Affero General Public License version 3 or later. See # the COPYRIGHT file. require 'spec_helper' describe RegistrationsController do include Devise::TestHelpers before do request.env["devise.mapping"] = Devise.mappings[:user] @valid_params = {:user => { :username => "jdoe", :email => "jdoe@example.com", :password => "password", :password_confirmation => "password" } } Webfinger.stub_chain(:new, :fetch).and_return(FactoryGirl.create(:person)) end describe '#check_registrations_open!' do before do AppConfig[:registrations_closed] = true end after do AppConfig[:registrations_closed] = false end it 'redirects #new to the login page' do get :new flash[:error].should == I18n.t('registrations.closed') response.should redirect_to new_user_session_path end it 'redirects #create to the login page' do post :create, @valid_params flash[:error].should == I18n.t('registrations.closed') response.should redirect_to new_user_session_path end it 'does not redirect if there is a valid invite token' do i = InvitationCode.create(:user => bob) get :new, :invite => {:token => i.token} response.should_not be_redirect end it 'does redirect if there is an invalid invite token' do get :new, :invite => {:token => 'fssdfsd'} response.should be_redirect end end describe "#create" do context "with valid parameters" do before do AppConfig[:registrations_closed] = false end before do user = FactoryGirl.build(:user) User.stub!(:build).and_return(user) end it "creates a user" do lambda { get :create, @valid_params }.should change(User, :count).by(1) end it "assigns @user" do get :create, @valid_params assigns(:user).should be_true end it "sets the flash" do get :create, @valid_params flash[:notice].should_not be_blank end it "redirects to the home path" do get :create, @valid_params response.should be_redirect response.location.should match /^#{root_url}\??$/ end it 'with an invite code from a beta users, make the user beta' do Role.add_beta(bob.person) get :create, @valid_params.merge(:invite => {:token => bob.invitation_code.token}) User.last.should be_beta end end context "with invalid parameters" do before do @invalid_params = @valid_params @invalid_params[:user][:password_confirmation] = "baddword" end it "does not create a user" do lambda { get :create, @invalid_params }.should_not change(User, :count) end it "does not create a person" do lambda { get :create, @invalid_params }.should_not change(Person, :count) end it "assigns @user" do get :create, @invalid_params assigns(:user).should_not be_nil end it "sets the flash error" do get :create, @invalid_params flash[:error].should_not be_blank end it "re-renders the form" do get :create, @invalid_params response.should render_template("registrations/new") end end end end