yammer-client 0.1.2 → 0.1.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (61) hide show
  1. data.tar.gz.sig +0 -0
  2. data/.travis.yml +1 -0
  3. data/CHANGELOG.md +22 -0
  4. data/Gemfile +1 -1
  5. data/Gemfile.lock +3 -4
  6. data/README.md +11 -10
  7. data/file.txt +1 -0
  8. data/lib/yammer.rb +7 -11
  9. data/lib/yammer/api.rb +2 -1
  10. data/lib/yammer/api/autocomplete.rb +1 -1
  11. data/lib/yammer/api/group.rb +5 -5
  12. data/lib/yammer/api/group_membership.rb +2 -2
  13. data/lib/yammer/api/message.rb +13 -13
  14. data/lib/yammer/api/network.rb +1 -1
  15. data/lib/yammer/api/notification.rb +1 -1
  16. data/lib/yammer/api/pending_attachment.rb +48 -0
  17. data/lib/yammer/api/search.rb +1 -1
  18. data/lib/yammer/api/topic.rb +1 -1
  19. data/lib/yammer/api/user.rb +17 -17
  20. data/lib/yammer/api_handler.rb +15 -0
  21. data/lib/yammer/{response.rb → api_response.rb} +6 -6
  22. data/lib/yammer/base.rb +19 -11
  23. data/lib/yammer/client.rb +27 -42
  24. data/lib/yammer/configurable.rb +14 -8
  25. data/lib/yammer/group.rb +1 -1
  26. data/lib/yammer/group_membership.rb +1 -1
  27. data/lib/yammer/http_adapter.rb +74 -0
  28. data/lib/yammer/message.rb +1 -1
  29. data/lib/yammer/thread.rb +1 -1
  30. data/lib/yammer/user.rb +6 -6
  31. data/lib/yammer/version.rb +1 -1
  32. data/spec/api/autocomplete_spec.rb +1 -2
  33. data/spec/api/group_membership_spec.rb +1 -2
  34. data/spec/api/group_spec.rb +1 -2
  35. data/spec/api/message_spec.rb +1 -2
  36. data/spec/api/network_spec.rb +1 -2
  37. data/spec/api/notification_spec.rb +3 -4
  38. data/spec/api/pending_attachment_spec.rb +37 -0
  39. data/spec/api/search_spec.rb +1 -2
  40. data/spec/api/thread_spec.rb +1 -2
  41. data/spec/api/topic_spec.rb +1 -2
  42. data/spec/api/user_spec.rb +15 -2
  43. data/spec/{response_spec.rb → api_response.rb} +9 -8
  44. data/spec/client_spec.rb +203 -66
  45. data/spec/fixtures/users_followed.json +1 -0
  46. data/spec/fixtures/users_following.json +1 -0
  47. data/spec/http_adapter_spec.rb +90 -0
  48. data/spec/mocks/attachment.txt +1 -0
  49. data/spec/model/base_spec.rb +26 -5
  50. data/spec/model/group_membership_spec.rb +11 -0
  51. data/spec/model/group_spec.rb +10 -0
  52. data/spec/model/message_spec.rb +10 -0
  53. data/spec/model/thread_spec.rb +6 -0
  54. data/spec/model/user_spec.rb +53 -0
  55. data/spec/spec_helper.rb +8 -0
  56. data/yammer.gemspec +3 -1
  57. metadata +35 -10
  58. metadata.gz.sig +0 -0
  59. data/lib/yammer/http_connection.rb +0 -184
  60. data/lib/yammer/model.rb +0 -6
  61. data/spec/connection_spec.rb +0 -306
@@ -10,7 +10,7 @@ module Yammer
10
10
 
11
11
  # @!scope class
12
12
  def self.create(params={})
13
- Yammer.create_message(params)
13
+ api_handler.create_message(params)
14
14
  end
15
15
 
16
16
  end
data/lib/yammer/thread.rb CHANGED
@@ -33,7 +33,7 @@ module Yammer
33
33
 
34
34
  def messages
35
35
  @messages = {}
36
- result = Yammer.messages_in_thread(self.id)
36
+ result = api_handler.messages_in_thread(self.id)
37
37
  msgs = result.body[:messages].each do |message|
