yammer-client 0.1.2 → 0.1.3

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.
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