-
Notifications
You must be signed in to change notification settings - Fork 302
/
oauth_client_test.rb
163 lines (127 loc) · 5.45 KB
/
oauth_client_test.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
require File.dirname(__FILE__) + '/test_helper'
class Twurl::OAuthClient::AbstractOAuthClientTest < MiniTest::Unit::TestCase
attr_reader :client, :options
def setup
Twurl::OAuthClient.instance_variable_set(:@rcfile, nil)
@options = Twurl::Options.test_exemplar
@client = Twurl::OAuthClient.test_exemplar
options.base_url = 'api.twitter.com'
options.request_method = 'get'
options.path = '/path/does/not/matter.xml'
options.data = {}
options.headers = {}
Twurl.options = options
end
def teardown
super
Twurl.options = Twurl::Options.new
# Make sure we don't do any disk IO in these tests
assert !File.exists?(Twurl::RCFile.file_path)
end
def test_nothing
# Appeasing test/unit
end
end
class Twurl::OAuthClient::BasicRCFileLoadingTest < Twurl::OAuthClient::AbstractOAuthClientTest
def test_rcfile_is_memoized
mock.proxy(Twurl::RCFile).new.times(1)
Twurl::OAuthClient.rcfile
Twurl::OAuthClient.rcfile
end
def test_forced_reloading
mock.proxy(Twurl::RCFile).new.times(2)
Twurl::OAuthClient.rcfile
Twurl::OAuthClient.rcfile(:reload)
Twurl::OAuthClient.rcfile
end
end
class Twurl::OAuthClient::ClientLoadingFromOptionsTest < Twurl::OAuthClient::AbstractOAuthClientTest
def test_if_username_is_supplied_and_no_profile_exists_for_username_then_new_client_is_created
mock(Twurl::OAuthClient).load_client_for_username(options.username).never
mock(Twurl::OAuthClient).load_new_client_from_options(options).times(1)
mock(Twurl::OAuthClient).load_default_client.never
Twurl::OAuthClient.load_from_options(options)
end
def test_if_username_is_supplied_and_profile_exists_for_username_then_client_is_loaded
mock(Twurl::OAuthClient.rcfile).save.times(1)
Twurl::OAuthClient.rcfile << client
mock(Twurl::OAuthClient).load_client_for_username_and_consumer_key(options.username, options.consumer_key).times(1)
mock(Twurl::OAuthClient).load_new_client_from_options(options).never
mock(Twurl::OAuthClient).load_default_client.never
Twurl::OAuthClient.load_from_options(options)
end
def test_if_username_is_not_provided_then_the_default_client_is_loaded
options.username = nil
mock(Twurl::OAuthClient).load_client_for_username(options.username).never
mock(Twurl::OAuthClient).load_new_client_from_options(options).never
mock(Twurl::OAuthClient).load_default_client.times(1)
Twurl::OAuthClient.load_from_options(options)
end
end
class Twurl::OAuthClient::ClientLoadingForUsernameTest < Twurl::OAuthClient::AbstractOAuthClientTest
def test_attempting_to_load_a_username_that_is_not_in_the_file_fails
assert_nil Twurl::OAuthClient.rcfile[client.username]
assert_raises Twurl::Exception do
Twurl::OAuthClient.load_client_for_username_and_consumer_key(client.username, client.consumer_key)
end
end
def test_loading_a_username_that_exists
mock(Twurl::OAuthClient.rcfile).save.times(1)
Twurl::OAuthClient.rcfile << client
client_from_file = Twurl::OAuthClient.load_client_for_username_and_consumer_key(client.username, client.consumer_key)
assert_equal client.to_hash, client_from_file.to_hash
end
end
class Twurl::OAuthClient::DefaultClientLoadingTest < Twurl::OAuthClient::AbstractOAuthClientTest
def test_loading_default_client_when_there_is_none_fails
assert_nil Twurl::OAuthClient.rcfile.default_profile
assert_raises Twurl::Exception do
Twurl::OAuthClient.load_default_client
end
end
def test_loading_default_client_from_file
mock(Twurl::OAuthClient.rcfile).save.times(1)
Twurl::OAuthClient.rcfile << client
assert_equal [client.username, client.consumer_key], Twurl::OAuthClient.rcfile.default_profile
client_from_file = Twurl::OAuthClient.load_default_client
assert_equal client.to_hash, client_from_file.to_hash
end
end
class Twurl::OAuthClient::NewClientLoadingFromOptionsTest < Twurl::OAuthClient::AbstractOAuthClientTest
attr_reader :new_client
def setup
super
@new_client = Twurl::OAuthClient.load_new_client_from_options(options)
end
def test_password_is_included
assert_equal options.password, new_client.password
end
def test_oauth_options_are_passed_through
assert_equal client.to_hash, new_client.to_hash
end
end
class Twurl::OAuthClient::PerformingRequestsFromOptionsTest < Twurl::OAuthClient::AbstractOAuthClientTest
def test_request_is_made_using_request_method_and_path_and_data_in_options
client = Twurl::OAuthClient.test_exemplar
mock(client).get(options.path, options.data)
client.perform_request_from_options(options)
end
end
class Twurl::OAuthClient::CredentialsForAccessTokenExchangeTest < Twurl::OAuthClient::AbstractOAuthClientTest
def test_successful_exchange_parses_token_and_secret_from_response_body
parsed_response = {:oauth_token => "123456789",
:oauth_token_secret => "abcdefghi",
:user_id => "3191321",
:screen_name => "noradio",
:x_auth_expires => "0"}
mock(client.consumer).
token_request(:post,
client.consumer.access_token_path,
nil,
{},
client.client_auth_parameters) { parsed_response }
assert client.needs_to_authorize?
client.exchange_credentials_for_access_token
assert !client.needs_to_authorize?
end
end