canvas-lms/spec/models/user_service_spec.rb

170 lines
5.9 KiB
Ruby

#
# Copyright (C) 2011 Instructure, Inc.
#
# This file is part of Canvas.
#
# Canvas is free software: you can redistribute it and/or modify it under
# the terms of the GNU Affero General Public License as published by the Free
# Software Foundation, version 3 of the License.
#
# Canvas is distributed in the hope that it will be useful, but WITHOUT ANY
# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
# A PARTICULAR PURPOSE. See the GNU Affero General Public License for more
# details.
#
# You should have received a copy of the GNU Affero General Public License along
# with this program. If not, see <http://www.gnu.org/licenses/>.
#
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper.rb')
require File.expand_path(File.dirname(__FILE__) + '/../sharding_spec_helper')
describe UserService do
before :once do
user_service_model
end
it "should have a useful workflow" do
expect(@user_service.state).to eql(:active)
@user_service.failed_request
expect(@user_service.state).to eql(:failed)
end
it "should have a named scope for type" do
@user_service.type = 'BookmarkService'
@user_service.save!
expect(UserService.of_type('BookmarkService').first.id).to eql(@user_service.id)
end
it "should have a named scope for service" do
expect(UserService.for_service(@user_service)).to eq [@user_service]
expect(UserService.for_service(@user_service.service)).to eq [@user_service]
end
it "should have a service_name" do
expect(@user_service.service_name).to eql('Value For Service')
end
it "should be able to crypt a password" do
expect(@user_service.crypted_password).to be_nil
@user_service.password = 'password'
expect(@user_service.crypted_password).not_to be_nil
expect(@user_service.decrypted_password).to eql('password')
end
context "registration" do
specs_require_sharding
it "should be able to register a UserService, defaulting to a GoogleDocs service" do
@registration = UserService.register(
:user => user_model,
:token => 'some token',
:secret => 'some secret',
:service_user_id => @user.id,
:service_user_name => @user.name,
:service_user_url => 'some url',
:password => 'password'
)
expect(@registration.token).to eql('some token')
expect(@registration.secret).to eql('some secret')
expect(@registration.service_user_id.to_i).to eql(@user.id)
expect(@registration.service_user_name).to eql(@user.name)
expect(@registration.service_user_url).to eql('some url')
expect(@registration.decrypted_password).to eql('password')
expect(@registration.type).to eql('DocumentService')
end
it "should be able to register a delicious service" do
params = {}
params[:service] = 'delicious'
params[:user_name] = 'some username'
params[:password] = 'password'
us = UserService.register_from_params(user_model, params)
expect(us.service_domain).to eql('delicious.com')
expect(us.protocol).to eql('http-auth')
expect(us.service_user_id).to eql('some username')
expect(us.service_user_name).to eql('some username')
expect(us.decrypted_password).to eql('password')
end
it "should be able to register a diigo service" do
params = {}
params[:service] = 'diigo'
params[:user_name] = 'some username'
params[:password] = 'password'
us = UserService.register_from_params(user_model, params)
expect(us.service_domain).to eql('diigo.com')
expect(us.protocol).to eql('http-auth')
expect(us.service_user_id).to eql('some username')
expect(us.service_user_name).to eql('some username')
expect(us.decrypted_password).to eql('password')
end
it 'Should allow user services to be setup cross shard' do
user = User.new
@shard1.activate { user.save! }
@shard2.activate do
@registration = UserService.register(
:user => user,
:token => 'some token',
:secret => 'some secret',
:service_user_id => user.id,
:service_user_name => user.name,
:service_user_url => 'some url',
:password => 'password'
)
expect(@registration.token).to eql('some token')
expect(@registration.secret).to eql('some secret')
expect(@registration.service_user_id.to_i).to eql(user.id)
expect(@registration.service_user_name).to eql(user.name)
expect(@registration.service_user_url).to eql('some url')
expect(@registration.decrypted_password).to eql('password')
expect(@registration.type).to eql('DocumentService')
end
end
it "should not be able to register an unknown service type" do
params = {}
params[:service] = 'some crazy service'
params[:user_name] = 'some username'
params[:password] = 'password'
expect{UserService.register_from_params(user_model, params)}.to raise_error("Unknown Service Type")
end
end
context "service type disambiguation" do
it "should know that google_drive means 'DocumentService" do
expect(UserService.service_type('google_drive')).to eql('DocumentService')
end
it "should know that diigo means BookmarkService" do
expect(UserService.service_type('diigo')).to eql('BookmarkService')
end
it "should know that delicious means BookmarkService" do
expect(UserService.service_type('delicious')).to eql('BookmarkService')
end
it "should use other things as a generic UserService" do
expect(UserService.service_type('anything else')).to eql('UserService')
end
end
context "password" do
it "should decrypt the password to the original value" do
s = UserService.new
s.password = "asdf"
expect(s.decrypted_password).to eql("asdf")
s.password = "2t87aot72gho8a37gh4g[awg'waegawe-,v-3o7fya23oya2o3"
expect(s.decrypted_password).to eql("2t87aot72gho8a37gh4g[awg'waegawe-,v-3o7fya23oya2o3")
end
end
end