1 require File.join(File.dirname(__FILE__), '..', '..', 'spec_helper')
3 describe "Twitter::Client" do
5 @init_hash = { :login => 'user', :password => 'pass' }
8 it ".new should accept login and password as initializer hash keys and set the values to instance values" do
11 client = Twitter::Client.new(@init_hash)
12 end.should_not raise_error
13 client.send(:login).should eql(@init_hash[:login])
14 client.send(:password).should eql(@init_hash[:password])
18 describe Twitter::Client, "#http_header" do
21 @application_name = @user_agent
22 @application_version = '1.2.3'
23 @application_url = 'http://myapp.url'
24 Twitter::Client.configure do |conf|
25 conf.user_agent = @user_agent
26 conf.application_name = @application_name
27 conf.application_version = @application_version
28 conf.application_url = @application_url
31 'Accept' => 'text/x-json',
32 'X-Twitter-Client' => @application_name,
33 'X-Twitter-Client-Version' => @application_version,
34 'X-Twitter-Client-URL' => @application_url,
35 'User-Agent' => "Twitter4R v#{Twitter::Version.to_version} [#{@user_agent}]",
37 @twitter = client_context
38 # resent @@http_header class variable in Twitter::Client class
39 Twitter::Client.class_eval("@@http_header = nil")
42 it "should always return expected HTTP headers" do
43 headers = @twitter.send(:http_header)
44 headers.should eql(@expected_headers)
47 it "should cache HTTP headers Hash in class variable after first invocation" do
48 cache = Twitter::Client.class_eval("@@http_header")
50 @twitter.send(:http_header)
51 cache = Twitter::Client.class_eval("@@http_header")
52 cache.should_not be_nil
53 cache.should eql(@expected_headers)
57 nilize(@user_agent, @application_name, @application_version, @application_url, @twitter, @expected_headers)
61 describe Twitter::Client, "#create_http_get_request" do
64 @expected_get_request = mock(Net::HTTP::Get)
65 @twitter = client_context
66 @default_header = @twitter.send(:http_header)
69 it "should create new Net::HTTP::Get object with expected initialization arguments" do
70 Net::HTTP::Get.should_receive(:new).with(@uri, @default_header).and_return(@expected_get_request)
71 @twitter.send(:create_http_get_request, @uri)
75 nilize(@twitter, @uri, @expected_get_request, @default_header)
79 describe Twitter::Client, "#create_http_post_request" do
82 @expected_post_request = mock(Net::HTTP::Post)
83 @twitter = client_context
84 @default_header = @twitter.send(:http_header)
87 it "should create new Net::HTTP::Post object with expected initialization arguments" do
88 Net::HTTP::Post.should_receive(:new).with(@uri, @default_header).and_return(@expected_post_request)
89 @twitter.send(:create_http_post_request, @uri)
93 nilize(@twitter, @uri, @expected_post_request, @default_header)
97 describe Twitter::Client, "#create_http_delete_request" do
99 @uri = '/a/stupid/path/that/is/not/restful/since/twitter.com/cannot/do/consistent/restful/apis'
100 @expected_delete_request = mock(Net::HTTP::Delete)
101 @twitter = client_context
102 @default_header = @twitter.send(:http_header)
105 it "should create new Net::HTTP::Delete object with expected initialization arguments" do
106 Net::HTTP::Delete.should_receive(:new).with(@uri, @default_header).and_return(@expected_delete_request)
107 @twitter.send(:create_http_delete_request, @uri)
111 nilize(@twitter, @uri, @expected_delete_request, @default_header)
115 describe Twitter::Client, "#http_connect" do
117 @request = mas_net_http_get(:basic_auth => nil)
118 @good_response = mas_net_http_response(:success)
119 @bad_response = mas_net_http_response(:server_error)
120 @http_stubs = {:is_a? => true}
121 @block = Proc.new do |conn|
122 conn.is_a?(Net::HTTP).should be(true)
126 @twitter = client_context
130 def generate_bad_response
131 @http = mas_net_http(@bad_response, @http_stubs)
132 Net::HTTP.stub!(:new).and_return(@http)
135 def generate_good_response
136 @http = mas_net_http(@good_response, @http_stubs)
137 Net::HTTP.stub!(:new).and_return(@http)
140 it "should yield HTTP connection when response is good" do
141 generate_good_response
142 @http.should_receive(:is_a?).with(Net::HTTP).and_return(true)
144 @twitter.send(:http_connect, &@block)
145 end.should_not raise_error
146 @has_yielded.should be(true)
149 it "should yield HTTP connection when response is bad" do
150 generate_bad_response
151 @http.should_receive(:is_a?).with(Net::HTTP).and_return(true)
153 @twitter.send(:http_connect, &@block)
154 }.should raise_error(Twitter::RESTError)
155 @has_yielded.should be(true)
159 nilize(@good_response, @bad_response, @http)
163 describe Twitter::Client, "#bless_model" do
165 @twitter = client_context
166 @model = Twitter::User.new
169 it "should recieve #client= message on given model to self" do
170 @model.should_receive(:client=).with(@twitter)
171 model = @twitter.send(:bless_model, @model)
174 it "should set client attribute on given model to self" do
175 model = @twitter.send(:bless_model, @model)
176 model.client.should eql(@twitter)
179 # if model is nil, it doesn't not necessarily signify an exceptional case for this method's usage.
180 it "should return nil when receiving nil and not raise any exceptions" do
181 model = @twitter.send(:bless_model, nil)
185 # needed to alert developer that the model needs to respond to #client= messages appropriately.
186 it "should raise an error if passing in a non-nil object that doesn't not respond to the :client= message" do
188 @twitter.send(:bless_model, Object.new)
189 }.should raise_error(NoMethodError)
197 describe Twitter::Client, "#bless_models" do
199 @twitter = client_context
201 Twitter::Status.new(:text => 'message #1'),
202 Twitter::Status.new(:text => 'message #2'),
206 it "should set client attributes for each model in given Array to self" do
207 models = @twitter.send(:bless_models, @models)
208 models.each {|model| model.client.should eql(@twitter) }
211 it "should set client attribute for singular model given to self" do
212 model = @twitter.send(:bless_models, @models[0])
213 model.client.should eql(@twitter)
216 it "should delegate to bless_model for singular model case" do
218 @twitter.should_receive(:bless_model).with(model).and_return(model)
219 @twitter.send(:bless_models, model)
222 it "should return nil when receiving nil and not raise any exceptions" do
224 value = @twitter.send(:bless_models, nil)
226 }.should_not raise_error
230 nilize(@twitter, @models)