update authentication system to Devise

This commit is contained in:
Lee Lawlor
2014-03-13 19:16:35 -04:00
parent 4c9886612f
commit 774543e678
78 changed files with 1257 additions and 385 deletions

View 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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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