38
38
  msg = Yammer::Message.new(message)
39
39
  @messages["#{msg.id}"] = msg
data/lib/yammer/user.rb CHANGED
@@ -3,15 +3,15 @@ module Yammer
3
3
 
4
4
  # @!scope class
5
5
  def self.create(email)
6
- result = Yammer.create_user(:email => email)
6
+ result = api_handler.create_user(:email => email)
7
7
  return nil unless result.created?
8
- id = result.headers['Location'].split('/').last.to_i
8
+ id = result.headers[:location].split('/').last.to_i
9
9
  new(:id => id)
10
10
  end
11
11
 
12
12
  # @!scope class
13
13
  def self.current
14
- result = Yammer.current_user
14
+ result = api_handler.current_user
15
15
  return nil unless result.success?
16
16
  new(result.body)
17
17
  end
@@ -32,15 +32,15 @@ module Yammer
32
32
  end
33
33
 
34
34
  def following
35
- Yammer.users_followed_by(@id)
35
+ api_handler.users_followed_by(@id)
36
36
  end
37
37
 
38
38
  def followers
39
- Yammer.users_following(@id)
39
+ api_handler.users_following(@id)
40
40
  end
41
41
 
42
42
  def update!(params)
43
- Yammer.update_user(@id, params)
43
+ api_handler.update_user(@id, params)
44
44
  end
45
45
  end
46
46
  end
@@ -2,7 +2,7 @@ module Yammer
2
2
  class Version
3
3
  MAJOR = 0 unless defined? Yammer::MAJOR
4
4
  MINOR = 1 unless defined? Yammer::MINOR
5
- PATCH = 2 unless defined? Yammer::PATCH
5
+ PATCH = 3 unless defined? Yammer::PATCH
6
6
  PRE = nil unless defined? Yammer::PRE
7
7
 
8
8
  class << self
@@ -7,8 +7,7 @@ describe Yammer::Api::Autocomplete do
7
7
  :site_url => 'https://www.yammer.com',
8
8
  :client_id => 'PRbTcg9qjgKsp4jjpm1pw',
9
9
  :client_secret => 'Xn7kp7Ly0TCY4GtZWkmSsqGEPg10DmMADyjWkf2U',
10
- :access_token => 'TolNOFka9Uls2DxahNi78A',
11
- :connection_client => Yammer::HttpConnection
10
+ :access_token => 'TolNOFka9Uls2DxahNi78A'
12
11
  )
13
12
  end
14
13
 
@@ -7,8 +7,7 @@ describe Yammer::Api::GroupMembership do
7
7
  :site_url => 'https://www.yammer.com',
8
8
  :client_id => 'PRbTcg9qjgKsp4jjpm1pw',
9
9
  :client_secret => 'Xn7kp7Ly0TCY4GtZWkmSsqGEPg10DmMADyjWkf2U',
10
- :access_token => 'TolNOFka9Uls2DxahNi78A',
11
- :connection_client => Yammer::HttpConnection
10
+ :access_token => 'TolNOFka9Uls2DxahNi78A'
12
11
  )
13
12
  end
14
13
 
@@ -7,8 +7,7 @@ describe Yammer::Api::Group do
7
7
  :site_url => 'https://www.yammer.com',
8
8
  :client_id => 'PRbTcg9qjgKsp4jjpm1pw',
9
9
  :client_secret => 'Xn7kp7Ly0TCY4GtZWkmSsqGEPg10DmMADyjWkf2U',
10
- :access_token => 'TolNOFka9Uls2DxahNi78A',
11
- :connection_client => Yammer::HttpConnection
10
+ :access_token => 'TolNOFka9Uls2DxahNi78A'
12
11
  )
13
12
  end
14
13
 
@@ -7,8 +7,7 @@ describe Yammer::Api::Message do
7
7
  :site_url => 'https://www.yammer.com',
8
8
  :client_id => 'PRbTcg9qjgKsp4jjpm1pw',
9
9
  :client_secret => 'Xn7kp7Ly0TCY4GtZWkmSsqGEPg10DmMADyjWkf2U',
