ginjo-omniauth-slack 2.4.1 → 2.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.gitignore +6 -5
- data/.rdoc_options +33 -0
- data/.yardopts +14 -0
- data/CHANGELOG.md +18 -1
- data/Gemfile +5 -1
- data/README.md +498 -169
- data/Rakefile +1 -0
- data/lib/omniauth-slack/debug.rb +57 -0
- data/lib/omniauth-slack/oauth2/access_token.rb +382 -0
- data/lib/omniauth-slack/oauth2/client.rb +95 -0
- data/lib/omniauth-slack/omniauth/auth_hash.rb +10 -0
- data/lib/omniauth-slack/refinements.rb +68 -0
- data/lib/omniauth-slack/slack.rb +121 -0
- data/lib/omniauth-slack/version.rb +1 -1
- data/lib/omniauth/strategies/slack.rb +212 -343
- data/test/access_token_test.rb +123 -0
- data/test/helper.rb +40 -5
- data/test/refinements_test.rb +83 -0
- data/test/strategy_test.rb +249 -0
- data/test/support/oauth_user_token_response_v2.json +16 -0
- data/test/support/scope_base.yml +25 -0
- data/test/support/shared_examples.rb +0 -10
- data/test/test.rb +1 -249
- metadata +20 -2
@@ -0,0 +1,123 @@
|
|
1
|
+
require 'helper'
|
2
|
+
|
3
|
+
describe OmniAuth::Slack::OAuth2::AccessToken do
|
4
|
+
def setup
|
5
|
+
@access_token = OmniAuth::Slack::OAuth2::AccessToken.from_hash(
|
6
|
+
OmniAuth::Slack::OAuth2::Client.new('key','secret'),
|
7
|
+
{
|
8
|
+
'ok' => true,
|
9
|
+
'access_token' => 'xoxp-abcdef-123456789',
|
10
|
+
'user' => {'id' => '11', 'name' => 'bill'},
|
11
|
+
'team_id' => 33,
|
12
|
+
'team_name' => 'my team',
|
13
|
+
'scope' => 'users:read'
|
14
|
+
}
|
15
|
+
)
|
16
|
+
|
17
|
+
@at_class = OmniAuth::Slack::OAuth2::AccessToken
|
18
|
+
|
19
|
+
@scope_base = YAML.load_file(File.join(File.dirname(__FILE__), 'support/scope_base.yml'))
|
20
|
+
end
|
21
|
+
|
22
|
+
it 'defines getter methods for basic user data' do
|
23
|
+
assert_equal 'users:read', @access_token.scope
|
24
|
+
assert_equal 33, @access_token.team_id
|
25
|
+
assert_equal 'my team', @access_token.team_name
|
26
|
+
end
|
27
|
+
|
28
|
+
describe 'user_id' do
|
29
|
+
it "gets data from params['user'].to_h['id']" do
|
30
|
+
assert_equal '11', @access_token.user_id
|
31
|
+
end
|
32
|
+
|
33
|
+
it "gets data from params['user_id']" do
|
34
|
+
@access_token.params.replace({'user_id' => 'user-id-01'})
|
35
|
+
assert_equal 'user-id-01', @access_token.user_id
|
36
|
+
end
|
37
|
+
|
38
|
+
it "gets data from params['authorizing_user'].to_h['user_id']" do
|
39
|
+
@access_token.params.replace({'authorizing_user' => {'user_id' => 'user-id-02'}})
|
40
|
+
assert_equal 'user-id-02', @access_token.user_id
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
describe 'ok?' do
|
45
|
+
it 'returns true or false' do
|
46
|
+
assert_equal true, @access_token.ok?
|
47
|
+
@access_token.params['ok'] = 'false'
|
48
|
+
assert_equal false, @access_token.ok?
|
49
|
+
@access_token.params['ok'] = nil
|
50
|
+
assert_equal false, @access_token.ok?
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
describe 'token_type?' do
|
55
|
+
it 'compares token_type with any number of arguments and returns true if any match' do
|
56
|
+
assert_equal true, @access_token.token_type?('user')
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
describe 'uid' do
|
61
|
+
it 'gets concatenated user_id-team_id' do
|
62
|
+
assert_equal '11-33', @access_token.uid
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
describe 'all_scopes' do
|
67
|
+
it 'retrieves compiled hash of all scopes currently visible on token' do
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
describe 'has_scope?' do
|
72
|
+
it 'passes array of classic scopes to class-level has_scope?' do
|
73
|
+
assert_equal true, @access_token.has_scope?('identify', 'channels:read', 'boblobla', base:@scope_base)
|
74
|
+
end
|
75
|
+
|
76
|
+
it 'passes string of classic scopes to class-level has_scope?' do
|
77
|
+
assert_equal true, @access_token.has_scope?('identify channels:read boblobla', base:@scope_base)
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
describe 'self.has_scope?' do
|
82
|
+
it 'accepts a string of classic scopes to be matched against base-scopes containing :classic key' do
|
83
|
+
assert_equal true, @at_class.has_scope?(scope_query:'identify channels:read chat:write:bot users.profile:read', scope_base:@scope_base)
|
84
|
+
end
|
85
|
+
|
86
|
+
it 'accepts an array of classic scopes to be matched against base-scopes containing :classic key' do
|
87
|
+
assert_equal true, @at_class.has_scope?(scope_query:['identify','channels:read','chat:write:bot','users.profile:read'], scope_base:@scope_base)
|
88
|
+
end
|
89
|
+
|
90
|
+
it 'accepts a scope_query hash' do
|
91
|
+
assert_equal true, @at_class.has_scope?(scope_query:{channel:'channels:read im:read', group:'chat:write'}, scope_base:@scope_base)
|
92
|
+
end
|
93
|
+
|
94
|
+
it 'accepts an array of scope_query hashes' do
|
95
|
+
assert_equal true, @at_class.has_scope?(scope_query:[{channel:'channels:read im:read', group:'chat:write'}, {app_home:'chat:write'}], scope_base:@scope_base)
|
96
|
+
end
|
97
|
+
|
98
|
+
it 'accepts a scope_query hash with array of string values' do
|
99
|
+
assert_equal true, @at_class.has_scope?(scope_query:{channel: %w(channels:read im:read chat:write)}, scope_base:@scope_base)
|
100
|
+
end
|
101
|
+
|
102
|
+
it "accepts a :logic param to switch to 'and' (all) logic from 'or' (any) logic" do
|
103
|
+
assert_equal false, @at_class.has_scope?(scope_query:{channel:'channels:read im:read', group:'chat:write'}, scope_base:@scope_base, logic:'and')
|
104
|
+
assert_equal true, @at_class.has_scope?(scope_query:{channel:'channels:read im:read', group:'chat:write'}, scope_base:@scope_base, logic:'or')
|
105
|
+
assert_equal false, @at_class.has_scope?(scope_query:{channel:'im:read'}, scope_base:@scope_base)
|
106
|
+
end
|
107
|
+
|
108
|
+
it "given 'or' logic, must match at least one scope from given scope_query hash" do
|
109
|
+
assert_equal true, @at_class.has_scope?(scope_query:{channel:'channels:read im:read', group:'chat:wrong'}, scope_base:@scope_base, logic:'or')
|
110
|
+
assert_equal false, @at_class.has_scope?(scope_query:{channel:'chappels:read im:read', group:'chat:wrong'}, scope_base:@scope_base, logic:'or')
|
111
|
+
end
|
112
|
+
|
113
|
+
it "given 'and' logic, must match all scopes from given scope_query hash" do
|
114
|
+
assert_equal true, @at_class.has_scope?(scope_query:{channel:'channels:read channels:history', group:'chat:write'}, scope_base:@scope_base, logic:'and')
|
115
|
+
assert_equal false, @at_class.has_scope?(scope_query:{channel:'channels:read channels:history', group:'chat:write', team:'users:read'}, scope_base:@scope_base, logic:'and')
|
116
|
+
end
|
117
|
+
|
118
|
+
it "logic for array of query hashes is opposite of logic for query-hash" do
|
119
|
+
assert_equal true, @at_class.has_scope?(scope_query:[{channel:'channels:read im:read'}, {group:'chat:write'}], scope_base:@scope_base, logic:'and')
|
120
|
+
assert_equal false, @at_class.has_scope?(scope_query:[{channel:'channels:read im:read'}, {group:'chat:wrong chat:still.wrong'}], scope_base:@scope_base, logic:'or')
|
121
|
+
end
|
122
|
+
end
|
123
|
+
end
|
data/test/helper.rb
CHANGED
@@ -1,9 +1,32 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
1
|
+
# Run all tests with
|
2
|
+
# ruby -I./test test/test.rb
|
3
|
+
# or
|
4
|
+
# rake test
|
5
|
+
# or run specific tests
|
6
|
+
# ruby -I./test test/refinements_test.rb
|
7
|
+
#
|
8
|
+
$LOAD_PATH.unshift File.expand_path('../../lib', __FILE__)
|
9
|
+
$LOAD_PATH.unshift File.expand_path('../support', __FILE__)
|
10
|
+
|
11
|
+
# Is specific require-bundler-setup needed?
|
12
|
+
#require 'bundler/setup'
|
13
|
+
|
14
|
+
require 'minitest/autorun'
|
15
|
+
# Must load after minitest-autorun.
|
16
|
+
require 'mocha/setup'
|
17
|
+
|
18
|
+
# Is explicit require-oauth2 still needed?
|
19
|
+
require 'oauth2'
|
20
|
+
require 'omniauth-slack'
|
21
|
+
|
22
|
+
# See below for require 'shared_examples' (needs to load after helpers).
|
23
|
+
#require 'shared_examples'
|
24
|
+
|
25
|
+
|
5
26
|
|
6
27
|
OmniAuth.config.test_mode = true
|
28
|
+
OmniAuth.logger.level = 1
|
29
|
+
ENV['OMNIAUTH_SLACK_DEBUG']='false'
|
7
30
|
|
8
31
|
module BlockTestHelper
|
9
32
|
def test(name, &blk)
|
@@ -54,5 +77,17 @@ class StrategyTestCase < TestCase
|
|
54
77
|
end
|
55
78
|
end
|
56
79
|
|
57
|
-
|
80
|
+
|
81
|
+
## This needs to load after helpers.
|
82
|
+
require 'shared_examples'
|
83
|
+
|
84
|
+
|
85
|
+
## These are not used here anymore.
|
86
|
+
|
87
|
+
# Dir[File.expand_path("../support/**/*", __FILE__)].each(&method(:require))
|
88
|
+
|
89
|
+
# Dir[File.join("../", 'test', '*.rb')].each {|file| require file }
|
90
|
+
|
91
|
+
#require_relative 'support/shared_examples.rb'
|
92
|
+
#Dir[File.expand_path("../**/*.rb", __FILE__)].each(&method(:require))
|
58
93
|
|
@@ -0,0 +1,83 @@
|
|
1
|
+
require 'helper'
|
2
|
+
|
3
|
+
#class TestObjectRefinements
|
4
|
+
class TestCallerMethodName
|
5
|
+
#using OmniAuth::Slack::ObjectRefinements
|
6
|
+
include OmniAuth::Slack::CallerMethodName
|
7
|
+
|
8
|
+
def test_caller_method_name_outter
|
9
|
+
test_caller_method_name_middle
|
10
|
+
end
|
11
|
+
|
12
|
+
def test_caller_method_name_middle
|
13
|
+
test_caller_method_name_inner
|
14
|
+
end
|
15
|
+
|
16
|
+
def test_caller_method_name_inner
|
17
|
+
caller_method_name
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
# describe OmniAuth::Slack::ObjectRefinements do
|
22
|
+
# using OmniAuth::Slack::ObjectRefinements
|
23
|
+
#
|
24
|
+
# describe 'caller_method_name' do
|
25
|
+
# instance = TestObjectRefinements.new
|
26
|
+
# it "gets the name of the method that called the current method" do
|
27
|
+
# assert_equal 'test_caller_method_name_middle', instance.test_caller_method_name_outter
|
28
|
+
# end
|
29
|
+
# end
|
30
|
+
# end
|
31
|
+
|
32
|
+
describe OmniAuth::Slack::CallerMethodName do
|
33
|
+
#using OmniAuth::Slack::ObjectRefinements
|
34
|
+
|
35
|
+
describe 'caller_method_name' do
|
36
|
+
instance = TestCallerMethodName.new
|
37
|
+
it "gets the name of the method that called the current method" do
|
38
|
+
assert_equal 'test_caller_method_name_middle', instance.test_caller_method_name_outter
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
describe OmniAuth::Slack::ArrayRefinements do
|
44
|
+
using OmniAuth::Slack::ArrayRefinements
|
45
|
+
|
46
|
+
describe 'sort_with' do
|
47
|
+
it 'sorts one array according the order of another array' do
|
48
|
+
assert_equal [5,2,2,"three","three",1,:four,:four], [1,2,"three",:four,5,:four,2,"three"].sort_with([5,2,"three",1,:four])
|
49
|
+
end
|
50
|
+
|
51
|
+
it 'takes an argument for :beginning or :ending to specify where to put un-matched source items' do
|
52
|
+
assert_equal [:c, :d, :b, :e, :a], [:a, :b, :c, :d, :e].sort_with([:b, :e, :a], :beginning)
|
53
|
+
assert_equal [:b, :e, :a, :c, :d], [:a, :b, :c, :d, :e].sort_with([:b, :e, :a], :ending)
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
describe OmniAuth::Slack::OAuth2Refinements do
|
59
|
+
using OmniAuth::Slack::OAuth2Refinements
|
60
|
+
|
61
|
+
describe OAuth2::Response do
|
62
|
+
describe 'to_auth_hash' do
|
63
|
+
it 'returns parsed response as OmniAuth::Slack::AuthHash' do
|
64
|
+
resp = OAuth2::Response.new(a:'data')
|
65
|
+
resp.stubs(:parsed).returns({a:'data'})
|
66
|
+
assert_kind_of OmniAuth::Slack::AuthHash, resp.to_auth_hash
|
67
|
+
assert_equal({a:'data'}[:a], resp.to_auth_hash.a)
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
describe OmniAuth::Slack::StringRefinements do
|
74
|
+
using OmniAuth::Slack::StringRefinements
|
75
|
+
|
76
|
+
describe 'words' do
|
77
|
+
it 'splits string into array of words based on white-space or commas' do
|
78
|
+
assert_equal('scope:one,scope.two scope.three ,scope@four, ,scope-five scope_six,,,scope/seven , scope#eight'.words,
|
79
|
+
["scope:one", "scope.two", "scope.three", "scope@four", "scope-five", "scope_six", "scope/seven", "scope#eight"]
|
80
|
+
)
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
@@ -0,0 +1,249 @@
|
|
1
|
+
require 'helper'
|
2
|
+
|
3
|
+
class StrategyTest < StrategyTestCase
|
4
|
+
include OAuth2StrategyTests
|
5
|
+
|
6
|
+
test 'uses custom AuthHash subclass for auth_hash object' do
|
7
|
+
::OmniAuth::Strategy.class_eval do
|
8
|
+
def auth_hash; {a:1, b:2}; end
|
9
|
+
end
|
10
|
+
assert_equal true, strategy.auth_hash.is_a?(OmniAuth::Slack::AuthHash)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
class ClientTest < StrategyTestCase
|
15
|
+
test "has correct Slack site" do
|
16
|
+
assert_equal "https://slack.com", strategy.client.site
|
17
|
+
end
|
18
|
+
|
19
|
+
test "has correct authorize url" do
|
20
|
+
assert_equal "/oauth/v2/authorize", strategy.client.instance_eval{
|
21
|
+
options[:authorize_url].is_a?(Proc) ? instance_eval(&options[:authorize_url]) : options[:authorize_url]
|
22
|
+
}
|
23
|
+
end
|
24
|
+
|
25
|
+
test "has correct token url" do
|
26
|
+
assert_equal "/api/oauth.v2.access", strategy.client.instance_eval{
|
27
|
+
options[:token_url].is_a?(Proc) ? instance_eval(&options[:token_url]) : options[:token_url]
|
28
|
+
}
|
29
|
+
end
|
30
|
+
|
31
|
+
test "has correct auth_scheme" do
|
32
|
+
assert_equal :basic_auth, strategy.client.options[:auth_scheme]
|
33
|
+
end
|
34
|
+
|
35
|
+
test 'request logs api call' do
|
36
|
+
# We need to manually stub the base #request method,
|
37
|
+
# since we're testing the override in the subclassed Client.
|
38
|
+
::OAuth2::Client.class_eval do
|
39
|
+
def request(*args)
|
40
|
+
{'simple' => 'hash'}
|
41
|
+
end
|
42
|
+
end
|
43
|
+
@client = strategy.client
|
44
|
+
OmniAuth.logger.expects(:debug).with(){|*params| assert_match(/http:\/\/host\/api\/test.action/, params[0])}
|
45
|
+
@client.request(:get, 'http://host/api/test.action')
|
46
|
+
end
|
47
|
+
|
48
|
+
test 'request adds api response to @history array' do
|
49
|
+
# We need to manually stub the base #request method,
|
50
|
+
# since we're testing the override in the subclassed Client.
|
51
|
+
::OAuth2::Client.class_eval do
|
52
|
+
def request(*args)
|
53
|
+
{'simple' => 'hash'}
|
54
|
+
end
|
55
|
+
end
|
56
|
+
@client = strategy.client
|
57
|
+
@client.history = []
|
58
|
+
@client.request(:get, 'http://host/api/test.action')
|
59
|
+
#assert_equal( {'test.action' => {'simple' => 'hash'}}, @client.history )
|
60
|
+
#assert_equal( {'test.action' => {'simple' => 'hash'}}, strategy.send(:raw_info) )
|
61
|
+
assert_equal( {'api_call' => 'test.action', 'response' => {'simple' => 'hash'}}, @client.history[0].to_h.tap{|r| r.delete('time')} )
|
62
|
+
|
63
|
+
end
|
64
|
+
|
65
|
+
test "transfers team_domain from strategy options to client.site uri" do
|
66
|
+
@options = { :team_domain => 'subdomain' }
|
67
|
+
assert_equal "https://subdomain.slack.com", strategy.client.site
|
68
|
+
end
|
69
|
+
|
70
|
+
test "transfers team_domain from request.params to client.site uri" do
|
71
|
+
@options = {pass_through_params: 'team_domain' }
|
72
|
+
@request.stubs(:params).returns({ 'team_domain' => 'subdomain2' })
|
73
|
+
assert_equal "https://subdomain2.slack.com", strategy.client.site
|
74
|
+
end
|
75
|
+
|
76
|
+
test "transfers history option from strategy client_options to client.history" do
|
77
|
+
@options = { :client_options => {history:[5]} }
|
78
|
+
assert_equal [5], strategy.client.history
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
class CallbackUrlTest < StrategyTestCase
|
83
|
+
test "returns the default callback url" do
|
84
|
+
url_base = "http://auth.request.com"
|
85
|
+
@request.stubs(:url).returns("#{url_base}/some/page")
|
86
|
+
strategy.stubs(:script_name).returns("") # as not to depend on Rack env
|
87
|
+
assert_equal "#{url_base}/auth/slack/callback", strategy.callback_url
|
88
|
+
end
|
89
|
+
|
90
|
+
test "returns path from callback_path option" do
|
91
|
+
@options = { :callback_path => "/auth/slack/done"}
|
92
|
+
url_base = "http://auth.request.com"
|
93
|
+
@request.stubs(:url).returns("#{url_base}/page/path")
|
94
|
+
strategy.stubs(:script_name).returns("") # as not to depend on Rack env
|
95
|
+
assert_equal "#{url_base}/auth/slack/done", strategy.callback_url
|
96
|
+
end
|
97
|
+
end
|
98
|
+
|
99
|
+
class UidTest < StrategyTestCase
|
100
|
+
def setup
|
101
|
+
super
|
102
|
+
@access_token = stub("OmniAuth::Slack::OAuth2::AccessToken")
|
103
|
+
#@access_token.stubs(:user_id).returns('U123')
|
104
|
+
#@access_token.stubs(:team_id).returns('T456')
|
105
|
+
strategy.stubs(:access_token).returns(@access_token)
|
106
|
+
end
|
107
|
+
|
108
|
+
test "returns the uid from access_token" do
|
109
|
+
@access_token.stubs(:uid).returns("U123-T456")
|
110
|
+
assert_equal "U123-T456", strategy.uid
|
111
|
+
end
|
112
|
+
end
|
113
|
+
|
114
|
+
class CredentialsTest < StrategyTestCase
|
115
|
+
def setup
|
116
|
+
super
|
117
|
+
@access_token = stub("OmniAuth::Slack::OAuth2::AccessToken")
|
118
|
+
@access_token.stubs(:token)
|
119
|
+
@access_token.stubs(:token_type)
|
120
|
+
@access_token.stubs(:expires?)
|
121
|
+
@access_token.stubs(:expires_at)
|
122
|
+
@access_token.stubs(:refresh_token)
|
123
|
+
@access_token.stubs(:[])
|
124
|
+
@access_token.stubs(:params)
|
125
|
+
@access_token.stubs(:is_app_token?)
|
126
|
+
@access_token.stubs(:scope)
|
127
|
+
@access_token.stubs(:scopes)
|
128
|
+
@access_token.stubs(:all_scopes)
|
129
|
+
@access_token.stubs(:user_token)
|
130
|
+
strategy.stubs(:access_token).returns(@access_token)
|
131
|
+
end
|
132
|
+
|
133
|
+
test "returns a Hash" do
|
134
|
+
assert_kind_of Hash, strategy.credentials
|
135
|
+
end
|
136
|
+
|
137
|
+
test "returns the token" do
|
138
|
+
@access_token.stubs(:token).returns("123")
|
139
|
+
assert_equal "123", strategy.credentials["token"]
|
140
|
+
end
|
141
|
+
|
142
|
+
test "returns the token_type" do
|
143
|
+
@access_token.stubs(:token_type).returns('bot')
|
144
|
+
assert_equal 'bot', strategy.credentials[:token_type]
|
145
|
+
end
|
146
|
+
|
147
|
+
test "returns the expiry status" do
|
148
|
+
@access_token.stubs(:expires?).returns(true)
|
149
|
+
assert strategy.credentials["expires"]
|
150
|
+
|
151
|
+
@access_token.stubs(:expires?).returns(false)
|
152
|
+
refute strategy.credentials["expires"]
|
153
|
+
end
|
154
|
+
|
155
|
+
test "returns the refresh token and expiry time when expiring" do
|
156
|
+
ten_mins_from_now = (Time.now + 600).to_i
|
157
|
+
@access_token.stubs(:expires?).returns(true)
|
158
|
+
@access_token.stubs(:refresh_token).returns("321")
|
159
|
+
@access_token.stubs(:expires_at).returns(ten_mins_from_now)
|
160
|
+
assert_equal "321", strategy.credentials["refresh_token"]
|
161
|
+
assert_equal ten_mins_from_now, strategy.credentials["expires_at"]
|
162
|
+
end
|
163
|
+
|
164
|
+
test "does not return the refresh token when test is nil and expiring" do
|
165
|
+
@access_token.stubs(:expires?).returns(true)
|
166
|
+
@access_token.stubs(:refresh_token).returns(nil)
|
167
|
+
assert_nil strategy.credentials["refresh_token"]
|
168
|
+
refute_has_key "refresh_token", strategy.credentials
|
169
|
+
end
|
170
|
+
|
171
|
+
test "does not return the refresh token when not expiring" do
|
172
|
+
@access_token.stubs(:expires?).returns(false)
|
173
|
+
@access_token.stubs(:refresh_token).returns("XXX")
|
174
|
+
assert_nil strategy.credentials["refresh_token"]
|
175
|
+
refute_has_key "refresh_token", strategy.credentials
|
176
|
+
end
|
177
|
+
end
|
178
|
+
|
179
|
+
# This test is no longer relevant, but if modified, it might still be useful.
|
180
|
+
#
|
181
|
+
# class SkipInfoTest < StrategyTestCase
|
182
|
+
#
|
183
|
+
# test 'info should not include extended info when skip_info is specified' do
|
184
|
+
# @access_token = stub_everything("OmniAuth::Slack::OAuth2::AccessToken")
|
185
|
+
# @options = { skip_info: true }
|
186
|
+
# strategy.stubs(:access_token).returns(@access_token)
|
187
|
+
# assert_equal %w(name email user_id team_name team_id image), strategy.info.keys.map(&:to_s)
|
188
|
+
# end
|
189
|
+
#
|
190
|
+
# end
|
191
|
+
|
192
|
+
class AuthorizeParamsTest < StrategyTestCase
|
193
|
+
|
194
|
+
test 'returns OmniAuth::Strategy::Options hash' do
|
195
|
+
assert_kind_of OmniAuth::Strategy::Options, strategy.authorize_params
|
196
|
+
end
|
197
|
+
|
198
|
+
test 'forwards oauth request params (redirect_uri scope team) to slack' do
|
199
|
+
@options = {pass_through_params: %w(redirect_uri scope team)}
|
200
|
+
strategy.request.params['scope'] = 'test-scope'
|
201
|
+
strategy.request.params['team'] = 'test-team'
|
202
|
+
strategy.request.params['redirect_uri'] = 'http://my-test-uri/auth/callback'
|
203
|
+
assert_equal 'test-scope', strategy.authorize_params['scope']
|
204
|
+
assert_equal 'test-team', strategy.authorize_params['team']
|
205
|
+
assert_equal 'http://my-test-uri/auth/callback', strategy.authorize_params['redirect_uri']
|
206
|
+
end
|
207
|
+
|
208
|
+
end
|
209
|
+
|
210
|
+
# class InitializeTest < StrategyTestCase
|
211
|
+
# end
|
212
|
+
|
213
|
+
class CallbackPhaseTest < StrategyTestCase
|
214
|
+
def setup
|
215
|
+
super
|
216
|
+
strategy.stubs(:session).returns({'omniauth.authorize_params'=>{'team'=>'ABC123'}})
|
217
|
+
strategy.stubs(:env).returns({})
|
218
|
+
# Without this, OAuth2#callback_phase fails during these tests with csrf detected.
|
219
|
+
strategy.stubs('fail!').returns(true)
|
220
|
+
end
|
221
|
+
|
222
|
+
test "sets env['omniauth.authorize_params'] with session['omniauth.authorize_params']" do
|
223
|
+
strategy.callback_phase
|
224
|
+
assert_equal( {'team'=>'ABC123'}, strategy.env['omniauth.authorize_params'] )
|
225
|
+
end
|
226
|
+
end
|
227
|
+
|
228
|
+
class PassThroughParamsTest < StrategyTestCase
|
229
|
+
test 'returns all AUTH_OPTIONS when given :all' do
|
230
|
+
strategy.options.pass_through_params = :all
|
231
|
+
assert_equal strategy.class::AUTH_OPTIONS, strategy.send(:pass_through_params)
|
232
|
+
end
|
233
|
+
|
234
|
+
test 'returns empty array when given :none' do
|
235
|
+
strategy.options.pass_through_params = :none
|
236
|
+
assert_equal [], strategy.send(:pass_through_params)
|
237
|
+
end
|
238
|
+
|
239
|
+
test "returns empty array when given nil" do
|
240
|
+
strategy.options.pass_through_params = nil
|
241
|
+
assert_equal [], strategy.send(:pass_through_params)
|
242
|
+
end
|
243
|
+
|
244
|
+
test "returns specific items when given specific items" do
|
245
|
+
strategy.options.pass_through_params = %w(scope team_domain)
|
246
|
+
assert_equal %w(scope team_domain), strategy.send(:pass_through_params)
|
247
|
+
end
|
248
|
+
end
|
249
|
+
|