thoughtbot-clearance 0.3.3 → 0.3.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/Rakefile +12 -28
- data/generators/clearance/clearance_generator.rb +4 -4
- data/lib/clearance.rb +2 -2
- data/lib/clearance/app/controllers/application_controller.rb +12 -6
- data/lib/clearance/app/controllers/passwords_controller.rb +1 -1
- data/lib/clearance/app/controllers/sessions_controller.rb +14 -13
- data/lib/clearance/app/controllers/users_controller.rb +1 -1
- data/lib/clearance/test/functional/sessions_controller_test.rb +36 -13
- data/lib/clearance/test/functional/users_controller_test.rb +9 -4
- data/lib/clearance/test/test_helper.rb +11 -7
- data/test/rails_root/config/routes.rb +5 -2
- metadata +1 -1
- data/generators/clearance/templates/app/models/user_mailer.rb +0 -7
- data/generators/clearance/templates/app/views/user_mailer/change_password.html.erb +0 -6
- data/generators/clearance/templates/app/views/user_mailer/confirmation.html.erb +0 -1
- data/generators/clearance/templates/test/unit/user_mailer_test.rb +0 -6
- data/lib/clearance/app/models/user_mailer.rb +0 -33
- data/lib/clearance/test/unit/user_mailer_test.rb +0 -63
- data/test/rails_root/app/models/user_mailer.rb +0 -7
- data/test/rails_root/app/views/user_mailer/change_password.html.erb +0 -6
- data/test/rails_root/app/views/user_mailer/confirmation.html.erb +0 -1
- data/test/rails_root/test/unit/user_mailer_test.rb +0 -6
    
        data/Rakefile
    CHANGED
    
    | @@ -3,14 +3,16 @@ require 'rake/testtask' | |
| 3 3 | 
             
            require 'date'
         | 
| 4 4 |  | 
| 5 5 | 
             
            test_files_pattern = 'test/rails_root/test/{unit,functional,other}/**/*_test.rb'
         | 
| 6 | 
            -
             | 
| 7 | 
            -
               | 
| 8 | 
            -
             | 
| 9 | 
            -
             | 
| 6 | 
            +
            namespace :test do
         | 
| 7 | 
            +
              Rake::TestTask.new(:all => 'generator:tests') do |t|
         | 
| 8 | 
            +
                t.libs << 'lib'
         | 
| 9 | 
            +
                t.pattern = test_files_pattern
         | 
| 10 | 
            +
                t.verbose = false
         | 
| 11 | 
            +
              end
         | 
| 10 12 | 
             
            end
         | 
| 11 13 |  | 
| 12 14 | 
             
            desc "Run the test suite"
         | 
| 13 | 
            -
            task :default => : | 
| 15 | 
            +
            task :default => 'test:all'
         | 
| 14 16 |  | 
| 15 17 | 
             
            spec = Gem::Specification.new do |s|
         | 
| 16 18 | 
             
              s.name = "clearance"
         | 
| @@ -23,28 +25,10 @@ spec = Gem::Specification.new do |s| | |
| 23 25 | 
             
            end
         | 
| 24 26 |  | 
| 25 27 | 
             
            namespace :generator do
         | 
| 26 | 
            -
               | 
| 27 | 
            -
             | 
| 28 | 
            -
                 | 
| 29 | 
            -
                 | 
| 30 | 
            -
                 | 
| 31 | 
            -
                files = test_files + app_files
         | 
| 32 | 
            -
                templates_path = "generators/clearance/templates"
         | 
| 33 | 
            -
                system `rm -rf #{templates_path}`
         | 
| 34 | 
            -
                system `mkdir #{templates_path}`
         | 
| 35 | 
            -
                ["app", "app/controllers", "app/models", "app/views",
         | 
| 36 | 
            -
                 "test", "test/functional", "test/unit"].each do |directory|
         | 
| 37 | 
            -
                  system `mkdir #{templates_path}/#{directory}`
         | 
| 38 | 
            -
                end
         | 
| 39 | 
            -
                files.each do |file|
         | 