10
- :access_token => 'TolNOFka9Uls2DxahNi78A',
11
- :connection_client => Yammer::HttpConnection
10
+ :access_token => 'TolNOFka9Uls2DxahNi78A'
12
11
  )
13
12
  end
14
13
 
@@ -7,8 +7,7 @@ describe Yammer::Api::Network do
7
7
  :site_url => 'https://www.yammer.com',
8
8
  :client_id => 'PRbTcg9qjgKsp4jjpm1pw',
9
9
  :client_secret => 'Xn7kp7Ly0TCY4GtZWkmSsqGEPg10DmMADyjWkf2U',
10
- :access_token => 'TolNOFka9Uls2DxahNi78A',
11
- :connection_client => Yammer::HttpConnection
10
+ :access_token => 'TolNOFka9Uls2DxahNi78A'
12
11
  )
13
12
  end
14
13
 
@@ -7,15 +7,14 @@ describe Yammer::Api::Notification do
7
7
  :site_url => 'https://www.yammer.com',
8
8
  :client_id => 'PRbTcg9qjgKsp4jjpm1pw',
9
9
  :client_secret => 'Xn7kp7Ly0TCY4GtZWkmSsqGEPg10DmMADyjWkf2U',
10
- :access_token => 'TolNOFka9Uls2DxahNi78A',
11
- :connection_client => Yammer::HttpConnection
10
+ :access_token => 'TolNOFka9Uls2DxahNi78A'
12
11
  )
13
12
  end
14
13
 
15
14
  subject { @client }
16
15
 
17
- describe '#search' do
18
- it 'should search for stuff' do
16
+ describe '#notifications' do
17
+ it "should fetch authenticated user's notifications" do
19
18
  subject.should_receive(:get).with('/api/v1/streams/notifications')
20
19
  subject.notifications
21
20
  end
@@ -0,0 +1,37 @@
1
+ require File.expand_path('../../spec_helper', __FILE__)
2
+
3
+ describe Yammer::Api::PendingAttachment do
4
+
5
+ before :all do
6
+ @client = Yammer::Client.new(
7
+ :site_url => 'https://www.yammer.com',
8
+ :client_id => 'PRbTcg9qjgKsp4jjpm1pw',
9
+ :client_secret => 'Xn7kp7Ly0TCY4GtZWkmSsqGEPg10DmMADyjWkf2U',
10
+ :access_token => 'TolNOFka9Uls2DxahNi78A'
11
+ )
12
+ end
13
+
14
+ subject { @client }
15
+
16
+ describe '#get_pending_attachment' do
17
+ it 'should fetch a pending attachment' do
18
+ subject.should_receive(:get).with('/api/v1/pending_attachments/2')
19
+ subject.get_pending_attachment(2)
20
+ end
21
+ end
22
+
23
+ describe '#delete_pending_attachment' do
24
+ it 'should delete a pending attachment' do
25
+ subject.should_receive(:delete).with('/api/v1/pending_attachments/1')
26
+ subject.delete_pending_attachment(1)
27
+ end
28
+ end
29
+
30
+ describe '#create_pending_attachment' do
31
+ it 'should create a pending attachment' do
32
+ attachment = upload('attachment.txt')
33
+ subject.should_receive(:post).with('/api/v1/pending_attachments', :attachment => attachment)
34
+ subject.create_pending_attachment(attachment)
35
+ end
36
+ end
37
+ end
@@ -7,8 +7,7 @@ describe Yammer::Api::Search do
7
7
  :site_url => 'https://www.yammer.com',
8
8
  :client_id => 'PRbTcg9qjgKsp4jjpm1pw',
9
9
  :client_secret => 'Xn7kp7Ly0TCY4GtZWkmSsqGEPg10DmMADyjWkf2U',
10
- :access_token => 'TolNOFka9Uls2DxahNi78A',
11
- :connection_client => Yammer::HttpConnection
10
+ :access_token => 'TolNOFka9Uls2DxahNi78A'
12
11
  )
13
12
  end
14
13
 
@@ -7,8 +7,7 @@ describe Yammer::Api::Thread do
7
7
  :site_url => 'https://www.yammer.com',
