Added v 0.4.0 snapshot.
[twitter4r-core.git] / spec / twitter / client / status_spec.rb
blobeec104abf7b6345d2464efc5491c66c905cfd590
1 require File.join(File.dirname(__FILE__), '..', '..', 'spec_helper')
3 describe Twitter::Client, "#status" do
4   before(:each) do
5     @twitter = client_context
6     @message = 'This is my unique message'
7     @uris = Twitter::Client.class_eval("@@STATUS_URIS")
8     @options = {:id => 666666}
9     @request = mas_net_http_get(:basic_auth => nil)
10     @response = mas_net_http_response(:success, '{}')
11     @connection = mas_net_http(@response)
12     @float = 43.3434
13     @status = Twitter::Status.new(:id => 2349343)
14     @reply_to_status_id = 3495293
15     @source = Twitter::Client.class_eval("@@defaults[:source]")
16   end
18   it "should return nil if nil is passed as value argument for :get case" do
19     status = @twitter.status(:get, nil)
20     status.should be_nil
21   end
22   
23   it "should not call @twitter#http_connect when passing nil for value argument in :get case" do
24     @twitter.should_not_receive(:http_connect)
25     @twitter.status(:get, nil)
26   end
27   
28   it "should create expected HTTP GET request for :get case" do
29     @twitter.should_receive(:create_http_get_request).with(@uris[:get], @options).and_return(@request)
30     @twitter.status(:get, @options[:id])
31   end
32   
33   it "should invoke @twitter#create_http_get_request with given parameters equivalent to {:id => value.to_i} for :get case" do
34     # Float case
35     @twitter.should_receive(:create_http_get_request).with(@uris[:get], {:id => @float.to_i}).and_return(@request)
36     @twitter.status(:get, @float)
38     # Twitter::Status object case
39     @twitter.should_receive(:create_http_get_request).with(@uris[:get], {:id => @status.to_i}).and_return(@request)    
40     @twitter.status(:get, @status)
41   end
42   
43   it "should return nil if nil is passed as value argument for :post case" do
44     status = @twitter.status(:post, nil)
45     status.should be_nil
46   end
47   
48   it "should not call @twitter#http_connect when passing nil for value argument in :post case" do
49     @twitter.should_not_receive(:http_connect)
50     @twitter.status(:post, nil)
51   end
52   
53   it "should create expected HTTP POST request for :post case" do
54     @twitter.should_receive(:create_http_post_request).with(@uris[:post]).and_return(@request)
55     @connection.should_receive(:request).with(@request, {:status => @message, :source => @source}.to_http_str).and_return(@response)
56     @twitter.status(:post, @message)
57   end
58   
59   it "should return nil if no :status key-value given in the value argument for :reply case" do
60     status = @twitter.status(:reply, {})
61     status.should be_nil
62   end
63   
64   it "should return nil if nil is passed as value argument for :reply case" do
65     status = @twitter.status(:reply, nil)
66     status.should be_nil
67   end
68   
69   it "should not call @twitter#http_connect when passing a value Hash argument that has no :status key-value in :reply case" do
70     @twitter.should_not_receive(:http_connect)
71     @twitter.status(:reply, {})
72   end
73   
74   it "should not call @twitter#http_connect when passing nil for value argument in :reply case" do
75     @twitter.should_not_receive(:http_connect)
76     @twitter.status(:reply, nil)
77   end
78   
79   it "should create expected HTTP POST request for :reply case" do
80     @twitter.should_receive(:create_http_post_request).with(@uris[:reply]).and_return(@request)
81     @connection.should_receive(:request).with(@request, {:status => @message, :source => @source, :in_reply_to_status_id => @reply_to_status_id}.to_http_str).and_return(@response)
82     @twitter.status(:reply, :status => @message, :in_reply_to_status_id => @reply_to_status_id)
83   end
84   
85   it "should return nil if nil is passed as value argument for :delete case" do
86     status = @twitter.status(:delete, nil)
87     status.should be_nil
88   end
89   
90   it "should not call @twitter#http_connect when passing nil for value argument in :delete case" do
91     @twitter.should_not_receive(:http_connect)
92     @twitter.status(:delete, nil)
93   end
94   
95   it "should create expected HTTP DELETE request for :delete case" do
96     @twitter.should_receive(:create_http_delete_request).with(@uris[:delete], @options).and_return(@request)
97     @twitter.status(:delete, @options[:id])
98   end
100   it "should invoke @twitter#create_http_get_request with given parameters equivalent to {:id => value.to_i} for :delete case" do
101     # Float case
102     @twitter.should_receive(:create_http_delete_request).with(@uris[:delete], {:id => @float.to_i}).and_return(@request)
103     @twitter.status(:delete, @float)
105     # Twitter::Status object case
106     @twitter.should_receive(:create_http_delete_request).with(@uris[:delete], {:id => @status.to_i}).and_return(@request)
107     @twitter.status(:delete, @status)
108   end
109   
110   it "should raise an ArgumentError when given an invalid status action" do
111     lambda {
112       @twitter.status(:crap, nil)
113     }.should raise_error(ArgumentError)
114   end
115     
116   after(:each) do
117     nilize(@twitter)
118   end