| 40 | 
            -
                  template = "generators/clearance/templates/#{file.gsub("test/rails_root/", "")}"
         | 
| 41 | 
            -
                  if File.directory?(file)
         | 
| 42 | 
            -
                    system `rm -rf #{template}`
         | 
| 43 | 
            -
                    system `mkdir #{template}`
         | 
| 44 | 
            -
                  else
         | 
| 45 | 
            -
                    system `rm #{template}` if File.exists?(template)
         | 
| 46 | 
            -
                    system `cp #{file} #{template}`
         | 
| 47 | 
            -
                  end
         | 
| 48 | 
            -
                end
         | 
| 28 | 
            +
              desc "Run the generator on the tests"
         | 
| 29 | 
            +
              task :tests do
         | 
| 30 | 
            +
                system "mkdir -p test/rails_root/vendor/plugins/clearance"
         | 
| 31 | 
            +
                system "cp -R generators test/rails_root/vendor/plugins/clearance"
         | 
| 32 | 
            +
                system "cd test/rails_root; ./script/generate clearance"
         | 
| 49 33 | 
             
              end
         | 
| 50 34 | 
             
            end
         | 
| @@ -12,7 +12,7 @@ class ClearanceGenerator < Rails::Generator::Base | |
| 12 12 |  | 
| 13 13 | 
             
                  m.directory File.join("app", "models")
         | 
| 14 14 | 
             
                  ["app/models/user.rb",
         | 
| 15 | 
            -
                   "app/models/ | 
| 15 | 
            +
                   "app/models/clearance_mailer.rb"].each do |file|
         | 
| 16 16 | 
             
                    m.file file, file
         | 
| 17 17 | 
             
                  end
         | 
| 18 18 |  | 
| @@ -34,8 +34,8 @@ class ClearanceGenerator < Rails::Generator::Base | |
| 34 34 | 
             
                  end
         | 
| 35 35 |  | 
| 36 36 | 
             
                  m.directory File.join("app", "views", "user_mailer")
         | 
