update authentication system to Devise
This commit is contained in:
		
							
								
								
									
										24
									
								
								spec/controllers/registrations_controller_spec.rb
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										24
									
								
								spec/controllers/registrations_controller_spec.rb
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,24 @@
 | 
			
		||||
require 'spec_helper'
 | 
			
		||||
 | 
			
		||||
describe RegistrationsController do
 | 
			
		||||
 | 
			
		||||
  describe "new account" do
 | 
			
		||||
    render_views
 | 
			
		||||
 | 
			
		||||
    it "should create a new user if user parameters are complete" do
 | 
			
		||||
      @request.env["devise.mapping"] = Devise.mappings[:user]
 | 
			
		||||
      post :create, :user => {"login"=>"xxx", "email"=>"xxx@insomnia-consulting.org", "time_zone"=>"Eastern Time (US & Canada)", "password"=>"[FILTERED]", "password_confirmation"=>"[FILTERED]"}
 | 
			
		||||
      response.code.should == "302"
 | 
			
		||||
      response.should redirect_to(channels_path)
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    it "should have a valid api_key" do
 | 
			
		||||
      @request.env["devise.mapping"] = Devise.mappings[:user]
 | 
			
		||||
      post :create, :user => {"login"=>"xxx", "email"=>"xxx@insomnia-consulting.org", "password"=>"[FILTERED]", "password_confirmation"=>"[FILTERED]"}
 | 
			
		||||
      assigns[:user].api_key.length.should eq(16)
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
@@ -1,44 +0,0 @@
 | 
			
		||||
# -*- coding: utf-8 -*-
 | 
			
		||||
require 'spec_helper'
 | 
			
		||||
 | 
			
		||||
describe UserSessionsController do
 | 
			
		||||
  before :each do
 | 
			
		||||
    @user = FactoryGirl.create(:user)
 | 
			
		||||
    activate_authlogic
 | 
			
		||||
    @user_session = UserSession.create(@user)
 | 
			
		||||
    controller.stub(:current_user).and_return(@user)
 | 
			
		||||
    controller.stub(:current_user_session).and_return(@user_session)
 | 
			
		||||
  end
 | 
			
		||||
  
 | 
			
		||||
  describe "for logged in user" do
 | 
			
		||||
    it "should logout the user" do
 | 
			
		||||
      get 'destroy'
 | 
			
		||||
      response.should redirect_to(root_path)
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
describe UserSessionsController do
 | 
			
		||||
   before :each do
 | 
			
		||||
     @user = FactoryGirl.create(:user)
 | 
			
		||||
     activate_authlogic
 | 
			
		||||
#     @user_session = UserSession.create(@user)
 | 
			
		||||
#     controller.stub(:current_user).and_return(@user)
 | 
			
		||||
#     controller.stub(:current_user_session).and_return(@user_session)
 | 
			
		||||
   end
 | 
			
		||||
   it "should allow a new user to login" do
 | 
			
		||||
     get 'new'
 | 
			
		||||
     response.should be_success
 | 
			
		||||
    response.should render_template('new')
 | 
			
		||||
   end  
 | 
			
		||||
 | 
			
		||||
  it "should create user session" do
 | 
			
		||||
    post 'create' , {:userlogin => "", :user_session=>{"remember_me"=>"false", "login"=>@user.login, "password"=>"foobar", "remember_id"=>"1"}, "commit" => "Sign In"}
 | 
			
		||||
    user_session = UserSession.find
 | 
			
		||||
    user_session.should_not be_nil
 | 
			
		||||
    user_session.user.should == @user
 | 
			
		||||
    response.should redirect_to ('/channels')
 | 
			
		||||
    
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
end
 | 
			
		||||
@@ -3,20 +3,8 @@ require 'spec_helper'
 | 
			
		||||
