twitter4r 0.1.1 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -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