Minor fixes for twitter4r/twitter4r-core/issues/11
[twitter4r-core.git] / spec / twitter / client / favorites_spec.rb
blobbb2dddafdf92e094aec66b66026f61014675ee70
1 require File.expand_path(File.join(File.dirname(__FILE__), '..', '..', 'spec_helper'))
3 describe Twitter::Client, "#favorites" do
4   before(:each) do
5     @uri = '/favorites.json'
6     @request = mas_net_http_get(:basic_auth => nil)
7     @twitter = client_context
8     @default_header = @twitter.send(:http_header)
9     @response = mas_net_http_response(:success)
10     @connection = mas_net_http(@response)
11     @options = { :page => 4 }
12     @favorites = []
13     Twitter::Status.stub!(:unmarshal).and_return(@favorites)
14   end
15   
16   it "should create expected HTTP GET request when not giving options" do
17     @twitter.should_receive(:rest_oauth_connect).with(:get, @uri, nil).and_return(@response)
18     @twitter.favorites
19   end
20   
21   it "should create expected HTTP GET request when giving :page options" do
22     @twitter.should_receive(:rest_oauth_connect).with(:get, @uri, @options).and_return(@response)
23     @twitter.favorites(@options)
24   end
25   
26   it "should raise Twitter::RESTError when 401 HTTP response received without giving options" do
27     @connection = mas_net_http(mas_net_http_response(:not_authorized))
28     lambda {
29       @twitter.favorites
30     }.should raise_error(Twitter::RESTError)
31   end
32   
33   it "should raise Twitter::RESTError when 401 HTTP response received when giving page options" do
34     @connection = mas_net_http(mas_net_http_response(:not_authorized))
35     lambda {
36       @twitter.favorites(@options)
37     }.should raise_error(Twitter::RESTError)
38   end
39   
40   it "should raise Twitter::RESTError when 403 HTTP response received without giving options" do
41     @connection = mas_net_http(mas_net_http_response(:forbidden))
42     lambda {
43       @twitter.favorites
44     }.should raise_error(Twitter::RESTError)
45   end
46   
47   it "should raise Twitter::RESTError when 403 HTTP response received when giving page options" do
48     @connection = mas_net_http(mas_net_http_response(:forbidden))
49     lambda {
50       @twitter.favorites(@options)
51     }.should raise_error(Twitter::RESTError)
52   end
53   
54   it "should raise Twitter::RESTError when 500 HTTP response received without giving options" do
55     @connection = mas_net_http(mas_net_http_response(:server_error))
56     lambda {
57       @twitter.favorites
58     }.should raise_error(Twitter::RESTError)
59   end
60   
61   it "should raise Twitter::RESTError when 500 HTTP response received when giving page options" do
62     @connection = mas_net_http(mas_net_http_response(:server_error))
63     lambda {
64       @twitter.favorites(@options)
65     }.should raise_error(Twitter::RESTError)
66   end
67   
68   after(:each) do
69     nilize(@uri, @request, @twitter, @default_header, @response, @error_response, @connection)
70   end
71 end
73 module FavoriteSpecMixin
74   def init
75     @base_uri = '/favourings'
76     @request = mas_net_http_get(:basic_auth => nil)
77     @twitter = client_context
78     @default_header = @twitter.send(:http_header)
79     @response = mas_net_http_response(:success)
80     @connection = mas_net_http(@response)
81     @id = 234923423
82     @status = mas_twitter_status(:id => @id, :to_i => @id)
83     Twitter::Status.stub!(:unmarshal).and_return(@status)
84   end
85   
86   def create_uri(method, id)
87     "#{@base_uri}/#{method.to_s}/#{id.to_i.to_s}.json"
88   end
89   
90   def finalize
91     nilize(@uri, @request, @twitter, @default_header, @response, @error_response, @connection)
92   end
93 end
95 shared_examples_for "Twitter::Client#favorite error handling" do
96   it "should raise a Twitter::RESTError exception when a 401 HTTP response is received" do
97     connection = mas_net_http(mas_net_http_response(:not_authorized))
98     lambda {
99       execute_method
100     }.should raise_error(Twitter::RESTError)
101   end
103   it "should raise a Twitter::RESTError exception when a 403 HTTP response is received" do
104     connection = mas_net_http(mas_net_http_response(:forbidden))
105     lambda {
106       execute_method
107     }.should raise_error(Twitter::RESTError)
108   end
110   it "should raise a Twitter::RESTError exception when a 404 HTTP response is received" do
111     connection = mas_net_http(mas_net_http_response(:file_not_found))
112     lambda {
113       execute_method
114     }.should raise_error(Twitter::RESTError)
115   end
117   it "should raise a Twitter::RESTError exception when a 500 HTTP response is received" do
118     connection = mas_net_http(mas_net_http_response(:server_error))
119     lambda {
120       execute_method
121     }.should raise_error(Twitter::RESTError)
122   end
125 describe Twitter::Client, "#favorite(:add, status)" do
126   include FavoriteSpecMixin
127   it_should_behave_like "Twitter::Client#favorite error handling"
128   
129   before(:each) do
130     init
131   end
132   
133   def execute_method
134     @twitter.favorite(:add, @id)
135   end
136   
137   it "should create expected POST request for :add action supplying integer id of status" do
138     @twitter.should_receive(:rest_oauth_connect).with(:post, create_uri(:create, @id)).and_return(@request)
139     @twitter.favorite(:add, @id)
140   end
141   
142   it "should create expected POST request for :add action supplying status object" do
143     @twitter.should_receive(:rest_oauth_connect).with(:post, create_uri(:create, @id)).and_return(@request)
144     @twitter.favorite(:add, @status)
145   end
146   
147   after(:each) do
148     finalize
149   end
152 describe Twitter::Client, "#favorite(:remove, status)" do
153   include FavoriteSpecMixin
154   it_should_behave_like "Twitter::Client#favorite error handling"
156   before(:each) do
157     init
158   end
159   
160   def execute_method
161     @twitter.favorite(:remove, @id)
162   end
163   
164   it "should create expected DELETE request for :remove action supplying integer id of status" do
165     @twitter.should_receive(:rest_oauth_connect).with(:delete, create_uri(:destroy, @id)).and_return(@request)
166     execute_method
167   end
168   
169   it "should create expected DELETE request for :remove action supplying status object" do
170     @twitter.should_receive(:rest_oauth_connect).with(:delete, create_uri(:destroy, @id)).and_return(@request)
171     @twitter.favorite(:remove, @status)
172   end
173   
174   after(:each) do
175     finalize
176   end