| 37 | 
            -
                  ["app/views/ | 
| 38 | 
            -
                   "app/views/ | 
| 37 | 
            +
                  ["app/views/clearance_mailer/change_password.html.erb",
         | 
| 38 | 
            +
                   "app/views/clearance_mailer/confirmation.html.erb"].each do |file|
         | 
| 39 39 | 
             
                    m.file file, file
         | 
| 40 40 | 
             
                  end
         | 
| 41 41 |  | 
| @@ -55,7 +55,7 @@ class ClearanceGenerator < Rails::Generator::Base | |
| 55 55 | 
             
                  end
         | 
| 56 56 |  | 
| 57 57 | 
             
                  m.directory File.join("test", "unit")
         | 
| 58 | 
            -
                  ["test/unit/ | 
| 58 | 
            +
                  ["test/unit/clearance_mailer_test.rb",
         | 
| 59 59 | 
             
                   "test/unit/user_test.rb"].each do |file|
         | 
| 60 60 | 
             
                    m.file file, file
         | 
| 61 61 | 
             
                  end
         | 
    
        data/lib/clearance.rb
    CHANGED
    
    | @@ -4,12 +4,12 @@ require 'clearance/app/controllers/passwords_controller' | |
| 4 4 | 
             
            require 'clearance/app/controllers/sessions_controller'
         | 
| 5 5 | 
             
            require 'clearance/app/controllers/users_controller'
         | 
| 6 6 | 
             
            require 'clearance/app/models/user'
         | 
| 7 | 
            -
            require 'clearance/app/models/ | 
| 7 | 
            +
            require 'clearance/app/models/clearance_mailer'
         | 
| 8 8 | 
             
            require 'clearance/test/functional/confirmations_controller_test'
         | 
| 9 9 | 
             
            require 'clearance/test/functional/sessions_controller_test'
         | 
| 10 10 | 
             
            require 'clearance/test/functional/users_controller_test'
         | 
| 11 11 | 
             
            require 'clearance/test/functional/passwords_controller_test'
         | 
| 12 12 | 
             
            require 'clearance/test/test_helper'
         | 
| 13 13 | 
             
            require 'clearance/test/unit/user_test'
         | 
| 14 | 
            -
            require 'clearance/test/unit/ | 
| 14 | 
            +
            require 'clearance/test/unit/clearance_mailer_test'
         | 
| 15 15 | 
             
            require 'clearance/version'
         | 
| @@ -27,7 +27,7 @@ module Clearance | |
| 27 27 |  | 
| 28 28 | 
             
                    module ProtectedInstanceMethods
         | 
| 29 29 | 
             
                      def authenticate
         | 
| 30 | 
            -
                        deny_access unless  | 
| 30 | 
            +
                        deny_access unless logged_in?
         | 
| 31 31 | 
             
                      end
         | 
| 32 32 |  | 
| 33 33 | 
             
                      def user_from_session
         | 
| @@ -39,13 +39,15 @@ module Clearance | |
| 39 39 | 
             
                        user && user.remember_token? ? user : nil
         | 
| 40 40 | 
             
                      end
         | 
| 41 41 |  | 
| 42 | 
            -
                       | 
| 43 | 
            -
             | 
| 44 | 
            -
             | 
| 42 | 
            +
                      # Level of indirection so you can easily override this method
         | 
| 43 | 
            +
                      # but also call #login .
         | 
| 44 | 
            +
                      def log_user_in(user)
         | 
| 45 | 
            +
                        login(user)
         | 
| 45 46 | 
             
                      end
         | 
| 46 47 |  | 
| 47 | 
            -
                      def  | 
| 48 | 
            +
                      def login(user)
         | 
| 48 49 | 
             
                        session[:user_id] = user.id if user
         | 
| 50 | 
            +
                        @current_user = user
         | 
| 49 51 | 
             
                      end
         | 
| 50 52 |  | 
| 51 53 | 
             
                      def redirect_back_or(default)
         | 
| @@ -62,7 +64,7 @@ module Clearance | |
| 62 64 | 
             
                      end
         | 
| 63 65 |  | 
| 64 66 | 
             
                      def deny_access(flash_message = nil, opts = {})
         | 
| 65 | 
            -
                        opts[:redirect] ||=  | 
| 67 | 
            +
                        opts[:redirect] ||= new_session_path
         | 
| 66 68 | 
             
                        store_location
         | 
| 67 69 | 
             
                        flash[:error] = flash_message if flash_message
         | 
| 68 70 | 
             
                        redirect_to opts[:redirect]
         | 
| @@ -71,6 +73,10 @@ module Clearance | |
| 71 73 | 
             
                      def user_model
         | 
| 72 74 | 
             
                        User
         | 
| 73 75 | 
             
                      end
         | 
| 76 | 
            +
             | 
| 77 | 
            +
                      def mailer_model
         | 
| 78 | 
            +
                        ClearanceMailer
         | 
| 79 | 
            +
                      end
         | 
| 74 80 | 
             
                    end
         | 
| 75 81 | 
             
                  end
         | 
| 76 82 | 
             
                end
         | 
| @@ -18,8 +18,20 @@ module Clearance | |
| 18 18 |  | 
| 19 19 | 
             
                    module InstanceMethods
         | 
| 20 20 | 
             
                      def create
         | 
| 21 | 
            -
                         | 
| 22 | 
            -
                         | 
| 21 | 
            +
                        @user = user_model.authenticate(params[:session][:email], params[:session][:password])
         | 
| 22 | 
            +
                        if @user.nil?
         | 
| 23 | 
            +
                          login_failure
         | 
| 24 | 
            +
                        else
         | 
| 25 | 
            +
                          if @user.confirmed?
         | 
| 26 | 
            +
                            remember_me = params[:session][:remember_me] if params[:session]
         | 
| 27 | 
            +
                            remember(@user) if remember_me == '1'
         | 
| 28 | 
            +
                            log_user_in(@user)
         | 
| 29 | 
            +
                            login_successful
         | 
| 30 | 
            +
                          else
         | 
| 31 | 
            +
                            mailer_model.deliver_confirmation(@user)
         | 
| 32 | 
            +
                            deny_access('Account not confirmed. Confirmation email sent.')
         | 
| 33 | 
            +
                          end
         | 
| 34 | 
            +
                        end
         | 
| 23 35 | 
             
                      end
         | 
| 24 36 |  | 
| 25 37 | 
             
                      def destroy
         | 
| @@ -31,17 +43,6 @@ module Clearance | |
| 31 43 | 
             
                    end
         | 
| 32 44 |  | 
| 33 45 | 
             
                    module PrivateInstanceMethods
         | 
| 34 | 
            -
                      def login_via_password(email, password, remember_me)
         | 
| 35 | 
            -
                        user = user_model.authenticate(email, password)
         | 
| 36 | 
            -
                        if login(user)
         | 
| 37 | 
            -
                          create_session_for(user)
         | 
| 38 | 
            -
                          remember(user) if remember_me == '1'
         | 
| 39 | 
            -
                          login_successful
         | 
| 40 | 
            -
                        else
         | 
| 41 | 
            -
                          login_failure
         | 
| 42 | 
            -
                        end
         | 
| 43 | 
            -
                      end
         | 
| 44 | 
            -
                  
         | 
| 45 46 | 
             
                      def login_successful
         | 
| 46 47 | 
             
                        flash[:notice] = 'Logged in successfully'
         | 
| 47 48 | 
             
                        redirect_back_or url_after_create
         | 
| @@ -24,7 +24,7 @@ module Clearance | |
| 24 24 | 
             
                      def create
         | 
| 25 25 | 
             
                        @user = user_model.new params[:user]
         | 
| 26 26 | 
             
                        if @user.save
         | 
| 27 | 
            -
                           | 
| 27 | 
            +
                          ClearanceMailer.deliver_confirmation @user
         | 
| 28 28 | 
             
                          flash[:notice] = "You will receive an email within the next few minutes. It contains instructions for you to confirm your account."
         | 
| 29 29 | 
             
                          redirect_to url_after_create
         | 
| 30 30 | 
             
                        else
         | 
| @@ -5,22 +5,45 @@ module Clearance | |
| 5 5 |  | 
| 6 6 | 
             
                    def self.included(base)
         | 
| 7 7 | 
             
                      base.class_eval do
         | 
| 8 | 
            -
                         | 
| 9 | 
            -
             | 
| 8 | 
            +
                        should_filter_params :password
         | 
| 9 | 
            +
             | 
| 10 | 
            +
                        context "on GET to /sessions/new" do
         | 
| 11 | 
            +
                          setup { get :new }
         | 
| 12 | 
            +
                    
         | 
| 13 | 
            +
                          should_respond_with :success
         | 
| 14 | 
            +
                          should_render_template :new
         | 
| 15 | 
            +
                          should_not_set_the_flash
         | 
| 16 | 
            +
                          should_have_form :action => "session_path",
         | 
| 17 | 
            +
                            :fields => { "session[email]" => :text,
         | 
| 18 | 
            +
                              "session[password]" => :password,
         | 
| 19 | 
            +
                              "session[remember_me]" => :checkbox }
         | 
| 20 | 
            +
                        end
         | 
| 10 21 |  | 
| 11 | 
            -
             | 
| 22 | 
            +
                        context "Given an unconfirmed user" do
         | 
| 23 | 
            +
                          setup do
         | 
| 24 | 
            +
                            @user = Factory(:user, :confirmed => false)
         | 
| 25 | 
            +
                          end
         | 
| 12 26 |  | 
| 13 | 
            -
                          context " | 
| 14 | 
            -
                            setup  | 
| 15 | 
            -
             | 
| 16 | 
            -
             | 
| 17 | 
            -
             | 
| 18 | 
            -
             | 
| 19 | 
            -
             | 
| 20 | 
            -
             | 
| 21 | 
            -
             | 
| 22 | 
            -
             | 
| 27 | 
            +
                          context "a POST to #create with good credentials" do
         | 
| 28 | 
            +
                            setup do
         | 
| 29 | 
            +
                              ActionMailer::Base.deliveries.clear
         | 
| 30 | 
            +
                              post :create, :session => {
         | 
| 31 | 
            +
                                              :email => @user.email,
         | 
| 32 | 
            +
                                              :password => @user.password
         | 
| 33 | 
            +
                              }
         | 
| 34 | 
            +
                            end
         | 
| 35 | 
            +
             | 
| 36 | 
            +
                            should_deny_access(:flash => /confirm/i)
         | 
| 37 | 
            +
             | 
| 38 | 
            +
                            should "send the confirmation email" do
         | 
| 39 | 
            +
                              assert_not_nil email = ActionMailer::Base.deliveries[0]
         | 
| 40 | 
            +
                              assert_match /account confirmation/i, email.subject
         | 
| 41 | 
            +
                            end
         | 
| 23 42 | 
             
                          end
         | 
| 43 | 
            +
                        end
         | 
| 44 | 
            +
             | 
| 45 | 
            +
                        context "Given a confirmed user" do
         | 
| 46 | 
            +
                          setup { @user = Factory(:user, :confirmed => true) }
         | 
| 24 47 |  | 
| 25 48 | 
             
                          context "a POST to #create with good credentials" do
         | 
| 26 49 | 
             
                            setup do
         | 
| @@ -49,15 +49,20 @@ module Clearance | |
| 49 49 | 
             
                        end
         | 
| 50 50 |  | 
| 51 51 | 
             
                        logged_in_user_context do
         | 
| 52 | 
            +
                          context "GET to new" do
         | 
| 53 | 
            +
                            setup { get :new }
         | 
| 54 | 
            +
                            should_redirect_to 'root_url'
         | 
| 55 | 
            +
                          end
         | 
| 52 56 |  | 
| 53 | 
            -
                           | 
| 54 | 
            -
             | 
| 55 | 
            -
             | 
| 57 | 
            +
                          context "POST to create" do
         | 
| 58 | 
            +
                            setup { post :create, :user => {} }
         | 
| 59 | 
            +
                            should_redirect_to 'root_url'
         | 
| 60 | 
            +
                          end
         | 
| 56 61 |  | 
| 62 | 
            +
                          should_filter_params :password
         | 
| 57 63 | 
             
                        end
         | 
| 58 64 | 
             
                      end
         | 
| 59 65 | 
             
                    end
         | 
| 60 | 
            -
             | 
| 61 66 | 
             
                  end
         | 
| 62 67 | 
             
                end
         | 
| 63 68 | 
             
              end
         | 
| @@ -23,16 +23,20 @@ module Clearance | |
| 23 23 |  | 
| 24 24 | 
             
                  module ClassMethods
         | 
| 25 25 | 
             
                    def should_deny_access_on(command, opts = {})
         | 
| 26 | 
            -
                      opts[:redirect] ||= "root_url"
         | 
| 27 26 |  | 
| 28 27 | 
             
                      context "on #{command}" do
         | 
| 29 28 | 
             
                        setup { eval command }
         | 
| 30 | 
            -
                         | 
| 31 | 
            -
             | 
| 32 | 
            -
             | 
| 33 | 
            -
             | 
| 34 | 
            -
             | 
| 35 | 
            -
             | 
| 29 | 
            +
                        should_deny_access(opts)
         | 
| 30 | 
            +
                      end
         | 
| 31 | 
            +
                    end
         | 
| 32 | 
            +
             | 
| 33 | 
            +
                    def should_deny_access(opts = {})
         | 
| 34 | 
            +
                      opts[:redirect] ||= "new_session_path"
         | 
| 35 | 
            +
                      should_redirect_to opts[:redirect]
         | 
| 36 | 
            +
                      if opts[:flash]
         | 
| 37 | 
            +
                        should_set_the_flash_to opts[:flash]
         | 
| 38 | 
            +
                      else
         | 
| 39 | 
            +
                        should_not_set_the_flash
         | 
| 36 40 | 
             
                      end
         | 
| 37 41 | 
             
                    end
         | 
| 38 42 |  | 
| @@ -2,12 +2,15 @@ ActionController::Routing::Routes.draw do |map| | |
| 2 2 |  | 
| 3 3 | 
             
              map.resources :users
         | 
| 4 4 | 
             
              map.resource :session
         | 
| 5 | 
            +
              map.resource :session_mailer_override
         | 
| 5 6 |  | 
| 6 7 | 
             
              map.resources :users, :has_one => :password
         | 
| 7 8 | 
             
              map.resources :users, :has_one => :confirmation
         | 
| 8 9 |  | 
| 9 10 | 
             
              map.resources :passwords
         | 
| 11 | 
            +
             | 
| 12 | 
            +
              map.resource :account
         | 
| 10 13 |  | 
| 11 | 
            -
              map.root :controller => ' | 
| 14 | 
            +
              map.root :controller => 'users', :action => 'new'
         | 
| 12 15 |  | 
| 13 | 
            -
            end
         | 
| 16 | 
            +
            end
         | 
    
        metadata
    CHANGED
    
    
| @@ -1,6 +0,0 @@ | |
| 1 | 
            -
            Someone, hopefully you, has requested that we send you a link to change your password.
         | 
| 2 | 
            -
             | 
| 3 | 
            -
            Here's the link:
         | 
| 4 | 
            -
            <%= edit_user_password_url @user, :email => @user.email, :password => @user.crypted_password %>
         | 
| 5 | 
            -
             | 
| 6 | 
            -
            If you didn't request this, no need to freak out, your password hasn't been changed.  You can just ignore this email.
         | 
| @@ -1 +0,0 @@ | |
| 1 | 
            -
            <%= new_user_confirmation_url :user_id => @user, :salt => @user.salt %>
         | 
| @@ -1,33 +0,0 @@ | |
| 1 | 
            -
            module Clearance
         | 
| 2 | 
            -
              module App
         | 
| 3 | 
            -
                module Models
         | 
| 4 | 
            -
                  module UserMailer
         | 
| 5 | 
            -
                
         | 
| 6 | 
            -
                    def self.included(base)
         | 
| 7 | 
            -
                      base.class_eval do
         | 
| 8 | 
            -
                    
         | 
| 9 | 
            -
                        include InstanceMethods
         | 
| 10 | 
            -
                    
         | 
| 11 | 
            -
                      end
         | 
| 12 | 
            -
                    end
         | 
| 13 | 
            -
                
         | 
| 14 | 
            -
                    module InstanceMethods
         | 
| 15 | 
            -
                      def change_password(user)
         | 
| 16 | 
            -
                        from       DO_NOT_REPLY
         | 
| 17 | 
            -
                        recipients user.email
         | 
| 18 | 
            -
                        subject    "[#{PROJECT_NAME.humanize}] Change your password"
         | 
| 19 | 
            -
                        body       :user => user
         | 
| 20 | 
            -
                      end
         | 
| 21 | 
            -
                    
         | 
| 22 | 
            -
                      def confirmation(user)
         | 
| 23 | 
            -
                        recipients user.email
         | 
| 24 | 
            -
                        from       DO_NOT_REPLY
         | 
| 25 | 
            -
                        subject   "[#{PROJECT_NAME.humanize}] Email confirmation"
         | 
| 26 | 
            -
                        body      :user => user
         | 
| 27 | 
            -
                      end
         | 
| 28 | 
            -
                    end
         | 
| 29 | 
            -
                    
         | 
| 30 | 
            -
                  end
         | 
| 31 | 
            -
                end
         | 
| 32 | 
            -
              end
         | 
| 33 | 
            -
            end
         | 
| @@ -1,63 +0,0 @@ | |
| 1 | 
            -
            module Clearance
         | 
| 2 | 
            -
              module Test
         | 
| 3 | 
            -
                module Unit
         | 
| 4 | 
            -
                  module UserMailerTest
         | 
| 5 | 
            -
              
         | 
| 6 | 
            -
                    def self.included(base)
         | 
| 7 | 
            -
                      base.class_eval do
         | 
| 8 | 
            -
                        context "A change password email" do
         | 
| 9 | 
            -
                          setup do
         | 
| 10 | 
            -
                            @user = Factory :user
         | 
| 11 | 
            -
                            @email = UserMailer.create_change_password @user
         | 
| 12 | 
            -
                          end
         | 
| 13 | 
            -
             | 
| 14 | 
            -
                          should "set its from address to DO_NOT_REPLY" do
         | 
| 15 | 
            -
                            assert_equal DO_NOT_REPLY, @email.from[0]
         | 
| 16 | 
            -
                          end
         | 
| 17 | 
            -
             | 
| 18 | 
            -
                          should "contain a link to edit the user's password" do
         | 
| 19 | 
            -
                            host = ActionMailer::Base.default_url_options[:host]
         | 
| 20 | 
            -
                            regexp = %r{http://#{host}/users/#{@user.id}/password/edit\?email=#{@user.email.gsub("@", "%40")}&password=#{@user.crypted_password}}
         | 
| 21 | 
            -
                            assert_match regexp, @email.body
         | 
| 22 | 
            -
                          end
         | 
| 23 | 
            -
             | 
| 24 | 
            -
                          should "be sent to the user" do
         | 
| 25 | 
            -
                            assert_equal [@user.email], @email.to
         | 
| 26 | 
            -
                          end
         | 
| 27 | 
            -
             | 
| 28 | 
            -
                          should "have a subject of '[PROJECT_NAME] Change your password'" do
         | 
| 29 | 
            -
                            assert_equal @email.subject, "[#{PROJECT_NAME.humanize}] Change your password"
         | 
| 30 | 
            -
                          end
         | 
| 31 | 
            -
                        end
         | 
| 32 | 
            -
                        
         | 
| 33 | 
            -
                        context "A confirmation email" do
         | 
| 34 | 
            -
                          setup do
         | 
| 35 | 
            -
                            @user = Factory :user
         | 
| 36 | 
            -
                            @email = UserMailer.create_confirmation @user
         | 
| 37 | 
            -
                          end
         | 
| 38 | 
            -
             | 
| 39 | 
            -
                          should 'set its recipient to the given user' do
         | 
| 40 | 
            -
                            assert_equal @user.email, @email.to[0]
         | 
| 41 | 
            -
                          end
         | 
| 42 | 
            -
             | 
| 43 | 
            -
                          should 'set its subject' do
         | 
| 44 | 
            -
                            assert_equal "[#{PROJECT_NAME.humanize}] Email confirmation", @email.subject
         | 
| 45 | 
            -
                          end
         | 
| 46 | 
            -
             | 
| 47 | 
            -
                          should 'set its from address to DO_NOT_REPLY' do
         | 
| 48 | 
            -
                            assert_equal DO_NOT_REPLY, @email.from[0]
         | 
| 49 | 
            -
                          end
         | 
| 50 | 
            -
             | 
| 51 | 
            -
                          should "contain a link to confirm the user's account" do
         | 
| 52 | 
            -
                            host = ActionMailer::Base.default_url_options[:host]
         | 
| 53 | 
            -
                            regexp = %r{http://#{host}/users/#{@user.id}/confirmation/new\?salt=#{@user.salt}}
         | 
| 54 | 
            -
                            assert_match regexp, @email.body
         | 
| 55 | 
            -
                          end
         | 
| 56 | 
            -
                        end
         | 
| 57 | 
            -
                      end
         | 
| 58 | 
            -
                    end
         | 
| 59 | 
            -
             | 
| 60 | 
            -
                  end
         | 
| 61 | 
            -
                end  
         | 
| 62 | 
            -
              end
         | 
| 63 | 
            -
            end
         | 
| @@ -1,6 +0,0 @@ | |
| 1 | 
            -
            Someone, hopefully you, has requested that we send you a link to change your password.
         | 
| 2 | 
            -
             | 
| 3 | 
            -
            Here's the link:
         | 
| 4 | 
            -
            <%= edit_user_password_url @user, :email => @user.email, :password => @user.crypted_password %>
         | 
| 5 | 
            -
             | 
| 6 | 
            -
            If you didn't request this, no need to freak out, your password hasn't been changed.  You can just ignore this email.
         | 
| @@ -1 +0,0 @@ | |
| 1 | 
            -
            <%= new_user_confirmation_url :user_id => @user, :salt => @user.salt %>
         |