summaryrefslogtreecommitdiff
path: root/lib/generators/nifty/authentication/templates/tests
diff options
context:
space:
mode:
Diffstat (limited to 'lib/generators/nifty/authentication/templates/tests')
-rw-r--r--lib/generators/nifty/authentication/templates/tests/rspec/sessions_controller.rb39
-rw-r--r--lib/generators/nifty/authentication/templates/tests/rspec/user.rb83
-rw-r--r--lib/generators/nifty/authentication/templates/tests/rspec/users_controller.rb56
-rw-r--r--lib/generators/nifty/authentication/templates/tests/shoulda/sessions_controller.rb40
-rw-r--r--lib/generators/nifty/authentication/templates/tests/shoulda/user.rb85
-rw-r--r--lib/generators/nifty/authentication/templates/tests/shoulda/users_controller.rb61
-rw-r--r--lib/generators/nifty/authentication/templates/tests/testunit/sessions_controller.rb36
-rw-r--r--lib/generators/nifty/authentication/templates/tests/testunit/user.rb88
-rw-r--r--lib/generators/nifty/authentication/templates/tests/testunit/users_controller.rb53
9 files changed, 541 insertions, 0 deletions
diff --git a/lib/generators/nifty/authentication/templates/tests/rspec/sessions_controller.rb b/lib/generators/nifty/authentication/templates/tests/rspec/sessions_controller.rb
new file mode 100644
index 0000000..e0953cc
--- /dev/null
+++ b/lib/generators/nifty/authentication/templates/tests/rspec/sessions_controller.rb
@@ -0,0 +1,39 @@
+require File.dirname(__FILE__) + '/../spec_helper'
+
+describe <%= session_plural_class_name %>Controller do
+ fixtures :all
+ render_views
+
+ it "new action should render new template" do
+ get :new
+ response.should render_template(:new)
+ end
+
+<%- if options[:authlogic] -%>
+ it "create action should render new template when authentication is invalid" do
+ post :create, :<%= session_singular_name %> => { :username => "foo", :password => "badpassword" }
+ response.should render_template(:new)
+ <%= session_class_name %>.find.should be_nil
+ end
+
+ it "create action should redirect when authentication is valid" do
+ post :create, :<%= session_singular_name %> => { :username => "foo", :password => "secret" }
+ response.should redirect_to(root_url)
+ <%= session_class_name %>.find.<%= user_singular_name %>.should == <%= user_plural_name %>(:foo)
+ end
+<%- else -%>
+ it "create action should render new template when authentication is invalid" do
+ <%= user_class_name %>.stubs(:authenticate).returns(nil)
+ post :create
+ response.should render_template(:new)
+ session['<%= user_singular_name %>_id'].should be_nil
+ end
+
+ it "create action should redirect when authentication is valid" do
+ <%= user_class_name %>.stubs(:authenticate).returns(<%= user_class_name %>.first)
+ post :create
+ response.should redirect_to(root_url)
+ session['<%= user_singular_name %>_id'].should == <%= user_class_name %>.first.id
+ end
+<%- end -%>
+end
diff --git a/lib/generators/nifty/authentication/templates/tests/rspec/user.rb b/lib/generators/nifty/authentication/templates/tests/rspec/user.rb
new file mode 100644
index 0000000..a3f7e92
--- /dev/null
+++ b/lib/generators/nifty/authentication/templates/tests/rspec/user.rb
@@ -0,0 +1,83 @@
+require File.dirname(__FILE__) + '/../spec_helper'
+
+describe <%= user_class_name %> do
+<%- unless options[:authlogic] -%>
+ def new_<%= user_singular_name %>(attributes = {})
+ attributes[:username] ||= 'foo'
+ attributes[:email] ||= 'foo@example.com'
+ attributes[:password] ||= 'abc123'
+ attributes[:password_confirmation] ||= attributes[:password]
+ <%= user_class_name %>.new(attributes)
+ end
+
+ before(:each) do
+ <%= user_class_name %>.delete_all
+ end
+
+ it "should be valid" do
+ new_<%= user_singular_name %>.should be_valid
+ end
+
+ it "should require username" do
+ new_<%= user_singular_name %>(:username => '').should have(1).error_on(:username)
+ end
+
+ it "should require password" do
+ new_<%= user_singular_name %>(:password => '').should have(1).error_on(:password)
+ end
+
+ it "should require well formed email" do
+ new_<%= user_singular_name %>(:email => 'foo@bar@example.com').should have(1).error_on(:email)
+ end
+
+ it "should validate uniqueness of email" do
+ new_<%= user_singular_name %>(:email => 'bar@example.com').save!
+ new_<%= user_singular_name %>(:email => 'bar@example.com').should have(1).error_on(:email)
+ end
+
+ it "should validate uniqueness of username" do
+ new_<%= user_singular_name %>(:username => 'uniquename').save!
+ new_<%= user_singular_name %>(:username => 'uniquename').should have(1).error_on(:username)
+ end
+
+ it "should not allow odd characters in username" do
+ new_<%= user_singular_name %>(:username => 'odd ^&(@)').should have(1).error_on(:username)
+ end
+
+ it "should validate password is longer than 3 characters" do
+ new_<%= user_singular_name %>(:password => 'bad').should have(1).error_on(:password)
+ end
+
+ it "should require matching password confirmation" do
+ new_<%= user_singular_name %>(:password_confirmation => 'nonmatching').should have(1).error_on(:password)
+ end
+
+ it "should generate password hash and salt on create" do
+ <%= user_singular_name %> = new_<%= user_singular_name %>
+ <%= user_singular_name %>.save!
+ <%= user_singular_name %>.password_hash.should_not be_nil
+ <%= user_singular_name %>.password_salt.should_not be_nil
+ end
+
+ it "should authenticate by username" do
+ <%= user_singular_name %> = new_<%= user_singular_name %>(:username => 'foobar', :password => 'secret')
+ <%= user_singular_name %>.save!
+ <%= user_class_name %>.authenticate('foobar', 'secret').should == <%= user_singular_name %>
+ end
+
+ it "should authenticate by email" do
+ <%= user_singular_name %> = new_<%= user_singular_name %>(:email => 'foo@bar.com', :password => 'secret')
+ <%= user_singular_name %>.save!
+ <%= user_class_name %>.authenticate('foo@bar.com', 'secret').should == <%= user_singular_name %>
+ end
+
+ it "should not authenticate bad username" do
+ <%= user_class_name %>.authenticate('nonexisting', 'secret').should be_nil
+ end
+
+ it "should not authenticate bad password" do
+ new_<%= user_singular_name %>(:username => 'foobar', :password => 'secret').save!
+ <%= user_class_name %>.authenticate('foobar', 'badpassword').should be_nil
+ end
+<%- end -%>
+end
diff --git a/lib/generators/nifty/authentication/templates/tests/rspec/users_controller.rb b/lib/generators/nifty/authentication/templates/tests/rspec/users_controller.rb
new file mode 100644
index 0000000..60bcff9
--- /dev/null
+++ b/lib/generators/nifty/authentication/templates/tests/rspec/users_controller.rb
@@ -0,0 +1,56 @@
+require File.dirname(__FILE__) + '/../spec_helper'
+
+describe <%= user_plural_class_name %>Controller do
+ fixtures :all
+ render_views
+
+ it "new action should render new template" do
+ get :new
+ response.should render_template(:new)
+ end
+
+ it "create action should render new template when model is invalid" do
+ <%= user_class_name %>.any_instance.stubs(:valid?).returns(false)
+ post :create
+ response.should render_template(:new)
+ end
+
+ it "create action should redirect when model is valid" do
+ <%= user_class_name %>.any_instance.stubs(:valid?).returns(true)
+ post :create
+ response.should redirect_to(root_url)
+ <%- unless options[:authlogic] -%>
+ session['<%= user_singular_name %>_id'].should == assigns['<%= user_singular_name %>'].id
+ <%- end -%>
+ end
+
+ it "edit action should redirect when not logged in" do
+ get :edit, :id => "ignored"
+ response.should redirect_to(login_url)
+ end
+
+ it "edit action should render edit template" do
+ @controller.stubs(:current_<%= user_singular_name %>).returns(<%= user_class_name %>.first)
+ get :edit, :id => "ignored"
+ response.should render_template(:edit)
+ end
+
+ it "update action should redirect when not logged in" do
+ put :update, :id => "ignored"
+ response.should redirect_to(login_url)
+ end
+
+ it "update action should render edit template when <%= user_singular_name %> is invalid" do
+ @controller.stubs(:current_<%= user_singular_name %>).returns(<%= user_class_name %>.first)
+ <%= user_class_name %>.any_instance.stubs(:valid?).returns(false)
+ put :update, :id => "ignored"
+ response.should render_template(:edit)
+ end
+
+ it "update action should redirect when <%= user_singular_name %> is valid" do
+ @controller.stubs(:current_<%= user_singular_name %>).returns(<%= user_class_name %>.first)
+ <%= user_class_name %>.any_instance.stubs(:valid?).returns(true)
+ put :update, :id => "ignored"
+ response.should redirect_to(root_url)
+ end
+end
diff --git a/lib/generators/nifty/authentication/templates/tests/shoulda/sessions_controller.rb b/lib/generators/nifty/authentication/templates/tests/shoulda/sessions_controller.rb
new file mode 100644
index 0000000..e2f9005
--- /dev/null
+++ b/lib/generators/nifty/authentication/templates/tests/shoulda/sessions_controller.rb
@@ -0,0 +1,40 @@
+require 'test_helper'
+
+class <%= session_plural_class_name %>ControllerTest < ActionController::TestCase
+ context "new action" do
+ should "render new template" do
+ get :new
+ assert_template 'new'
+ end
+ end
+
+ context "create action" do
+ <%- if options[:authlogic] -%>
+ should "render new template when authentication is invalid" do
+ post :create, :<%= session_singular_name %> => { :username => "foo", :password => "badpassword" }
+ assert_template 'new'
+ assert_nil <%= session_class_name %>.find
+ end
+
+ should "redirect when authentication is valid" do
+ post :create, :<%= session_singular_name %> => { :username => "foo", :password => "secret" }
+ assert_redirected_to root_url
+ assert_equal <%= user_plural_name %>(:foo), <%= session_class_name %>.find.<%= user_singular_name %>
+ end
+ <%- else -%>
+ should "render new template when authentication is invalid" do
+ <%= user_class_name %>.stubs(:authenticate).returns(nil)
+ post :create
+ assert_template 'new'
+ assert_nil session['<%= user_singular_name %>_id']
+ end
+
+ should "redirect when authentication is valid" do
+ <%= user_class_name %>.stubs(:authenticate).returns(<%= user_class_name %>.first)
+ post :create
+ assert_redirected_to root_url
+ assert_equal <%= user_class_name %>.first.id, session['<%= user_singular_name %>_id']
+ end
+ <%- end -%>
+ end
+end
diff --git a/lib/generators/nifty/authentication/templates/tests/shoulda/user.rb b/lib/generators/nifty/authentication/templates/tests/shoulda/user.rb
new file mode 100644
index 0000000..beb8bf4
--- /dev/null
+++ b/lib/generators/nifty/authentication/templates/tests/shoulda/user.rb
@@ -0,0 +1,85 @@
+require 'test_helper'
+
+class <%= user_class_name %>Test < ActiveSupport::TestCase
+<%- unless options[:authlogic] -%>
+ def new_<%= user_singular_name %>(attributes = {})
+ attributes[:username] ||= 'foo'
+ attributes[:email] ||= 'foo@example.com'
+ attributes[:password] ||= 'abc123'
+ attributes[:password_confirmation] ||= attributes[:password]
+ <%= user_singular_name %> = <%= user_class_name %>.new(attributes)
+ <%= user_singular_name %>.valid? # run validations
+ <%= user_singular_name %>
+ end
+
+ def setup
+ <%= user_class_name %>.delete_all
+ end
+
+ should "be valid" do
+ assert new_<%= user_singular_name %>.valid?
+ end
+
+ should "require username" do
+ assert_equal ["can't be blank"], new_<%= user_singular_name %>(:username => '').errors[:username]
+ end
+
+ should "require password" do
+ assert_equal ["can't be blank"], new_<%= user_singular_name %>(:password => '').errors[:password]
+ end
+
+ should "require well formed email" do
+ assert_equal ["is invalid"], new_<%= user_singular_name %>(:email => 'foo@bar@example.com').errors[:email]
+ end
+
+ should "validate uniqueness of email" do
+ new_<%= user_singular_name %>(:email => 'bar@example.com').save!
+ assert_equal ["has already been taken"], new_<%= user_singular_name %>(:email => 'bar@example.com').errors[:email]
+ end
+
+ should "validate uniqueness of username" do
+ new_<%= user_singular_name %>(:username => 'uniquename').save!
+ assert_equal ["has already been taken"], new_<%= user_singular_name %>(:username => 'uniquename').errors[:username]
+ end
+
+ should "not allow odd characters in username" do
+ assert_equal ["should only contain letters, numbers, or .-_@"], new_<%= user_singular_name %>(:username => 'odd ^&(@)').errors[:username]
+ end
+
+ should "validate password is longer than 3 characters" do
+ assert_equal ["is too short (minimum is 4 characters)"], new_<%= user_singular_name %>(:password => 'bad').errors[:password]
+ end
+
+ should "require matching password confirmation" do
+ assert_equal ["doesn't match confirmation"], new_<%= user_singular_name %>(:password_confirmation => 'nonmatching').errors[:password]
+ end
+
+ should "generate password hash and salt on create" do
+ <%= user_singular_name %> = new_<%= user_singular_name %>
+ <%= user_singular_name %>.save!
+ assert <%= user_singular_name %>.password_hash
+ assert <%= user_singular_name %>.password_salt
+ end
+
+ should "authenticate by username" do
+ <%= user_singular_name %> = new_<%= user_singular_name %>(:username => 'foobar', :password => 'secret')
+ <%= user_singular_name %>.save!
+ assert_equal <%= user_singular_name %>, <%= user_class_name %>.authenticate('foobar', 'secret')
+ end
+
+ should "authenticate by email" do
+ <%= user_singular_name %> = new_<%= user_singular_name %>(:email => 'foo@bar.com', :password => 'secret')
+ <%= user_singular_name %>.save!
+ assert_equal <%= user_singular_name %>, <%= user_class_name %>.authenticate('foo@bar.com', 'secret')
+ end
+
+ should "not authenticate bad username" do
+ assert_nil <%= user_class_name %>.authenticate('nonexisting', 'secret')
+ end
+
+ should "not authenticate bad password" do
+ new_<%= user_singular_name %>(:username => 'foobar', :password => 'secret').save!
+ assert_nil <%= user_class_name %>.authenticate('foobar', 'badpassword')
+ end
+<%- end -%>
+end
diff --git a/lib/generators/nifty/authentication/templates/tests/shoulda/users_controller.rb b/lib/generators/nifty/authentication/templates/tests/shoulda/users_controller.rb
new file mode 100644
index 0000000..1728329
--- /dev/null
+++ b/lib/generators/nifty/authentication/templates/tests/shoulda/users_controller.rb
@@ -0,0 +1,61 @@
+require 'test_helper'
+
+class <%= user_plural_class_name %>ControllerTest < ActionController::TestCase
+ context "new action" do
+ should "render new template" do
+ get :new
+ assert_template 'new'
+ end
+ end
+
+ context "create action" do
+ should "render new template when <%= user_singular_name %> is invalid" do
+ <%= user_class_name %>.any_instance.stubs(:valid?).returns(false)
+ post :create
+ assert_template 'new'
+ end
+
+ should "redirect when <%= user_singular_name %> is valid" do
+ <%= user_class_name %>.any_instance.stubs(:valid?).returns(true)
+ post :create
+ assert_redirected_to root_url
+ <%- unless options[:authlogic] -%>
+ assert_equal assigns['<%= user_singular_name %>'].id, session['<%= user_singular_name %>_id']
+ <%- end -%>
+ end
+ end
+
+ context "edit action" do
+ should "redirect when not logged in" do
+ get :edit, :id => "ignored"
+ assert_redirected_to login_url
+ end
+
+ should "render edit template" do
+ @controller.stubs(:current_<%= user_singular_name %>).returns(<%= user_class_name %>.first)
+ get :edit, :id => "ignored"
+ assert_template 'edit'
+ end
+ end
+
+ context "update action" do
+ should "redirect when not logged in" do
+ put :update, :id => "ignored"
+ assert_redirected_to login_url
+ end
+
+ should "render edit template when <%= user_singular_name %> is invalid" do
+ @controller.stubs(:current_<%= user_singular_name %>).returns(<%= user_class_name %>.first)
+ <%= user_class_name %>.any_instance.stubs(:valid?).returns(false)
+ put :update, :id => "ignored"
+ assert_template 'edit'
+ end
+
+ should "redirect when <%= user_singular_name %> is valid" do
+ @controller.stubs(:current_<%= user_singular_name %>).returns(<%= user_class_name %>.first)
+ <%= user_class_name %>.any_instance.stubs(:valid?).returns(true)
+ put :update, :id => "ignored"
+ assert_redirected_to root_url
+ end
+ end
+end
diff --git a/lib/generators/nifty/authentication/templates/tests/testunit/sessions_controller.rb b/lib/generators/nifty/authentication/templates/tests/testunit/sessions_controller.rb
new file mode 100644
index 0000000..fe2a65b
--- /dev/null
+++ b/lib/generators/nifty/authentication/templates/tests/testunit/sessions_controller.rb
@@ -0,0 +1,36 @@
+require 'test_helper'
+
+class <%= session_plural_class_name %>ControllerTest < ActionController::TestCase
+ def test_new
+ get :new
+ assert_template 'new'
+ end
+
+<%- if options[:authlogic] -%>
+ def test_create_invalid
+ post :create, :<%= session_singular_name %> => { :username => "foo", :password => "badpassword" }
+ assert_template 'new'
+ assert_nil <%= session_class_name %>.find
+ end
+
+ def test_create_valid
+ post :create, :<%= session_singular_name %> => { :username => "foo", :password => "secret" }
+ assert_redirected_to root_url
+ assert_equal <%= user_plural_name %>(:foo), <%= session_class_name %>.find.<%= user_singular_name %>
+ end
+<%- else -%>
+ def test_create_invalid
+ <%= user_class_name %>.stubs(:authenticate).returns(nil)
+ post :create
+ assert_template 'new'
+ assert_nil session['<%= user_singular_name %>_id']
+ end
+
+ def test_create_valid
+ <%= user_class_name %>.stubs(:authenticate).returns(<%= user_class_name %>.first)
+ post :create
+ assert_redirected_to root_url
+ assert_equal <%= user_class_name %>.first.id, session['<%= user_singular_name %>_id']
+ end
+<%- end -%>
+end
diff --git a/lib/generators/nifty/authentication/templates/tests/testunit/user.rb b/lib/generators/nifty/authentication/templates/tests/testunit/user.rb
new file mode 100644
index 0000000..c036cf1
--- /dev/null
+++ b/lib/generators/nifty/authentication/templates/tests/testunit/user.rb
@@ -0,0 +1,88 @@
+require 'test_helper'
+
+class <%= user_class_name %>Test < ActiveSupport::TestCase
+<%- unless options[:authlogic] -%>
+ def new_<%= user_singular_name %>(attributes = {})
+ attributes[:username] ||= 'foo'
+ attributes[:email] ||= 'foo@example.com'
+ attributes[:password] ||= 'abc123'
+ attributes[:password_confirmation] ||= attributes[:password]
+ <%= user_singular_name %> = <%= user_class_name %>.new(attributes)
+ <%= user_singular_name %>.valid? # run validations
+ <%= user_singular_name %>
+ end
+
+ def setup
+ <%= user_class_name %>.delete_all
+ end
+
+ def test_valid
+ assert new_<%= user_singular_name %>.valid?
+ end
+
+ def test_require_username
+ assert_equal ["can't be blank"], new_<%= user_singular_name %>(:username => '').errors[:username]
+ end
+
+ def test_require_password
+ assert_equal ["can't be blank"], new_<%= user_singular_name %>(:password => '').errors[:password]
+ end
+
+ def test_require_well_formed_email
+ assert_equal ["is invalid"], new_<%= user_singular_name %>(:email => 'foo@bar@example.com').errors[:email]
+ end
+
+ def test_validate_uniqueness_of_email
+ new_<%= user_singular_name %>(:email => 'bar@example.com').save!
+ assert_equal ["has already been taken"], new_<%= user_singular_name %>(:email => 'bar@example.com').errors[:email]
+ end
+
+ def test_validate_uniqueness_of_username
+ new_<%= user_singular_name %>(:username => 'uniquename').save!
+ assert_equal ["has already been taken"], new_<%= user_singular_name %>(:username => 'uniquename').errors[:username]
+ end
+
+ def test_validate_odd_characters_in_username
+ assert_equal ["should only contain letters, numbers, or .-_@"], new_<%= user_singular_name %>(:username => 'odd ^&(@)').errors[:username]
+ end
+
+ def test_validate_password_length
+ assert_equal ["is too short (minimum is 4 characters)"], new_<%= user_singular_name %>(:password => 'bad').errors[:password]
+ end
+
+ def test_require_matching_password_confirmation
+ assert_equal ["doesn't match confirmation"], new_<%= user_singular_name %>(:password_confirmation => 'nonmatching').errors[:password]
+ end
+
+ def test_generate_password_hash_and_salt_on_create
+ <%= user_singular_name %> = new_<%= user_singular_name %>
+ <%= user_singular_name %>.save!
+ assert <%= user_singular_name %>.password_hash
+ assert <%= user_singular_name %>.password_salt
+ end
+
+ def test_authenticate_by_username
+ <%= user_class_name %>.delete_all
+ <%= user_singular_name %> = new_<%= user_singular_name %>(:username => 'foobar', :password => 'secret')
+ <%= user_singular_name %>.save!
+ assert_equal <%= user_singular_name %>, <%= user_class_name %>.authenticate('foobar', 'secret')
+ end
+
+ def test_authenticate_by_email
+ <%= user_class_name %>.delete_all
+ <%= user_singular_name %> = new_<%= user_singular_name %>(:email => 'foo@bar.com', :password => 'secret')
+ <%= user_singular_name %>.save!
+ assert_equal <%= user_singular_name %>, <%= user_class_name %>.authenticate('foo@bar.com', 'secret')
+ end
+
+ def test_authenticate_bad_username
+ assert_nil <%= user_class_name %>.authenticate('nonexisting', 'secret')
+ end
+
+ def test_authenticate_bad_password
+ <%= user_class_name %>.delete_all
+ new_<%= user_singular_name %>(:username => 'foobar', :password => 'secret').save!
+ assert_nil <%= user_class_name %>.authenticate('foobar', 'badpassword')
+ end
+<%- end -%>
+end
diff --git a/lib/generators/nifty/authentication/templates/tests/testunit/users_controller.rb b/lib/generators/nifty/authentication/templates/tests/testunit/users_controller.rb
new file mode 100644
index 0000000..ef8a3f7
--- /dev/null
+++ b/lib/generators/nifty/authentication/templates/tests/testunit/users_controller.rb
@@ -0,0 +1,53 @@
+require 'test_helper'
+
+class <%= user_plural_class_name %>ControllerTest < ActionController::TestCase
+ def test_new
+ get :new
+ assert_template 'new'
+ end
+
+ def test_create_invalid
+ <%= user_class_name %>.any_instance.stubs(:valid?).returns(false)
+ post :create
+ assert_template 'new'
+ end
+
+ def test_create_valid
+ <%= user_class_name %>.any_instance.stubs(:valid?).returns(true)
+ post :create
+ assert_redirected_to root_url
+ <%- unless options[:authlogic] -%>
+ assert_equal assigns['<%= user_singular_name %>'].id, session['<%= user_singular_name %>_id']
+ <%- end -%>
+ end
+
+ def test_edit_without_user
+ get :edit, :id => "ignored"
+ assert_redirected_to login_url
+ end
+
+ def test_edit
+ @controller.stubs(:current_<%= user_singular_name %>).returns(<%= user_class_name %>.first)
+ get :edit, :id => "ignored"
+ assert_template 'edit'
+ end
+
+ def test_update_without_user
+ put :update, :id => "ignored"
+ assert_redirected_to login_url
+ end
+
+ def test_update_invalid
+ @controller.stubs(:current_<%= user_singular_name %>).returns(<%= user_class_name %>.first)
+ <%= user_class_name %>.any_instance.stubs(:valid?).returns(false)
+ put :update, :id => "ignored"
+ assert_template 'edit'
+ end
+
+ def test_update_valid
+ @controller.stubs(:current_<%= user_singular_name %>).returns(<%= user_class_name %>.first)
+ <%= user_class_name %>.any_instance.stubs(:valid?).returns(true)
+ put :update, :id => "ignored"
+ assert_redirected_to root_url
+ end
+end