You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
asciinema.org/spec/middleware/omni_auth_user_loader_spec.rb

64 lines
1.5 KiB
Ruby

require 'spec_helper'
describe OmniAuthUserLoader do
let(:middleware) { OmniAuthUserLoader.new(app) }
let(:app) { double('app', :call => nil) }
describe '#call' do
let(:env) { { :path => '/foo' } }
subject { env['asciiio.user'] }
before do
OmniAuth.config.mock_auth[:twitter] = omniauth
env["omniauth.auth"] = OmniAuth.config.mock_auth[:twitter]
end
context "when there's no omniauth hash" do
let(:omniauth) { nil }
before do
middleware.call(env)
end
it { should be(nil) }
end
context "when the omniauth hash is present" do
let(:omniauth) { {
"provider" => 'twitter',
"uid" => 1234,
"info" => {
"nickname" => 'quux',
"name" => 'Quux'
}
} }
context "user exists" do
let!(:user) { create(:user, :provider => 'twitter', :uid => 1234) }
before do
middleware.call(env)
end
it { should eq(user) }
end
context "user doesn't exist" do
before do
allow(OauthHelper).to receive(:get_avatar_url) { 'http://a.eu/1.jpg' }
middleware.call(env)
end
it { should be_new_record }
its(:provider) { should eq('twitter') }
its(:uid) { should eq(1234) }
its(:nickname) { should eq('quux') }
its(:name) { should eq('Quux') }
its(:avatar_url) { should eq('http://a.eu/1.jpg') }
end
end
end
end