Added v 0.3.1 snapshot.
[twitter4r-core.git] / spec / twitter / client / favorites_spec.rb
blobff3999343863320967a46b8b3938b71c84711cc2
1 require 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     Net::HTTP.stub!(:new).and_return(@connection)
13     @favorites = []
14     Twitter::Status.stub!(:unmarshal).and_return(@favorites)
15   end
16   
17   it "should create expected HTTP GET request when not giving options" do
18     @twitter.should_receive(:create_http_get_request).with(@uri).and_return(@request)
19     @twitter.favorites
20   end
21   
22   it "should create expected HTTP GET request when giving :page options" do
23     @twitter.should_receive(:create_http_get_request).with("#{@uri}?#{@options.to_http_str}").and_return(@request)
24     @twitter.favorites(@options)
25   end
26   
27   it "should raise Twitter::RESTError when 401 HTTP response received without giving options" do
28     @connection = mas_net_http(mas_net_http_response(:not_authorized))
29     lambda {
30       @twitter.favorites
31     }.should raise_error(Twitter::RESTError)
32   end
33   
34   it "should raise Twitter::RESTError when 401 HTTP response received when giving page options" do
35     @connection = mas_net_http(mas_net_http_response(:not_authorized))
36     lambda {
37       @twitter.favorites(@options)
38     }.should raise_error(Twitter::RESTError)
39   end
40   
41   it "should raise Twitter::RESTError when 403 HTTP response received without giving options" do
42     @connection = mas_net_http(mas_net_http_response(:forbidden))
43     lambda {
44       @twitter.favorites
45     }.should raise_error(Twitter::RESTError)
46   end
47   
48   it "should raise Twitter::RESTError when 403 HTTP response received when giving page options" do
49     @connection = mas_net_http(mas_net_http_response(:forbidden))
50     lambda {
51       @twitter.favorites(@options)
52     }.should raise_error(Twitter::RESTError)
53   end
54   
55   it "should raise Twitter::RESTError when 500 HTTP response received without giving options" do
56     @connection = mas_net_http(mas_net_http_response(:server_error))
57     lambda {
58       @twitter.favorites
59     }.should raise_error(Twitter::RESTError)
60   end
61   
62   it "should raise Twitter::RESTError when 500 HTTP response received when giving page options" do
63     @connection = mas_net_http(mas_net_http_response(:server_error))
64     lambda {
65       @twitter.favorites(@options)
66     }.should raise_error(Twitter::RESTError)
67   end
68   
69   after(:each) do
70     nilize(@uri, @request, @twitter, @default_header, @response, @error_response, @connection)
71   end
72 end
74 module FavoriteSpecMixin
75   def init
76     @base_uri = '/favourings'
77     @request = mas_net_http_get(:basic_auth => nil)
78     @twitter = client_context
79     @default_header = @twitter.send(:http_header)
80     @response = mas_net_http_response(:success)
81     @connection = mas_net_http(@response)
82     Net::HTTP.stub!(:new).and_return(@connection)
83     @id = 234923423
84     @status = mas_twitter_status(:id => @id, :to_i => @id)
85     Twitter::Status.stub!(:unmarshal).and_return(@status)
86   end
87   
88   def create_uri(method, id)
89     "#{@base_uri}/#{method.to_s}/#{id.to_i.to_s}.json"
90   end
91   
92   def connection=(connection)
93     @connection = connection
94   end
95   
96   def finalize
97     nilize(@uri, @request, @twitter, @default_header, @response, @error_response, @connection)
98   end
99 end
101 describe "Twitter::Client#favorite error handling", :shared => true do
102   it "should raise a Twitter::RESTError exception when a 401 HTTP response is received" do
103     connection = mas_net_http(mas_net_http_response(:not_authorized))
104     lambda {
105       execute_method
106     }.should raise_error(Twitter::RESTError)
107   end  
109   it "should raise a Twitter::RESTError exception when a 403 HTTP response is received" do
110     connection = mas_net_http(mas_net_http_response(:forbidden))
111     lambda {
112       execute_method
113     }.should raise_error(Twitter::RESTError)
114   end  
116   it "should raise a Twitter::RESTError exception when a 404 HTTP response is received" do
117     connection = mas_net_http(mas_net_http_response(:file_not_found))
118     lambda {
119       execute_method
120     }.should raise_error(Twitter::RESTError)
121   end  
123   it "should raise a Twitter::RESTError exception when a 500 HTTP response is received" do
124     connection = mas_net_http(mas_net_http_response(:server_error))
125     lambda {
126       execute_method
127     }.should raise_error(Twitter::RESTError)
128   end  
131 describe Twitter::Client, "#favorite(:add, status)" do
132   include FavoriteSpecMixin
133   it_should_behave_like "Twitter::Client#favorite error handling"
134   
135   before(:each) do
136     init
137   end
138   
139   def execute_method
140     @twitter.favorite(:add, @id)
141   end
142   
143   it "should create expected POST request for :add action supplying integer id of status" do
144     @twitter.should_receive(:create_http_post_request).with(create_uri(:create, @id)).and_return(@request)
145     @twitter.favorite(:add, @id)
146   end
147   
148   it "should create expected POST request for :add action supplying status object" do
149     @twitter.should_receive(:create_http_post_request).with(create_uri(:create, @id)).and_return(@request)
150     @twitter.favorite(:add, @status)
151   end
152   
153   after(:each) do
154     finalize
155   end
158 describe Twitter::Client, "#favorite(:remove, status)" do
159   include FavoriteSpecMixin
160   it_should_behave_like "Twitter::Client#favorite error handling"
162   before(:each) do
163     init
164   end
165   
166   def execute_method
167     @twitter.favorite(:remove, @id)
168   end
169   
170   it "should create expected DELETE request for :remove action supplying integer id of status" do
171     @twitter.should_receive(:create_http_delete_request).with(create_uri(:destroy, @id)).and_return(@request)
172     @twitter.favorite(:remove, @id)
173   end
174   
175   it "should create expected DELETE request for :remove action supplying status object" do
176     @twitter.should_receive(:create_http_delete_request).with(create_uri(:destroy, @id)).and_return(@request)
177     @twitter.favorite(:remove, @status)
178   end
179   
180   after(:each) do
181     finalize
182   end