8
8
  :client_id => 'PRbTcg9qjgKsp4jjpm1pw',
9
9
  :client_secret => 'Xn7kp7Ly0TCY4GtZWkmSsqGEPg10DmMADyjWkf2U',
10
- :access_token => 'TolNOFka9Uls2DxahNi78A',
11
- :connection_client => Yammer::HttpConnection
10
+ :access_token => 'TolNOFka9Uls2DxahNi78A'
12
11
  )
13
12
  end
14
13
 
@@ -7,8 +7,7 @@ describe Yammer::Api::Topic do
7
7
  :site_url => 'https://www.yammer.com',
8
8
  :client_id => 'PRbTcg9qjgKsp4jjpm1pw',
9
9
  :client_secret => 'Xn7kp7Ly0TCY4GtZWkmSsqGEPg10DmMADyjWkf2U',
10
- :access_token => 'TolNOFka9Uls2DxahNi78A',
11
- :connection_client => Yammer::HttpConnection
10
+ :access_token => 'TolNOFka9Uls2DxahNi78A'
12
11
  )
13
12
  end
14
13
 
@@ -8,8 +8,7 @@ describe Yammer::Api::User do
8
8
  :site_url => 'https://yammer.com',
9
9
  :client_id => "PRbTcg9qjgKsp4jjpm1pw",
10
10
  :client_secret => "Xn7kp7Ly0TCY4GtZWkmSsqGEPg10DmMADyjWkf2U",
11
- :access_token => "TolNOFka9Uls2DxahNi78A",
12
- :connection_client => Yammer::HttpConnection
11
+ :access_token => "TolNOFka9Uls2DxahNi78A"
13
12
  )
14
13
  end
15
14
 
@@ -73,4 +72,18 @@ describe Yammer::Api::User do
73
72
  @client.current_user
74
73
  end
75
74
  end
75
+
76
+ describe "users_following" do
77
+ it "makes an http request" do
78
+ @client.should_receive(:get).with('/api/v1/users/following/3')
79
+ @client.users_following(3)
80
+ end
81
+ end
82
+
83
+ describe "users_followed_by" do
84
+ it "makes an http request" do
85
+ @client.should_receive(:get).with('/api/v1/users/followed_by/4')
86
+ @client.users_followed_by(4)
87
+ end
88
+ end
76
89
  end
@@ -1,14 +1,15 @@
1
1
  require File.expand_path('../spec_helper', __FILE__)
2
2
  require 'yammer/response'
3
3
 
4
- describe Yammer::Response do
4
+ describe Yammer::ApiResponse do
5
5
 
6
6
  context 'successful response' do
7
- subject { Yammer::Response.new(double(
8
- :header => { 'Location' => 'https://www.yammer.com/api/v1/messages/2' },
9
- :body => '{ "system_message":false, "direct_message":true, "id":10928508, "privacy":"private", "network_id":1 }',
10
- :code => '200')
11
- )}
7
+ subject do
8
+ headers = { 'Location' => 'https://www.yammer.com/api/v1/messages/2' }
9
+ body = '{ "system_message":false, "direct_message":true, "id":10928508, "privacy":"private", "network_id":1 }'
10
+ code = '200'
11
+ Yammer::ApiResponse.new(headers, body, code)
12
+ end
12
13
 
13
14
  describe '#raw_body' do
14
15
  it 'returns a string' do
@@ -37,7 +38,7 @@ describe Yammer::Response do
37
38
 
38
39
  context 'failed response' do
39
40
 
40
- subject { Yammer::Response.new(double( :header => {}, :body => '', :code => '500')) }
41
+ subject { Yammer::ApiResponse.new(double( :headers => {}, :body => '', :code => '500')) }
41
42
 
42
43
  describe '#raw_body' do
43
44
  it 'returns a string' do
@@ -47,7 +48,7 @@ describe Yammer::Response do
47
48
 
48
49
  describe '#body' do
49
50
  it 'return a hash' do
50
- expect(subject.raw_body).to eq('')
51
+ expect(subject.body).to eq('')
51
52
  end
52
53
  end
53
54
 
