socialforge/spec/requests/account_request_spec.rb

88 lines
2.4 KiB
Ruby
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

require 'rails_helper'
require 'shared_account_spec'
RSpec.describe "Account request", :type => :request do
describe "注册用户" do
include_context "create user"
it "正常注册可以成功" do
shared_register
expect(response).to redirect_to(my_account_url)
end
it "修改用户资料" do
shared_register
shared_update_user
expect(response).to redirect_to(user_url(session[:user_id]))
end
end
describe "用户登录" do
let(:user){FactoryGirl.create(:user)}
it "未登录访问需要登录页面会自动跳入登录页" do
get 'my/page'
expect(response).to redirect_to(signin_path)
end
context "正常登录" do
before{ post signin_path, username: user.login, password: user.password }
it "登录成功,正常跳转" do
expect(response).to redirect_to(my_account_url)
end
it "登录成功session正确" do
expect(user.id).to eq(session[:user_id])
end
it "正常登录后可以访问需要认证的页面" do
get 'my/account'
expect(response).to have_http_status(:success)
expect(response.body).to include(user.login)
end
end
context "登录失败" do
before{post signin_path, username: user.login, password: 'wrong password'}
it {expect(response).to render_template('account/login')}
it "跳加登录页面" do
get 'my/page'
expect(response).to redirect_to(signin_path)
end
end
context "自动登录" do
before{
post signin_path, username: user.login, password: user.password, autologin: 1
}
it "登录成功跳转到个人首页" do
expect(response).to redirect_to(my_account_url)
end
it "验证token" do
token = Token.first
expect(token).not_to be_nil
expect(user.id).to eq(token.user.id)
expect(token.action).to eq('autologin')
expect(user.id).to eq(session[:user_id])
expect(token.value).to eq(cookies['autologin'])
end
it 'session 失效后可以用token自动重新登录' do
token = Token.first
reset!
User.current = nil
get my_account_url
expect(response).to redirect_to(signin_url)
cookies[:autologin] = token.value
get my_account_url
expect(response).to have_http_status(:success)
expect(response.body).to include(user.login)
end
end
end
end