Added v 0.2.2 snapshot.
[twitter4r-core.git] / spec / twitter / client / timeline_spec.rb
blob45d8c398d0ed1b6733568462ef888bf47d0aac95
1 require File.join(File.dirname(__FILE__), '..', '..', 'spec_helper')
3 describe Twitter::Client, "Timeline API" do
4   before(:each) do
5     @client = client_context
6     @uris = Twitter::Client.class_eval("@@TIMELINE_URIS")
7     @user = Twitter::User.new(:screen_name => 'mylogin')
8     @status = Twitter::Status.new(:id => 23343443, :text => 'I love Lucy!', :user => @user)
9     @timeline = [@status]
10     @json = JSON.unparse([@status.to_hash])
11     @request = mas_net_http_get(:basic_auth => nil)
12     @response = mas_net_http_response(:success, @json)
13     @connection = mas_net_http(@response)
14     @params = {
15       :public => {:since_id => 3249328},
16                         :friends => {:id => 'myfriend'},
17                         :user => {:id => 'auser'},
18                         :me => {},
19     }
20   end
21   
22   it "should respond to instance method #timeline_for" do
23     @client.should respond_to(:timeline_for)
24   end
25   
26   it "should call #http_get with expected parameters for :public case" do
27     @client.should_receive(:http_connect).and_return(mas_net_http_response(:success, @json))
28     @client.timeline_for(:public)
29   end
30   
31   it "should yield to block for each status in timeline" do
32     @client.should_receive(:http_connect).and_return(mas_net_http_response(:success, @json))
33     Twitter::Status.should_receive(:unmarshal).and_return(@timeline)
34     count = 0
35     @client.timeline_for(:public) do |status|
36       status.should eql(@status)
37       count += 1
38     end
39     count.should eql(@timeline.size)
40   end
41   
42   it "should generate expected HTTP GET request for generic :public case" do
43     @client.should_receive(:create_http_get_request).with(@uris[:public], {}).and_return(@request)
44     timeline = @client.timeline_for(:public)
45     timeline.should eql(@timeline)
46   end
47   
48   it "should generate expected HTTP GET request for :public case with expected parameters" do
49     @client.should_receive(:create_http_get_request).with(@uris[:public], @params[:public]).and_return(@request)
50     timeline = @client.timeline_for(:public, @params[:public])
51     timeline.should eql(@timeline)
52   end
53   
54   it "should generate expected HTTP GET request for generic :friends case" do
55         @client.should_receive(:create_http_get_request).with(@uris[:friends], {}).and_return(@request)
56         timeline = @client.timeline_for(:friends)
57         timeline.should eql(@timeline)
58   end
59   
60   it "should generate expected HTTP GET request for :friends case with expected parameters" do
61     @client.should_receive(:create_http_get_request).with(@uris[:friends], @params[:friends]).and_return(@request)
62     timeline = @client.timeline_for(:friends, @params[:friends])
63     timeline.should eql(@timeline)
64   end
65   
66   it "should raise an ArgumentError if type given is not valid" do
67     lambda {
68       @client.timeline_for(:crap)
69     }.should raise_error(ArgumentError)
70     
71     lambda { 
72       @client.timeline_for(:crap, @params[:friends])
73     }.should raise_error(ArgumentError)
74   end
75   
76   after(:each) do
77     nilize(@client)
78   end
79 end