data/spec/client_spec.rb CHANGED
@@ -2,13 +2,25 @@ require File.expand_path('../spec_helper', __FILE__)
2
2
 
3
3
  describe Yammer::Client do
4
4
 
5
- before :all do
5
+ before :each do
6
6
  @configuration = {
7
7
  :site_url => 'https://www.yammer.com',
8
8
  :client_id => 'PRbTcg9qjgKsp4jjpm1pw',
9
9
  :client_secret => 'Xn7kp7Ly0TCY4GtZWkmSsqGEPg10DmMADyjWkf2U',
10
- :access_token => 'TolNOFka9Uls2DxahNi78A'
10
+ :access_token => 'TolNOFka9Uls2DxahNi78A',
11
+ :connection_options => { :max_redirects => 5, :use_ssl => true },
12
+ :headers => {"Accept"=>"application/json", "User-Agent"=>"Yammer Ruby Gem #{Yammer::Version}"}
11
13
  }
14
+
15
+ Yammer.configure do |config|
16
+ @configuration.each do |key, val|
17
+ config.send("#{key}=", val)
18
+ end
19
+ end
20
+ end
21
+
22
+ after :each do
23
+ Yammer.reset!
12
24
  end
13
25
 
14
26
  subject { Yammer::Client.new(@configuration) }
@@ -16,9 +28,17 @@ describe Yammer::Client do
16
28
  context "with module configuration" do
17
29
 
18
30
  before :each do
31
+ @default_conf = {
32
+ :site_url => nil,
33
+ :client_id => nil,
34
+ :client_secret => nil,
35
+ :access_token => nil,
36
+ :headers => {"Accept"=>"application/json", "User-Agent"=>"Yammer Ruby Gem #{Yammer::Version}"},
37
+ :connection_options => {}
38
+ }
19
39
  Yammer.configure do |config|
20
40
  Yammer::Configurable.keys.each do |key|
21
- config.send("#{key}=", key)
41
+ config.send("#{key}=", @default_conf[key])
22
42
  end
23
43
  end
24
44
  end
@@ -29,8 +49,8 @@ describe Yammer::Client do
29
49
 
30
50
  it "inherits the module configuration" do
31
51
  client = Yammer::Client.new
32
- Yammer::Configurable.keys.each do |key|
33
- expect(client.instance_variable_get(:"@#{key}")).to eq key
52
+ @default_conf.each do |key, value|
53
+ expect(client.instance_variable_get(:"@#{key}")).to eq value
34
54
  end
35
55
  end
36
56
 
@@ -41,7 +61,7 @@ describe Yammer::Client do
41
61
  :client_id => 'PRbTcg9qjgKsp4jjpm1pw',
42
62
  :client_secret => 'Xn7kp7Ly0TCY4GtZWkmSsqGEPg10DmMADyjWkf2U',
43
63
  :access_token => 'TolNOFka9Uls2DxahNi78A',
44
- :http_adapter => Struct.new('CustomHttpAdapter', :site_url, :conn_options),
64
+ :headers => {"Accept"=>"application/json", "User-Agent"=>"Yammer Ruby Gem 0.1.1"},
45
65
  :connection_options => { :max_redirects => 5, :use_ssl => true }
46
66
  }
47
67
  end
@@ -57,6 +77,7 @@ describe Yammer::Client do
57
77
 
58
78
  context "after initialization" do
59
79
  it "overrides the module configuration" do
80
+ Yammer.configure {|c| c.connection_options = {}}
60
81
  client = Yammer::Client.new
61
82
  client.configure do |config|
62
83
  @conf.each do |key, value|
@@ -70,52 +91,188 @@ describe Yammer::Client do
70
91
  end
71
92
  end
72
93
  end
73
-
74
- describe "connection" do
75
- it "looks like an http connection" do
76
- conn = subject.instance_eval{ connection }
77
- expect(conn).to respond_to(:send_request)
78
- end
79
94
 