describe UsersController do
 | 
			
		||||
  before :each do
 | 
			
		||||
    @user = FactoryGirl.create(:user)
 | 
			
		||||
    # controller.stub(:current_user).and_return(@user)
 | 
			
		||||
    # controller.stub(:current_user_session).and_return(true)
 | 
			
		||||
    # @channel = FactoryGirl.create(:channel)
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  # create a valid authlogic session
 | 
			
		||||
  #def create_valid_session
 | 
			
		||||
  #  activate_authlogic
 | 
			
		||||
  #  UserSession.create(@user, true) #create an authlogic session
 | 
			
		||||
  #end
 | 
			
		||||
 | 
			
		||||
  # get the curent_user
 | 
			
		||||
  #def current_user; @current_user ||= @user; end
 | 
			
		||||
 | 
			
		||||
  describe "api" do
 | 
			
		||||
    render_views
 | 
			
		||||
 | 
			
		||||
@@ -34,46 +22,42 @@ describe UsersController do
 | 
			
		||||
      get :profile, :glob => @user.login, :format => 'json', :key => @user.api_key
 | 
			
		||||
      JSON.parse(response.body)['email'].should eq(@user.email)
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  #describe "existing account" do
 | 
			
		||||
    #render_views
 | 
			
		||||
 | 
			
		||||
    #it "has a current_user" do
 | 
			
		||||
    #  create_valid_session
 | 
			
		||||
    #  current_user.should_not be_false
 | 
			
		||||
    #end
 | 
			
		||||
 | 
			
		||||
    #it "generates a new api_key" do
 | 
			
		||||
    #  create_valid_session
 | 
			
		||||
    #  old_key = @user.set_new_api_key!
 | 
			
		||||
    #  post :new_api_key
 | 
			
		||||
    #  response.should be_successful
 | 
			
		||||
    #  assigns[:user].api_key.should != old_key
 | 
			
		||||
    #end
 | 
			
		||||
  #end
 | 
			
		||||
 | 
			
		||||
  describe "new account" do
 | 
			
		||||
    render_views
 | 
			
		||||
 | 
			
		||||
    it "assigns new user" do
 | 
			
		||||
      get :new
 | 
			
		||||
      response.should be_successful
 | 
			
		||||
      response.should have_selector("#user_submit")
 | 
			
		||||
      assigns[:user].should_not be_nil
 | 
			
		||||
    end
 | 
			
		||||
    it "should create a new user if user parameters are complete" do
 | 
			
		||||
      post :create, :user => {"login"=>"xxx", "email"=>"xxx@insomnia-consulting.org", "time_zone"=>"Eastern Time (US & Canada)", "password"=>"[FILTERED]", "password_confirmation"=>"[FILTERED]"}
 | 
			
		||||
      response.code.should == "302"
 | 
			
		||||
      response.should redirect_to(channels_path)
 | 
			
		||||
  describe "login via api" do
 | 
			
		||||
    it "should return a token" do
 | 
			
		||||
      post :api_login, :login => @user.login, :password => @user.password
 | 
			
		||||
      @user.reload
 | 
			
		||||
      response.body.should eq(@user.authentication_token)
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    it "should have a valid api_key" do
 | 
			
		||||
      post :create, :user => {"login"=>"xxx", "email"=>"xxx@insomnia-consulting.org", "password"=>"[FILTERED]", "password_confirmation"=>"[FILTERED]"}
 | 
			
		||||
      assigns[:user].api_key.length.should eq(16)
 | 
			
		||||
    it "returns JSON" do
 | 
			
		||||
      post :api_login, :login => @user.login, :password => @user.password, :format => 'json'
 | 
			
		||||
      @user.reload
 | 
			
		||||
      JSON.parse(response.body)['login'].should eq(@user.login)
 | 
			
		||||
      JSON.parse(response.body)['authentication_token'].should eq(@user.authentication_token)
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    it "returns XML" do
 | 
			
		||||
      post :api_login, :login => @user.login, :password => @user.password, :format => 'xml'
 | 
			
		||||
      @user.reload
 | 
			
		||||
      Nokogiri::XML(response.body).css('login').text.should eq(@user.login)
 | 
			
		||||
      Nokogiri::XML(response.body).css('authentication-token').text.should eq(@user.authentication_token)
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  describe "authentication via api" do
 | 
			
		||||
    it "should not allow authentication via incorrect token" do
 | 
			
		||||
      # attempt to get private profile info
 | 
			
		||||
      get :profile, :glob => @user.login, :format => 'json', :login => @user.login, :token => 'bad token'
 | 
			
		||||
      JSON.parse(response.body)['email'].should eq(nil)
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    it "should allow authentication via correct token" do
 | 
			
		||||
      # attempt to get private profile info
 | 
			
		||||
      get :profile, :glob => @user.login, :format => 'json', :login => @user.login, :token => @user.authentication_token
 | 
			
		||||
      JSON.parse(response.body)['email'].should eq(@user.email)
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
end
 | 
			
		||||
 
 | 
			
		||||
