twitter4r 0.1.1 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,70 @@
1
+ require File.join(File.dirname(__FILE__), '..', '..', 'spec_helper')
2
+
3
+ describe Twitter::Client, "#friend" do
4
+ before(:each) do
5
+ @twitter = client_context
6
+ @id = 1234567
7
+ @screen_name = 'dummylogin'
8
+ @friend = Twitter::User.new(:id => @id, :screen_name => @screen_name)
9
+ @uris = Twitter::Client.class_eval("@@FRIENDSHIP_URIS")
10
+ @request = mas_net_http_get(:basic_auth => nil)
11
+ @response = mas_net_http_response(:success)
12
+ @connection = mas_net_http(@response)
13
+ Net::HTTP.stub!(:new).and_return(@connection)
14
+ Twitter::User.stub!(:unmarshal).and_return(@friend)
15
+ end
16
+
17
+ def create_uri(action, id)
18
+ "#{@uris[action]}/#{id}.json"
19
+ end
20
+
21
+ it "should create expected HTTP GET request for :add case using integer user ID" do
22
+ # the integer user ID scenario...
23
+ @twitter.should_receive(:create_http_get_request).with(create_uri(:add, @id)).and_return(@request)
24
+ @twitter.friend(:add, @id)
25
+ end
26
+
27
+ it "should create expected HTTP GET request for :add case using screen name" do
28
+ # the screen name scenario...
29
+ @twitter.should_receive(:create_http_get_request).with(create_uri(:add, @screen_name)).and_return(@request)
30
+ @twitter.friend(:add, @screen_name)
31
+ end
32
+
33
+ it "should create expected HTTP GET request for :add case using Twitter::User object" do
34
+ # the Twitter::User object scenario...
35
+ @twitter.should_receive(:create_http_get_request).with(create_uri(:add, @friend.to_i)).and_return(@request)
36
+ @twitter.friend(:add, @friend)
37
+ end
38
+
39
+ it "should create expected HTTP GET request for :remove case using integer user ID" do
40
+ # the integer user ID scenario...
41
+ @twitter.should_receive(:create_http_get_request).with(create_uri(:remove, @id)).and_return(@request)
42
+ @twitter.friend(:remove, @id)
43
+ end
44
+
45
+ it "should create expected HTTP GET request for :remove case using screen name" do
46
+ # the screen name scenario...
47
+ @twitter.should_receive(:create_http_get_request).with(create_uri(:remove, @screen_name)).and_return(@request)
48
+ @twitter.friend(:remove, @screen_name)
49
+ end
50
+
51
+ it "should create expected HTTP GET request for :remove case using Twitter::User object" do
52
+ # the Twitter::User object scenario...
53
+ @twitter.should_receive(:create_http_get_request).with(create_uri(:remove, @friend.to_i)).and_return(@request)
54
+ @twitter.friend(:remove, @friend)
55
+ end
56
+
57
+ it "should bless user model returned for :add case" do
58
+ @twitter.should_receive(:bless_model).with(@friend)
59
+ @twitter.friend(:add, @friend)
60
+ end
61
+
62
+ it "should bless user model returned for :remove case" do
63
+ @twitter.should_receive(:bless_model).with(@friend)
64
+ @twitter.friend(:remove, @friend)
65
+ end
66
+
67
+ after(:each) do
68
+ nilize(@twitter, @id, @uris, @request, @response, @connection)
69
+ end
70
+ end
@@ -0,0 +1,92 @@
1
+ require File.join(File.dirname(__FILE__), '..', '..', 'spec_helper')
2
+
3
+ describe Twitter::Client, "#messages" do
4
+ before(:each) do
5
+ @twitter = client_context
6
+ @uris = Twitter::Client.class_eval("@@MESSAGING_URIS")
7
+ @request = mas_net_http_get(:basic_auth => nil)
8
+ @response = mas_net_http_response(:success, "[]")
9
+ @connection = mas_net_http(@response)
10
+ Net::HTTP.stub!(:new).and_return(@connection)
11
+ @messages = []
12
+ Twitter::Message.stub!(:unmarshal).and_return(@messages)
13
+ end
14
+
15
+ it "should create expected HTTP GET request for :received case" do
16
+ @twitter.should_receive(:create_http_get_request).with(@uris[:received]).and_return(@request)
17
+ @twitter.messages(:received)
18
+ end
19
+
20
+ it "should bless the Array returned from Twitter for :received case" do
21
+ @twitter.should_receive(:bless_models).with(@messages).and_return(@messages)
22
+ @twitter.messages(:received)
23
+ end
24
+
25
+ it "should create expected HTTP GET request for :sent case" do
26
+ @twitter.should_receive(:create_http_get_request).with(@uris[:sent]).and_return(@request)
27
+ @twitter.messages(:sent)
28
+ end
29
+
30
+ it "should bless the Array returned from Twitter for :sent case" do
31
+ @twitter.should_receive(:bless_models).with(@messages).and_return(@messages)
32
+ @twitter.messages(:sent)
33
+ end
34
+
35
+ after(:each) do
36
+ nilize(@twitter, @uris, @request, @response, @connection, @messages)
37
+ end
38
+ end
39
+
40
+ describe Twitter::Client, "#message" do
41
+ before(:each) do
42
+ @twitter = client_context
43
+ @attributes = {
44
+ :id => 34324,
45
+ :text => 'Randy, are you coming over later?',
46
+ :sender => {:id => 123, :screen_name => 'mylogin'},
47
+ :recipient => {:id => 1234, :screen_name => 'randy'},
48
+ }
49
+ @message = Twitter::Message.new(@attributes)
50
+ @uris = Twitter::Client.class_eval("@@MESSAGING_URIS")
51
+ @request = mas_net_http_get(:basic_auth => nil)
52
+ @json = JSON.unparse(@attributes)
53
+ @response = mas_net_http_response(:success, @json)
54
+ @connection = mas_net_http(@response)
55
+ Net::HTTP.stub!(:new).and_return(@connection)
56
+ Twitter::Message.stub!(:unmarshal).and_return(@message)
57
+ end
58
+
59
+ it "should invoke #http_connect with expected arguments for :post case" do
60
+ @twitter.should_receive(:http_connect).with({:text => @message.text, :user => @message.recipient.to_i}.to_http_str).and_return(@response)
61
+ @twitter.message(:post, @message.text, @message.recipient)
62
+ end
63
+
64
+ it "should create expected HTTP POST request for :post case" do
65
+ @twitter.should_receive(:create_http_post_request).with(@uris[:post]).and_return(@request)
66
+ @twitter.message(:post, @message.text, @message.recipient)
67
+ end
68
+
69
+ it "should bless returned Twitter::Message object for :post case" do
70
+ @twitter.should_receive(:bless_model).with(@message)
71
+ @twitter.message(:post, @message.text, @message.recipient)
72
+ end
73
+
74
+ it "should create expected HTTP DELETE request for :delete case" do
75
+ @twitter.should_receive(:create_http_delete_request).with(@uris[:delete], {:id => @message.to_i}).and_return(@request)
76
+ @twitter.message(:delete, @message)
77
+ end
78
+
79
+ it "should bless returned Twitter::Message object for :delete case" do
80
+ @twitter.should_receive(:bless_model).with(@message)
81
+ @twitter.message(:delete, @message)
82
+ end
83
+
84
+ it "should invoke #to_i on message object passed in for :delete case" do
85
+ @message.should_receive(:to_i).and_return(@message.id)
86
+ @twitter.message(:delete, @message)
87
+ end
88
+
89
+ after(:each) do
90
+ nilize(@twitter, @uris, @request, @response, @connection, @sender, @recipient, @message, @attributes)
91
+ end
92
+ end
@@ -0,0 +1,85 @@
1
+ require File.join(File.dirname(__FILE__), '..', '..', 'spec_helper')
2
+
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
+ end
15
+
16
+ it "should return nil if nil is passed as value argument for :get case" do
17
+ status = @twitter.status(:get, nil)
18
+ status.should be_nil
19
+ end
20
+
21
+ it "should not call @twitter#http_connect when passing nil for value argument in :get case" do
22
+ @twitter.should_not_receive(:http_connect)
23
+ @twitter.status(:get, nil)
24
+ end
25
+
26
+ it "should create expected HTTP GET request for :get case" do
27
+ @twitter.should_receive(:create_http_get_request).with(@uris[:get], @options).and_return(@request)
28
+ @twitter.status(:get, @options[:id])
29
+ end
30
+
31
+ it "should invoke @twitter#create_http_get_request with given parameters equivalent to {:id => value.to_i} for :get case" do
32
+ # Float case
33
+ @twitter.should_receive(:create_http_get_request).with(@uris[:get], {:id => @float.to_i}).and_return(@request)
34
+ @twitter.status(:get, @float)
35
+
36
+ # Twitter::Status object case
37
+ @twitter.should_receive(:create_http_get_request).with(@uris[:get], {:id => @status.to_i}).and_return(@request)
38
+ @twitter.status(:get, @status)
39
+ end
40
+
41
+ it "should return nil if nil is passed as value argument for :post case" do
42
+ status = @twitter.status(:post, nil)
43
+ status.should be_nil
44
+ end
45
+
46
+ it "should not call @twitter#http_connect when passing nil for value argument in :post case" do
47
+ @twitter.should_not_receive(:http_connect)
48
+ @twitter.status(:post, nil)
49
+ end
50
+
51
+ it "should create expected HTTP POST request for :post case" do
52
+ @twitter.should_receive(:create_http_post_request).with(@uris[:post]).and_return(@request)
53
+ @connection.should_receive(:request).with(@request, {:status => @message}.to_http_str).and_return(@response)
54
+ @twitter.status(:post, @message)
55
+ end
56
+
57
+ it "should return nil if nil is passed as value argument for :delete case" do
58
+ status = @twitter.status(:delete, nil)
59
+ status.should be_nil
60
+ end
61
+
62
+ it "should not call @twitter#http_connect when passing nil for value argument in :delete case" do
63
+ @twitter.should_not_receive(:http_connect)
64
+ @twitter.status(:delete, nil)
65
+ end
66
+
67
+ it "should create expected HTTP DELETE request for :delete case" do
68
+ @twitter.should_receive(:create_http_delete_request).with(@uris[:delete], @options).and_return(@request)
69
+ @twitter.status(:delete, @options[:id])
70
+ end
71
+
72
+ it "should invoke @twitter#create_http_get_request with given parameters equivalent to {:id => value.to_i} for :delete case" do
73
+ # Float case
74
+ @twitter.should_receive(:create_http_delete_request).with(@uris[:delete], {:id => @float.to_i}).and_return(@request)
75
+ @twitter.status(:delete, @float)
76
+
77
+ # Twitter::Status object case
78
+ @twitter.should_receive(:create_http_delete_request).with(@uris[:delete], {:id => @status.to_i}).and_return(@request)
79
+ @twitter.status(:delete, @status)
80
+ end
81
+
82
+ after(:each) do
83
+ nilize(@twitter)
84
+ end
85
+ end
@@ -0,0 +1,69 @@
1
+ require File.join(File.dirname(__FILE__), '..', '..', 'spec_helper')
2
+
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
+ after(:each) do
67
+ nilize(@client)
68
+ end
69
+ end
@@ -0,0 +1,141 @@
1
+ require File.join(File.dirname(__FILE__), '..', '..', 'spec_helper')
2
+
3
+ describe Twitter::Client, "#user(id, :info)" do
4
+ before(:each) do
5
+ @twitter = client_context
6
+ @id = 395783
7
+ @screen_name = 'boris_johnson_is_funny_as_hell'
8
+ @user = Twitter::User.new(
9
+ :id => @id,
10
+ :screen_name => @screen_name,
11
+ :location => 'London'
12
+ )
13
+ @json = JSON.unparse(@user.to_hash)
14
+ @request = mas_net_http_get(:basic_auth => nil)
15
+ @response = mas_net_http_response(:success, @json)
16
+ @connection = mas_net_http(@response)
17
+ @uris = Twitter::Client.class_eval("@@USER_URIS")
18
+ @twitter.stub!(:create_http_get_request).and_return(@request)
19
+ Twitter::User.stub!(:unmarshal).and_return(@user)
20
+ Net::HTTP.stub!(:new).and_return(@connection)
21
+ end
22
+
23
+ it "should create expected HTTP GET request when giving numeric user id" do
24
+ @twitter.should_receive(:create_http_get_request).with(@uris[:info], {:id => @id}).and_return(@request)
25
+ @twitter.user(@id)
26
+ end
27
+
28
+ it "should create expected HTTP GET request when giving screen name" do
29
+ @twitter.should_receive(:create_http_get_request).with(@uris[:info], {:id => @screen_name}).and_return(@request)
30
+ @twitter.user(@screen_name)
31
+ end
32
+
33
+ it "should bless model returned when giving numeric user id" do
34
+ @twitter.should_receive(:bless_model).with(@user).and_return(@model)
35
+ @twitter.user(@id)
36
+ end
37
+
38
+ it "should bless model returned when giving screen name" do
39
+ @twitter.should_receive(:bless_model).with(@user).and_return(@model)
40
+ @twitter.user(@screen_name)
41
+ end
42
+
43
+ after(:each) do
44
+ nilize(@request, @response, @connection, @twitter, @id, @screen_name, @user)
45
+ end
46
+ end
47
+
48
+ # TODO: Add specs for new Twitter::Client#user(id, :friends) and
49
+ # Twitter::Client#user(id, :followers) use cases.
50
+ describe Twitter::Client, "#user(id, :friends)" do
51
+ before(:each) do
52
+ @twitter = client_context
53
+ end
54
+
55
+ it "should " do
56
+
57
+ end
58
+
59
+ after(:each) do
60
+
61
+ end
62
+ end
63
+
64
+ describe Twitter::Client, "#my(:info)" do
65
+ before(:each) do
66
+ @twitter = client_context
67
+ @screen_name = @twitter.instance_eval("@login")
68
+ @user = Twitter::User.new(
69
+ :id => 2394393,
70
+ :screen_name => @screen_name,
71
+ :location => 'Glamorous Urbana'
72
+ )
73
+ @json = JSON.unparse(@user.to_hash)
74
+ @request = mas_net_http_get(:basic_auth => nil)
75
+ @response = mas_net_http_response(:success, @json)
76
+ @connection = mas_net_http(@response)
77
+ @uris = Twitter::Client.class_eval("@@USER_URIS")
78
+ @twitter.stub!(:create_http_get_request).and_return(@request)
79
+ Net::HTTP.stub!(:new).and_return(@connection)
80
+ Twitter::User.stub!(:unmarshal).and_return(@user)
81
+ end
82
+
83
+ it "should create expected HTTP GET request" do
84
+ @twitter.should_receive(:create_http_get_request).with(@uris[:info], :id => @screen_name).and_return(@request)
85
+ @twitter.my(:info)
86
+ end
87
+
88
+ it "should bless the model object returned" do
89
+ @twitter.should_receive(:bless_models).with(@user).and_return(@user)
90
+ @twitter.my(:info)
91
+ end
92
+
93
+ it "should return expected user object" do
94
+ user = @twitter.my(:info)
95
+ user.should eql(@user)
96
+ end
97
+
98
+ after(:each) do
99
+ nilize(@request, @response, @connection, @twitter, @user, @screen_name)
100
+ end
101
+ end
102
+
103
+ describe Twitter::Client, "#my(:friends)" do
104
+ before(:each) do
105
+ @twitter = client_context
106
+ @screen_name = @twitter.instance_eval("@login")
107
+ @friends = [
108
+ Twitter::User.new(:screen_name => 'lucy_snowe'),
109
+ Twitter::User.new(:screen_name => 'jane_eyre'),
110
+ Twitter::User.new(:screen_name => 'tess_derbyfield'),
111
+ Twitter::User.new(:screen_name => 'elizabeth_jane_newson'),
112
+ ]
113
+ @json = JSON.unparse(@friends.collect {|f| f.to_hash })
114
+ @request = mas_net_http_get(:basic_auth => nil)
115
+ @response = mas_net_http_response(:success, @json)
116
+ @connection = mas_net_http(@response)
117
+ @uris = Twitter::Client.class_eval("@@USER_URIS")
118
+ @twitter.stub!(:create_http_get_request).and_return(@request)
119
+ Twitter::User.stub!(:unmarshal).and_return(@friends)
120
+ Net::HTTP.stub!(:new).and_return(@connection)
121
+ end
122
+
123
+ it "should create expected HTTP GET request" do
124
+ @twitter.should_receive(:create_http_get_request).with(@uris[:friends], :id => @screen_name).and_return(@request)
125
+ @twitter.my(:friends)
126
+ end
127
+
128
+ it "should bless models returned" do
129
+ @twitter.should_receive(:bless_models).with(@friends).and_return(@friends)
130
+ @twitter.my(:friends)
131
+ end
132
+
133
+ it "should return expected Array of friends" do
134
+ friends = @twitter.my(:friends)
135
+ friends.should eql(@friends)
136
+ end
137
+
138
+ after(:each) do
139
+ nilize(@request, @response, @connection, @twitter, @friends, @screen_name)
140
+ end
141
+ end
@@ -0,0 +1,2 @@
1
+ require File.join(File.dirname(__FILE__), '..', 'spec_helper')
2
+
@@ -0,0 +1,86 @@
1
+ require File.join(File.dirname(__FILE__), '..', 'spec_helper')
2
+
3
+ describe Twitter::Client, ".configure" do
4
+ it "should respond to :configure class method" do
5
+ Twitter::Client.respond_to?(:configure).should be(true)
6
+ end
7
+
8
+ it "should not accept calls that do not specify blocks" do
9
+ lambda {
10
+ Twitter::Client.configure()
11
+ }.should raise_error(ArgumentError)
12
+ end
13
+ end
14
+
15
+ describe Twitter::Client, ".configure with mocked @config" do
16
+ before(:each) do
17
+ @block_invoked = false
18
+ @conf_yielded = false
19
+ @conf = mock(Twitter::Config)
20
+ @block = Proc.new do |conf|
21
+ @block_invoked = true
22
+ @conf_yielded = true if conf.is_a?(Twitter::Config)
23
+ end
24
+ Twitter::Config.stub!(:new).and_return(@conf)
25
+ end
26
+
27
+ it "should not raise an error when passing block" do
28
+ lambda {
29
+ Twitter::Client.configure(&@block)
30
+ }.should_not raise_error
31
+ end
32
+
33
+ it "should yield a Twitter::Client object to block" do
34
+ Twitter::Client.configure(&@block)
35
+ @block_invoked.should be(true)
36
+ @conf_yielded.should be(true)
37
+ end
38
+
39
+ after(:each) do
40
+ nilize(@block, @block_invoked, @conf, @conf_yielded)
41
+ end
42
+ end
43
+
44
+ describe Twitter::Config, "#eql?" do
45
+ before(:each) do
46
+ @protocol = :ssl
47
+ @host = 'twitter.com'
48
+ @port = 443
49
+ @proxy_host = 'myproxy.host'
50
+ @proxy_port = 8080
51
+ attrs = {
52
+ :protocol => @protocol,
53
+ :host => @host,
54
+ :port => @port,
55
+ :proxy_host => @proxy_host,
56
+ :proxy_port => @proxy_port,
57
+ }
58
+ @obj = stubbed_twitter_config(Twitter::Config.new, attrs)
59
+ @other = stubbed_twitter_config(Twitter::Config.new, attrs)
60
+
61
+ @different = stubbed_twitter_config(Twitter::Config.new, attrs.merge(:proxy_host => 'different.proxy'))
62
+ @same = @obj
63
+ end
64
+
65
+ it "should return true for two logically equivalent objects" do
66
+ @obj.should be_eql(@other)
67
+ @other.should be_eql(@obj)
68
+ end
69
+
70
+ it "should return false for two logically different objects" do
71
+ @obj.should_not be_eql(@different)
72
+ @different.should_not be_eql(@obj)
73
+ @other.should_not be_eql(@different)
74
+ @different.should_not be_eql(@other)
75
+ end
76
+
77
+ it "should return true for references to the same object in memory" do
78
+ @obj.should eql(@same)
79
+ @same.should eql(@obj)
80
+ @other.should eql(@other)
81
+ end
82
+
83
+ after(:each) do
84
+ nilize(@protocol, @host, @port, @proxy_host, @proxy_port, @obj, @other, @different, @same)
85
+ end
86
+ end
@@ -0,0 +1,15 @@
1
+ require File.join(File.dirname(__FILE__), '..', 'spec_helper')
2
+
3
+ describe Twitter::Client, ".from_config" do
4
+ before(:each) do
5
+
6
+ end
7
+
8
+ it "should load YAML file for instance configuration" do
9
+
10
+ end
11
+
12
+ after(:each) do
13
+
14
+ end
15
+ end