80
- it "gets memoized" do
81
- c1, c2 = subject.instance_eval{ connection }, subject.instance_eval{ connection }
82
- expect(c1.object_id).to eq c2.object_id
95
+
96
+
97
+ describe "#connection_options" do
98
+ context "with default connection options" do
99
+ it "returns empty hash" do
100
+ expect(subject.connection_options).to eq ({ :max_redirects => 5, :use_ssl => true })
101
+ end
83
102
  end
84
- end
85
103
 
86
- describe "site_url" do
87
- it "returns site_url" do
88
- expect(subject.site_url).to eq 'https://www.yammer.com'
104
+ context "with custom connection options" do
105
+ it "returns default options" do
106
+ subject.connection_options = { :max_redirects => 5, :use_ssl => true }
107
+ expect(subject.connection_options).to eq ({:max_redirects => 5, :use_ssl => true})
108
+ end
89
109
  end
90
110
  end
91
111
 
92
- describe "site_url=" do
93
- before do
94
- subject.site_url = 'elpmaxe.com'
112
+ describe "#request" do
113
+ context "when method is not supported" do
114
+ it "raises an error" do
115
+ expect {subject.send(:request, :patch, '/')}.to raise_error
116
+ end
95
117
  end
96
118
 
97
- it "sets the connection to nil" do
98
- expect(subject.instance_variable_get(:'@connection')).to eq nil
119
+ context "when method is get" do
120
+ it "returns an http response" do
121
+ path = '/oauth/authorize'
122
+ params = {:client_id => '001337', :client_secret => 'abcxyz'}
123
+ method = :get
124
+
125
+ normalized_path = '/oauth/authorize?client_id=001337&client_secret=abcxyz'
126
+
127
+ stub_request(:get, "https://www.yammer.com/oauth/authorize?client_id=001337&client_secret=abcxyz").with(
128
+ :headers => {
129
+ 'Accept'=>'application/json',
130
+ 'User-Agent'=>"Yammer Ruby Gem #{Yammer::Version}"
131
+ })
132
+ response = subject.send(:request, method, path, params)
133
+
134
+ expect(response.code).to eq 200
135
+ end
99
136
  end
100
137
 
101
- it "sets new site_url on client" do
102
- expect(subject.site_url).to eq 'elpmaxe.com'
138
+ context "when method is delete" do
139
+ it "returns an http response" do
140
+ path = '/users/1'
141
+
142
+ stub_request(:delete, "https://www.yammer.com/users/1").with(
143
+ :headers => {
144
+ 'Accept'=>'application/json',
145
+ 'User-Agent'=>"Yammer Ruby Gem #{Yammer::Version}"
146
+ }).to_return(:status => 200, :body => "", :headers => {})
147
+
148
+ response = subject.send(:request, :delete, path)
149
+ expect(response.code).to eq 200
150
+ end
103
151
  end
104
- end
105
152
 
106
- describe "#connection_options" do
107
- context "with default connection options" do
108
- it "returns empty hash" do
109
- expect(subject.connection_options).to eq ({ :max_redirects => 5, :use_ssl => true })
153
+ context "when method is post" do
154
+ it "returns an http response" do
155
+ path = '/users'
156
+ params = {:first_name => 'john', :last_name => 'smith'}
157
+ query = Addressable::URI.form_encode(params)
158
+ headers = {'Content-Type' => 'application/x-www-form-urlencoded' }.merge(subject.headers)
159
+
160
+ stub_request(:post, "https://www.yammer.com/users").with(
161
+ :body => {
162
+ "first_name"=>"john",
163
+ "last_name"=>"smith"
164
+ },
165
+ :headers => {
166
+ 'Accept'=>'application/json',
167
+ 'Content-Type'=>'application/x-www-form-urlencoded',
168
+ 'User-Agent'=>"Yammer Ruby Gem #{Yammer::Version}"
169
+ }).to_return(:status => 200, :body => "", :headers => {})
170
+
171
+ response =subject.send(:request, :post, path, params)
172
+ expect(response.code).to eq 200
110
173
  end
111
174
  end
112
175
 