@@ -2,12 +2,13 @@ FactoryGirl.define do
 | 
			
		||||
  factory :user do
 | 
			
		||||
    sequence(:login) {|n| "name#{n}" }
 | 
			
		||||
    sequence(:email) {|n| "email#{n}@example.com" }
 | 
			
		||||
    password "foobar"
 | 
			
		||||
    password "foobar88"
 | 
			
		||||
    password_confirmation {|u| u.password}
 | 
			
		||||
    bio ""
 | 
			
		||||
    website ""
 | 
			
		||||
    time_zone "London"
 | 
			
		||||
    api_key 'ED1HVHNEH2BZD0AB'
 | 
			
		||||
    authentication_token '123456token'
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -2,9 +2,6 @@
 | 
			
		||||
ENV["RAILS_ENV"] ||= 'test'
 | 
			
		||||
require File.expand_path("../../config/environment", __FILE__)
 | 
			
		||||
require 'rspec/rails'
 | 
			
		||||
require 'authlogic/test_case'
 | 
			
		||||
 | 
			
		||||
include Authlogic::TestCase
 | 
			
		||||
 | 
			
		||||
# Requires supporting ruby files with custom matchers and macros, etc,
 | 
			
		||||
# in spec/support/ and its subdirectories.
 | 
			
		||||
@@ -23,6 +20,9 @@ RSpec.configure do |config|
 | 
			
		||||
  # Use color in STDOUT
 | 
			
		||||
  config.color_enabled = true
 | 
			
		||||
 | 
			
		||||
  # add devise test helpers
 | 
			
		||||
  config.include Devise::TestHelpers, type: :controller
 | 
			
		||||
 | 
			
		||||
  # Remove this line if you're not using ActiveRecord or ActiveRecord fixtures
 | 
			
		||||
  config.fixture_path = "#{::Rails.root}/spec/fixtures"
 | 
			
		||||
 | 
			
		||||
@@ -48,14 +48,14 @@ def ppp(obj)
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
def without_timestamping_of(*klasses)
 | 
			
		||||
    if block_given?
 | 
			
		||||
      klasses.delete_if { |klass| !klass.record_timestamps }
 | 
			
		||||
      klasses.each { |klass| klass.record_timestamps = false }
 | 
			
		||||
      begin
 | 
			
		||||
        yield
 | 
			
		||||
      ensure
 | 
			
		||||
        klasses.each { |klass| klass.record_timestamps = true  }
 | 
			
		||||
      end
 | 
			
		||||
  if block_given?
 | 
			
		||||
    klasses.delete_if { |klass| !klass.record_timestamps }
 | 
			
		||||
    klasses.each { |klass| klass.record_timestamps = false }
 | 
			
		||||
    begin
 | 
			
		||||
      yield
 | 
			
		||||
    ensure
 | 
			
		||||
      klasses.each { |klass| klass.record_timestamps = true  }
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user