|
|
|
|
|
require File.dirname(__FILE__) + '/../spec_helper'
|
|
|
|
|
|
describe UsersController, "when a new user registers" do
|
|
|
|
|
|
before(:each) do
|
|
|
# create john
|
|
|
|
|
|
@john_info = {:login => 'john',
|
|
|
:full_name => 'John John',
|
|
|
:email => 'john@space.com'}
|
|
|
@john = User.new(@john_info)
|
|
|
|
|
|
@john_activation_key = "123456"
|
|
|
|
|
|
@john.should_receive(:activation_key).
|
|
|
any_number_of_times.
|
|
|
and_return(@john_activation_key)
|
|
|
|
|
|
get :new
|
|
|
response.should render_template('users/new')
|
|
|
end
|
|
|
|
|
|
it "should show the new form again when user information is invalid" do
|
|
|
User.should_receive(:new).with(any_args()).and_return(@john)
|
|
|
@john.should_receive(:activated=).with(false)
|
|
|
@john.should_receive(:valid?).and_return(false)
|
|
|
@john.should_not_receive(:save)
|
|
|
|
|
|
post :register, :login => @john_info[:login],
|
|
|
:full_name => @john_info[:full_name],
|
|
|
:email => @john_info[:email]
|
|
|
|
|
|
response.should render_template('users/new')
|
|
|
end
|
|
|
|
|
|
it "should create unactivated user and send e-mail with activation key" do
|
|
|
User.should_receive(:new).with(any_args()).and_return(@john)
|
|
|
@john.should_receive(:activated=).with(false)
|
|
|
@john.should_receive(:valid?).and_return(true)
|
|
|
@john.should_receive(:save).and_return(true)
|
|
|
|
|
|
smtp_mock = mock("smtp")
|
|
|
smtp_mock.should_receive(:send_message) do |msg,fr,to|
|
|
|
to.should == [@john_info[:email]]
|
|
|
msg.index(@john_activation_key).should_not be_nil
|
|
|
end
|
|
|
|
|
|
Net::SMTP.should_receive(:start).
|
|
|
with(any_args()).
|
|
|
and_yield(smtp_mock)
|
|
|
|
|
|
post :register, :login => @john_info[:login],
|
|
|
:full_name => @john_info[:full_name],
|
|
|
:email => @john_info[:email]
|
|
|
|
|
|
response.should render_template('users/new_splash')
|
|
|
end
|
|
|
|
|
|
it "should create unactivated user and return error page when e-mail sending error" do
|
|
|
User.should_receive(:new).with(any_args()).and_return(@john)
|
|
|
@john.should_receive(:activated=).with(false)
|
|
|
@john.should_receive(:valid?).and_return(true)
|
|
|
@john.should_receive(:save).and_return(true)
|
|
|
|
|
|
smtp_mock = mock("smtp")
|
|
|
smtp_mock.should_receive(:send_message).
|
|
|
and_throw(:error)
|
|
|
|
|
|
Net::SMTP.should_receive(:start).
|
|
|
with(any_args()).
|
|
|
and_yield(smtp_mock)
|
|
|
|
|
|
post :register, :login => @john_info[:login],
|
|
|
:full_name => @john_info[:full_name],
|
|
|
:email => @john_info[:email]
|
|
|
|
|
|
response.should render_template('users/email_error')
|
|
|
end
|
|
|
|
|
|
it "should activate user with valid activation key" do
|
|
|
login = @john_info[:login]
|
|
|
User.should_receive(:find_by_login).
|
|
|
with(login).
|
|
|
and_return(@john)
|
|
|
@john.should_receive(:valid?).and_return(true)
|
|
|
@john.should_receive(:activated=).with(true)
|
|
|
@john.should_receive(:save).and_return(true)
|
|
|
|
|
|
get :confirm, :login => login, :activation => @john_activation_key
|
|
|
|
|
|
response.should render_template('users/confirm')
|
|
|
end
|
|
|
|
|
|
end
|
|
|
|