113
- context "with custom connection options" do
114
- it "returns default options" do
115
- subject.connection_options = { :max_redirects => 5, :use_ssl => true }
116
- expect(subject.connection_options).to eq ({:max_redirects => 5, :use_ssl => true})
176
+ context "when method is put" do
177
+ it "returns an http response" do
178
+ path = '/users/1'
179
+ params = {:first_name => 'jane', :last_name => 'doe'}
180
+ query = Addressable::URI.form_encode(params)
181
+ headers = {'Content-Type' => 'application/x-www-form-urlencoded' }.merge(subject.headers)
182
+
183
+ stub_request(:put, "https://www.yammer.com/users/1").with(
184
+ :body => {
185
+ "first_name" => "jane",
186
+ "last_name" => "doe"
187
+ },
188
+ :headers => {
189
+ 'Accept'=>'application/json',
190
+ 'Content-Type'=>'application/x-www-form-urlencoded',
191
+ 'Authorization'=>'Bearer TolNOFka9Uls2DxahNi78A',
192
+ 'User-Agent'=>"Yammer Ruby Gem #{Yammer::Version}"
193
+ }).
194
+ to_return(:status => 200, :body => "", :headers => {})
195
+
196
+ response = subject.send(:request, :put, path, params)
197
+ expect(response.code).to eq 200
117
198
  end
118
199
  end
200
+
201
+ it "follows redirect" do
202
+ params = {:first_name => 'jane', :last_name => 'doe'}
203
+ stub_request(:post, "https://www.yammer.com/users").with(
204
+ :body => params,
205
+ :headers => {
206
+ 'Accept' =>'application/json',
207
+ 'Accept-Encoding' => 'gzip, deflate',
208
+ 'Content-Type' => 'application/x-www-form-urlencoded',
209
+ 'User-Agent' => "Yammer Ruby Gem #{Yammer::Version}"
210
+ }
211
+ ).to_return(:status => 303, :body => "", :headers => { 'Location' => 'https://www.yammer.com/members'})
212
+
213
+ stub_request(:get, "https://www.yammer.com/members").
214
+ with(:headers => {'Accept'=>'application/json', 'Accept-Encoding'=>'gzip, deflate', 'User-Agent'=>"Yammer Ruby Gem #{Yammer::Version}"}).
215
+ to_return(:status => 200, :body => "", :headers => {})
216
+ response = subject.send(:request, :post, '/users', params)
217
+
218
+ expect(response.code).to eq 200
219
+ end
220
+
221
+ it "respects the redirect limit " do
222
+ subject.connection_options = { :max_redirects => 1 }
223
+
224
+ stub_request(:get, "https://www.yammer.com/users").
225
+ with(
226
+ :headers => {
227
+ 'Accept' => 'application/json',
228
+ 'Accept-Encoding'=> 'gzip, deflate',
229
+ 'User-Agent' => "Yammer Ruby Gem #{Yammer::Version}"
230
+ }
231
+ ).to_return(:status => 301, :body => "", :headers => { 'Location' => 'https://www.yammer.com/members'})
232
+
233
+
234
+ stub_request(:get, "https://www.yammer.com/members").
235
+ with(
236
+ :headers => {
237
+ 'Accept' => 'application/json',
238
+ 'Accept-Encoding'=> 'gzip, deflate',
239
+ 'User-Agent' => "Yammer Ruby Gem #{Yammer::Version}"
240
+ }
241
+ ).to_return(:status => 301, :body => "", :headers => { 'Location' => 'https://www.yammer.com/people'})
242
+
243
+ expect { subject.send(:request, :get, '/users') }.to raise_error(RestClient::MaxRedirectsReached)
244
+ end
245
+
246
+ it "modifies http 303 redirect from POST to GET " do
247
+ params = { :first_name => 'jane', :last_name => 'doe' }
248
+ stub_request(:post, "https://www.yammer.com/users").with(
249
+ :body => params,
250
+ :headers => {
251
+ 'Accept'=>'application/json',
252
+ 'Accept-Encoding'=>'gzip, deflate',
253
+ 'Content-Length'=>'29',
254
+ 'Content-Type'=>'application/x-www-form-urlencoded',
255
+ 'User-Agent'=>"Yammer Ruby Gem #{Yammer::Version}"
256
+ }
257
+ ).to_return(
258
+ :status => 303,
259
+ :body => "you are being redirected",
260
+ :headers => {'Location' => "http://yammer.com/members"}
261
+ )
262
+
263
+ stub_request(:get, "http://yammer.com/members").
264
+ with(
265
+ :headers => {
266
+ 'Accept'=>'application/json',
267
+ 'Accept-Encoding'=>'gzip, deflate',
268
+ 'User-Agent'=> "Yammer Ruby Gem #{Yammer::Version}"
269
+ }
270
+ ).to_return(:status => 200, :body => "", :headers => {})
271
+
272
+ response = subject.send(:request, :post, '/users', params )
273
+
274
+ expect(response.code).to eq 200
275
+ end
119
276
  end
120
277
 
121
278
  context 'http request' do
@@ -127,8 +284,10 @@ describe Yammer::Client do
127
284
  'Authorization'=>'Bearer TolNOFka9Uls2DxahNi78A',
128
285
  'Content-Type'=>'application/x-www-form-urlencoded',
129
286
  'User-Agent'=>"Yammer Ruby Gem #{Yammer::Version}"
130
- },
131
- :body => { :name => 'alice' })
287
+ },
288
+ :body => { :name => 'alice' }).to_return({
289
+ :status => 200, :body => "", :headers => {}
290
+ })
132
291
  subject.post('/users', { :name => 'alice'})
133
292
  end
134
293
  end
@@ -142,7 +301,9 @@ describe Yammer::Client do
142
301
  'Content-Type'=>'application/x-www-form-urlencoded',
143
302
  'User-Agent'=> "Yammer Ruby Gem #{Yammer::Version}"
144
303
  },
145
- :body => { :name => 'bob' })
304
+ :body => { :name => 'bob' }).to_return(
305
+ :status => 200, :body => "", :headers => {})
306
+
146
307
  subject.put('/users/1', { :name => 'bob'})
147
308
  end
148
309
  end
@@ -165,9 +326,9 @@ describe Yammer::Client do
165
326
  it 'raises exception' do
166
327
  stub_get('/users/1').with(:headers => { 'Authorization' => 'Bearer TolNOFka9Uls2DxahNi78A' }).to_return(
167
328
  :body => '{ "response": { "message": "Token not found.", "code": 16, "stat": "fail" } }',
168
- :status => 401
169
- )
170
- expect { subject.get('/users/1') }.to raise_error(Yammer::Error::Unauthorized, 'Token not found.')
329
+ :status => 401)
330
+
331
+ expect { subject.get('/users/1') }.to raise_error(RestClient::Unauthorized)
171
332
  end
172
333
  end
173
334
 
@@ -177,31 +338,7 @@ describe Yammer::Client do
177
338
  :body => '{ "response": { "message": "Rate limited due to excessive requests.", "code": 33, "stat": "fail" } }',
178
339
  :status => 429
179
340
  )
180
- expect { subject.get('/users/1') }.to raise_error(Yammer::Error::RateLimitExceeded, 'Rate limited due to excessive requests.')
181
- end
182
- end
183
- end
184
-
185
- describe "#connection" do
186
- context "with default connection options" do
187
- it "returns HttpConnection" do
188
- expect(subject.send(:connection)).to be_instance_of(Yammer::HttpConnection)
189
- end
190
- end
191
-
192
- context "with custom connection options" do
193
- it "returns custom connection" do
194
- custom_http = Struct.new('CustomHttpClient', :site_url, :connection_options)
195
- client = Yammer::Client.new(
196
- :site_url => 'www.example.com',
197
- :client_id => 'PRbTcg9qjgKsp4jjpm1pw',
198
- :client_secret => 'Xn7kp7Ly0TCY4GtZWkmSsqGEPg10DmMADyjWkf2U',
199
- :http_adapter => custom_http,
200
- :connection_options => { :max_redirects => 5, :use_ssl => true }
201
- )
202
- connection = client.send(:connection)
203
- expect(connection.site_url).to eq "www.example.com"
204
- expect(connection.connection_options).to eq({ :max_redirects => 5, :use_ssl => true })
341
+ expect { subject.get('/users/1') }.to raise_error(RestClient::RequestFailed)
205
342
  end
206
343
  end
207
344
  end