tweetwine 0.4.1 → 0.4.2
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.
- data/CHANGELOG.rdoc +6 -0
- data/Rakefile +22 -23
- data/lib/tweetwine/cli.rb +167 -165
- data/lib/tweetwine/config.rb +3 -2
- data/lib/tweetwine/exceptions.rb +1 -0
- data/lib/tweetwine/version.rb +1 -1
- data/project.rb +16 -16
- data/test/fixture/{config_example.yaml → config_integration.yaml} +0 -0
- data/test/fixture/oauth.rb +11 -11
- data/test/{test_helper.rb → helper.rb} +16 -7
- data/test/{example/authorization_example.rb → integration/authorization_test.rb} +17 -17
- data/test/integration/global_options_test.rb +67 -0
- data/test/integration/helper.rb +70 -0
- data/test/integration/invalid_config_file_test.rb +28 -0
- data/test/integration/search_statuses_test.rb +81 -0
- data/test/integration/show_followers_test.rb +24 -0
- data/test/integration/show_friends_test.rb +24 -0
- data/test/integration/show_home_test.rb +47 -0
- data/test/integration/show_mentions_test.rb +24 -0
- data/test/integration/show_user_test.rb +48 -0
- data/test/integration/update_status_test.rb +199 -0
- data/test/integration/use_http_proxy_test.rb +71 -0
- data/test/{example/user_help_example.rb → integration/user_help_test.rb} +36 -36
- data/test/unit/character_encoding_test.rb +19 -15
- data/test/unit/cli_test.rb +9 -10
- data/test/unit/config_test.rb +73 -71
- data/test/unit/helper.rb +108 -0
- data/test/unit/http_test.rb +39 -39
- data/test/unit/oauth_test.rb +15 -16
- data/test/unit/obfuscate_test.rb +4 -4
- data/test/unit/option_parser_test.rb +12 -12
- data/test/unit/promise_test.rb +10 -10
- data/test/unit/support_test.rb +44 -45
- data/test/unit/tweet_helper.rb +1 -1
- data/test/unit/tweet_test.rb +42 -42
- data/test/unit/twitter_test.rb +300 -303
- data/test/unit/ui_test.rb +310 -312
- data/test/unit/uri_test.rb +7 -7
- data/test/unit/url_shortener_test.rb +77 -79
- data/tweetwine.gemspec +6 -15
- metadata +55 -145
- data/test/example/example_helper.rb +0 -58
- data/test/example/global_options_example.rb +0 -64
- data/test/example/search_statuses_example.rb +0 -76
- data/test/example/show_followers_example.rb +0 -24
- data/test/example/show_friends_example.rb +0 -24
- data/test/example/show_home_example.rb +0 -44
- data/test/example/show_mentions_example.rb +0 -24
- data/test/example/show_user_example.rb +0 -44
- data/test/example/update_status_example.rb +0 -183
- data/test/example/use_http_proxy_example.rb +0 -68
- data/test/unit/unit_helper.rb +0 -111
data/test/unit/obfuscate_test.rb
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
# coding: utf-8
|
2
2
|
|
3
|
-
require
|
3
|
+
require 'unit/helper'
|
4
4
|
|
5
|
-
module Tweetwine::Test
|
5
|
+
module Tweetwine::Test::Unit
|
6
6
|
|
7
|
-
class ObfuscateTest <
|
7
|
+
class ObfuscateTest < TestCase
|
8
8
|
include Obfuscate
|
9
9
|
|
10
|
-
|
10
|
+
it "obfuscates symmetrically" do
|
11
11
|
str = 'hey, jack'
|
12
12
|
assert_equal(str, obfuscate(obfuscate(str)))
|
13
13
|
end
|
@@ -1,11 +1,11 @@
|
|
1
1
|
# coding: utf-8
|
2
2
|
|
3
|
-
require
|
3
|
+
require 'unit/helper'
|
4
4
|
|
5
|
-
module Tweetwine::Test
|
5
|
+
module Tweetwine::Test::Unit
|
6
6
|
|
7
|
-
class OptionParserTest <
|
8
|
-
|
7
|
+
class OptionParserTest < TestCase
|
8
|
+
before do
|
9
9
|
@parser = OptionParser.new do |parser, options|
|
10
10
|
parser.on '-c', '--colors', 'Enable colors.' do
|
11
11
|
options[:colors] = true
|
@@ -16,41 +16,41 @@ class OptionParserTest < UnitTestCase
|
|
16
16
|
end
|
17
17
|
end
|
18
18
|
|
19
|
-
|
19
|
+
it "returns empty options if no options (no default values)" do
|
20
20
|
options = @parser.parse %w{}
|
21
21
|
assert options.empty?
|
22
22
|
end
|
23
23
|
|
24
|
-
|
24
|
+
it "returns only options that occurred (no default values)" do
|
25
25
|
options = @parser.parse %w{-u jack}
|
26
26
|
assert_equal({:username => 'jack'}, options)
|
27
27
|
end
|
28
28
|
|
29
|
-
|
29
|
+
it "returns copy of options after parsing" do
|
30
30
|
options1 = @parser.parse %w{-u jack}
|
31
31
|
options2 = @parser.parse %w{-c}
|
32
32
|
assert_equal({:username => 'jack'}, options1)
|
33
33
|
assert_equal({:colors => true}, options2)
|
34
34
|
end
|
35
35
|
|
36
|
-
|
36
|
+
it "parses from beginning, removing recognized options" do
|
37
37
|
args = %w{-u jack foo bar}
|
38
38
|
options = @parser.parse args
|
39
39
|
assert_equal(%w{foo bar}, args)
|
40
40
|
end
|
41
41
|
|
42
|
-
|
42
|
+
it "parses from beginning, leaving option-like arguments after non-option arguments in place" do
|
43
43
|
args = %w{-c foo -u jack bar}
|
44
44
|
options = @parser.parse args
|
45
45
|
assert_equal(%w{foo -u jack bar}, args)
|
46
46
|
assert_equal({:colors => true}, options)
|
47
47
|
end
|
48
48
|
|
49
|
-
|
50
|
-
|
49
|
+
it "raises exception upon unrecognized option" do
|
50
|
+
assert_raises(CommandLineError) { @parser.parse %w{-d} }
|
51
51
|
end
|
52
52
|
|
53
|
-
|
53
|
+
it "describes option syntax" do
|
54
54
|
description = @parser.help.split("\n")
|
55
55
|
assert_match(/\A\s+\-c, \-\-colors\s+Enable colors.\z/, description[0])
|
56
56
|
assert_match(/\A\s+\-u, \-\-username <user>\s+Specify user.\z/, description[1])
|
data/test/unit/promise_test.rb
CHANGED
@@ -1,11 +1,11 @@
|
|
1
1
|
# coding: utf-8
|
2
2
|
|
3
|
-
require
|
3
|
+
require 'unit/helper'
|
4
4
|
|
5
|
-
module Tweetwine::Test
|
5
|
+
module Tweetwine::Test::Unit
|
6
6
|
|
7
|
-
class PromiseTest <
|
8
|
-
|
7
|
+
class PromiseTest < TestCase
|
8
|
+
before do
|
9
9
|
@result = nil
|
10
10
|
@action_called = 0
|
11
11
|
@promise = Promise.new do
|
@@ -14,13 +14,13 @@ class PromiseTest < UnitTestCase
|
|
14
14
|
end
|
15
15
|
end
|
16
16
|
|
17
|
-
|
17
|
+
it "evaluates action when calling a method" do
|
18
18
|
result = @promise.to_i
|
19
19
|
assert_same(@result, result)
|
20
20
|
assert_equal(1, @action_called)
|
21
21
|
end
|
22
22
|
|
23
|
-
|
23
|
+
it "memoizes already evaluated action" do
|
24
24
|
result = @promise.to_i
|
25
25
|
assert_same(@result, result)
|
26
26
|
result = @promise.to_i
|
@@ -28,22 +28,22 @@ class PromiseTest < UnitTestCase
|
|
28
28
|
assert_equal(1, @action_called)
|
29
29
|
end
|
30
30
|
|
31
|
-
|
31
|
+
it "inspects the proxy object if action is not evaluated" do
|
32
32
|
assert_match(/^#<Tweetwine::Promise/, @promise.inspect)
|
33
33
|
assert_equal(0, @action_called)
|
34
34
|
end
|
35
35
|
|
36
|
-
|
36
|
+
it "inspects the evaluated object if action is evaluated" do
|
37
37
|
eval_action
|
38
38
|
assert_match(/^\d$/, @promise.inspect)
|
39
39
|
end
|
40
40
|
|
41
|
-
|
41
|
+
it "passes #object_id call to the evaluation result" do
|
42
42
|
eval_action # in order to have @result set
|
43
43
|
assert_equal(@result.object_id, @promise.object_id)
|
44
44
|
end
|
45
45
|
|
46
|
-
|
46
|
+
it "passes #to_s call to the evaluation result" do
|
47
47
|
eval_action # in order to have @result set
|
48
48
|
assert_equal(@result.to_s, @promise.to_s)
|
49
49
|
end
|
data/test/unit/support_test.rb
CHANGED
@@ -1,15 +1,14 @@
|
|
1
1
|
# coding: utf-8
|
2
2
|
|
3
|
-
require
|
3
|
+
require 'unit/helper'
|
4
|
+
require 'time'
|
4
5
|
|
5
|
-
|
6
|
+
module Tweetwine::Test::Unit
|
6
7
|
|
7
|
-
|
8
|
-
|
9
|
-
class SupportTest < UnitTestCase
|
8
|
+
class SupportTest < TestCase
|
10
9
|
include Support
|
11
10
|
|
12
|
-
|
11
|
+
describe "for determining emptiness" do
|
13
12
|
[
|
14
13
|
[nil, true, "nil"],
|
15
14
|
["", true, "empty string"],
|
@@ -17,27 +16,27 @@ class SupportTest < UnitTestCase
|
|
17
16
|
[[], true, "empty array"],
|
18
17
|
[%w{a b}, false, "nonempty array"]
|
19
18
|
].each do |(subject, emptiness, desc)|
|
20
|
-
|
19
|
+
it "returns #{emptiness} for blank? with #{desc}" do
|
21
20
|
assert_equal emptiness, blank?(subject)
|
22
21
|
end
|
23
22
|
|
24
|
-
|
23
|
+
it "returns #{!emptiness} for present? with #{desc}" do
|
25
24
|
assert_equal !emptiness, present?(subject)
|
26
25
|
end
|
27
26
|
|
28
|
-
|
27
|
+
it "returns non-empty subject for presence, when subject is #{desc}" do
|
29
28
|
actual = presence(subject)
|
30
29
|
expected = present?(subject) ? subject : nil
|
31
30
|
assert_same expected, actual
|
32
31
|
end
|
33
32
|
|
34
|
-
|
33
|
+
it "returns value of block for presence, when subject is #{desc}" do
|
35
34
|
actual = presence(subject) { |s| s.size }
|
36
35
|
expected = present?(subject) ? subject.size : nil
|
37
36
|
assert_same expected, actual
|
38
37
|
end
|
39
38
|
|
40
|
-
|
39
|
+
it "allows presence to be used with || operator, when subject is #{desc}" do
|
41
40
|
alternative = "hey"
|
42
41
|
actual = presence(subject) || alternative
|
43
42
|
expected = present?(subject) ? subject : alternative
|
@@ -46,8 +45,8 @@ class SupportTest < UnitTestCase
|
|
46
45
|
end
|
47
46
|
end
|
48
47
|
|
49
|
-
|
50
|
-
|
48
|
+
describe "for humanizing time differences" do
|
49
|
+
it "accepts string and time arguments" do
|
51
50
|
start = '2009-01-01 01:01:00'
|
52
51
|
stop = Time.parse '2009-01-01 01:03:00'
|
53
52
|
assert_commutative([2, 'min'], [start, stop]) do |a, b|
|
@@ -55,7 +54,7 @@ class SupportTest < UnitTestCase
|
|
55
54
|
end
|
56
55
|
end
|
57
56
|
|
58
|
-
|
57
|
+
it "uses second granularity for time differences smaller than a minute" do
|
59
58
|
[
|
60
59
|
[0, '2009-01-01 01:00:00', '2009-01-01 01:00:00'],
|
61
60
|
[1, '2009-01-01 00:00:59', '2009-01-01 00:01:00'],
|
@@ -68,7 +67,7 @@ class SupportTest < UnitTestCase
|
|
68
67
|
end
|
69
68
|
end
|
70
69
|
|
71
|
-
|
70
|
+
it "uses minute granularity for time differences greater than a minute but smaller than an hour" do
|
72
71
|
[
|
73
72
|
[1, '2009-01-01 01:00:00', '2009-01-01 01:01:00'],
|
74
73
|
[2, '2009-01-01 01:01:00', '2009-01-01 01:03:29'],
|
@@ -83,7 +82,7 @@ class SupportTest < UnitTestCase
|
|
83
82
|
end
|
84
83
|
end
|
85
84
|
|
86
|
-
|
85
|
+
it "uses hour granularity for time differences greater than an hour but smaller than a day" do
|
87
86
|
[
|
88
87
|
[1, 'hour', '2009-01-01 01:00', '2009-01-01 02:00'],
|
89
88
|
[2, 'hours', '2009-01-01 01:00', '2009-01-01 03:00'],
|
@@ -96,7 +95,7 @@ class SupportTest < UnitTestCase
|
|
96
95
|
end
|
97
96
|
end
|
98
97
|
|
99
|
-
|
98
|
+
it "uses day granularity for time differences greater than a day" do
|
100
99
|
[
|
101
100
|
[1, 'day', '2009-01-01 01:00', '2009-01-02 01:00'],
|
102
101
|
[2, 'days', '2009-01-01 01:00', '2009-01-03 01:00'],
|
@@ -110,7 +109,7 @@ class SupportTest < UnitTestCase
|
|
110
109
|
end
|
111
110
|
end
|
112
111
|
|
113
|
-
|
112
|
+
describe "for recursively copying a hash" do
|
114
113
|
ALL_KEYS_STRINGS = {
|
115
114
|
'alpha' => 'A',
|
116
115
|
'beta' => 'B',
|
@@ -130,7 +129,7 @@ class SupportTest < UnitTestCase
|
|
130
129
|
}
|
131
130
|
}
|
132
131
|
|
133
|
-
|
132
|
+
it "stringifies hash keys" do
|
134
133
|
given = {
|
135
134
|
:alpha => 'A',
|
136
135
|
'beta' => 'B',
|
@@ -143,7 +142,7 @@ class SupportTest < UnitTestCase
|
|
143
142
|
assert_equal ALL_KEYS_STRINGS, stringify_hash_keys(given)
|
144
143
|
end
|
145
144
|
|
146
|
-
|
145
|
+
it "symbolizes hash keys" do
|
147
146
|
given = {
|
148
147
|
'alpha' => 'A',
|
149
148
|
:beta => 'B',
|
@@ -156,30 +155,30 @@ class SupportTest < UnitTestCase
|
|
156
155
|
assert_equal ALL_KEYS_SYMBOLS, symbolize_hash_keys(given)
|
157
156
|
end
|
158
157
|
|
159
|
-
|
158
|
+
it "has symmetric property for stringify and symbolize" do
|
160
159
|
assert_equal ALL_KEYS_STRINGS, stringify_hash_keys(symbolize_hash_keys(ALL_KEYS_STRINGS))
|
161
160
|
assert_equal ALL_KEYS_SYMBOLS, symbolize_hash_keys(stringify_hash_keys(ALL_KEYS_SYMBOLS))
|
162
161
|
end
|
163
162
|
end
|
164
163
|
|
165
|
-
|
166
|
-
|
164
|
+
describe "for parsing integers from strings, with minimum and default values, and naming parameter" do
|
165
|
+
it "returns an integer from its string presentation" do
|
167
166
|
assert_equal 6, parse_int_gt("6", 8, 4, "ethical working hours per day")
|
168
167
|
end
|
169
168
|
|
170
|
-
|
169
|
+
it "returns default value if the string parameter is falsy" do
|
171
170
|
assert_equal 8, parse_int_gt(nil, 8, 4, "ethical working hours per day")
|
172
171
|
assert_equal 8, parse_int_gt(false, 8, 4, "ethical working hours per day")
|
173
172
|
end
|
174
173
|
|
175
|
-
|
176
|
-
|
177
|
-
|
174
|
+
it "raises an error if the parsed value is less than the minimum parameter" do
|
175
|
+
assert_raises(ArgumentError) { parse_int_gt(3, 8, 4, "ethical working hours per day") }
|
176
|
+
assert_raises(ArgumentError) { parse_int_gt("3", 8, 4, "ethical working hours per day") }
|
178
177
|
end
|
179
178
|
end
|
180
179
|
|
181
|
-
|
182
|
-
|
180
|
+
describe "for replacing the contents of a string with a regexp that uses group syntax" do
|
181
|
+
it "replaces the contents of the string by using a single matching group of the regexp" do
|
183
182
|
assert_equal "hEllo", str_gsub_by_group("hello", /.+(e)/) { |s| s.upcase }
|
184
183
|
assert_equal "hEllO", str_gsub_by_group("hello", /([aeio])/) { |s| s.upcase }
|
185
184
|
assert_equal "h<b>e</b>ll<b>o</b>", str_gsub_by_group("hello", /([aeio])/) { |s| "<b>#{s}</b>" }
|
@@ -187,7 +186,7 @@ class SupportTest < UnitTestCase
|
|
187
186
|
assert_equal "hell", str_gsub_by_group("hello", /.+([io])/) { |s| "" }
|
188
187
|
end
|
189
188
|
|
190
|
-
|
189
|
+
it "replaces the contents of the string by using multiple matching groups of the regexp" do
|
191
190
|
assert_equal "hEllO", str_gsub_by_group("hello", /([ae]).+([io])/) { |s| s.upcase }
|
192
191
|
assert_equal "h<b>e</b>ll<b>o</b>", str_gsub_by_group("hello", /([ae]).+([io])/) { |s| "<b>#{s}</b>" }
|
193
192
|
assert_equal "hll", str_gsub_by_group("hello", /.+([ae]).+([io])/) { |s| "" }
|
@@ -195,32 +194,32 @@ class SupportTest < UnitTestCase
|
|
195
194
|
assert_equal "hEllo", str_gsub_by_group("hello", /^(a)|.+(e)/) { |s| s.upcase }
|
196
195
|
end
|
197
196
|
|
198
|
-
|
197
|
+
it "replaces the contents of the string by using the whole regexp if there are no groups in the regexp an the regexp matches" do
|
199
198
|
assert_equal "", str_gsub_by_group("", /el/) { |s| s.upcase }
|
200
199
|
assert_equal "hELlo", str_gsub_by_group("hello", /el/) { |s| s.upcase }
|
201
200
|
assert_equal "h<b>e</b>ll<b>o</b>", str_gsub_by_group("hello", /e|o/) { |s| "<b>#{s}</b>" }
|
202
201
|
end
|
203
202
|
|
204
|
-
|
203
|
+
it "does not change the contents of the string if the regexp does not match" do
|
205
204
|
assert_equal "", str_gsub_by_group("", /.+([ai])/) { |s| s.upcase }
|
206
205
|
assert_equal "hello", str_gsub_by_group("hello", /.+([ai])/) { |s| s.upcase }
|
207
206
|
assert_equal "hello", str_gsub_by_group("hello", /he(f)/) { |s| s.upcase }
|
208
207
|
end
|
209
208
|
|
210
|
-
|
209
|
+
it "returns a new string as the result, leaving the original string unmodified" do
|
211
210
|
org_str = "hello"
|
212
211
|
new_str = str_gsub_by_group(org_str, /e/) { |s| s.upcase }
|
213
|
-
|
212
|
+
refute_same new_str, org_str
|
214
213
|
assert_equal "hello", org_str
|
215
214
|
assert_equal "hEllo", new_str
|
216
215
|
end
|
217
216
|
|
218
|
-
|
217
|
+
it "works with UTF-8 input" do
|
219
218
|
assert_equal "Ali<b>en</b>³,<b>Pre</b>dator", str_gsub_by_group("Alien³,Predator", /(en).+(Pre)/) { |s| "<b>#{s}</b>" }
|
220
219
|
end
|
221
220
|
end
|
222
221
|
|
223
|
-
|
222
|
+
describe "for unescaping HTML" do
|
224
223
|
[
|
225
224
|
%w{a a},
|
226
225
|
%w{B B},
|
@@ -230,7 +229,7 @@ class SupportTest < UnitTestCase
|
|
230
229
|
%w{_ underscore},
|
231
230
|
%w{+ plus}
|
232
231
|
].each do |(char, desc)|
|
233
|
-
|
232
|
+
it "does not affect already unescaped characters, case #{desc}" do
|
234
233
|
assert_equal char, unescape_html(char)
|
235
234
|
end
|
236
235
|
end
|
@@ -242,14 +241,14 @@ class SupportTest < UnitTestCase
|
|
242
241
|
%w{" "},
|
243
242
|
%W{ \ }
|
244
243
|
].each do |(input, expected)|
|
245
|
-
|
244
|
+
it "unescapes HTML-escaped characters, case '#{input}'" do
|
246
245
|
assert_equal expected, unescape_html(input)
|
247
246
|
end
|
248
247
|
end
|
249
248
|
end
|
250
249
|
|
251
|
-
|
252
|
-
|
250
|
+
describe "for traversing a hash with a path expression for finding a value" do
|
251
|
+
before do
|
253
252
|
@inner_hash = {
|
254
253
|
:salmon => "slick"
|
255
254
|
}
|
@@ -262,22 +261,22 @@ class SupportTest < UnitTestCase
|
|
262
261
|
@outer_hash.default = "no such element in outer hash"
|
263
262
|
end
|
264
263
|
|
265
|
-
|
264
|
+
it "supports both a non-array and a single element array path for finding the value" do
|
266
265
|
assert_equal @outer_hash[:simple], find_hash_path(@outer_hash, :simple)
|
267
266
|
assert_equal @outer_hash[:simple], find_hash_path(@outer_hash, [:simple])
|
268
267
|
end
|
269
268
|
|
270
|
-
|
269
|
+
it "finds a nested value with an array path" do
|
271
270
|
assert_equal @inner_hash[:salmon], find_hash_path(@outer_hash, [:inner, :salmon])
|
272
271
|
end
|
273
272
|
|
274
|
-
|
273
|
+
it "returns the default value of the hash if the value cannot be found" do
|
275
274
|
assert_equal @outer_hash.default, find_hash_path(@outer_hash, :difficult)
|
276
275
|
assert_equal @inner_hash.default, find_hash_path(@outer_hash, [:inner, :cucumber])
|
277
276
|
assert_equal @outer_hash.default, find_hash_path(@outer_hash, [:fishy, :no_such])
|
278
277
|
end
|
279
278
|
|
280
|
-
|
279
|
+
it "returns the default value of the hash if invalid path value" do
|
281
280
|
[
|
282
281
|
nil,
|
283
282
|
[:no_such, nil],
|
@@ -289,7 +288,7 @@ class SupportTest < UnitTestCase
|
|
289
288
|
end
|
290
289
|
end
|
291
290
|
|
292
|
-
|
291
|
+
it "returns nil if nil hash value" do
|
293
292
|
assert_equal nil, find_hash_path(nil, [:salmon])
|
294
293
|
end
|
295
294
|
end
|
data/test/unit/tweet_helper.rb
CHANGED
data/test/unit/tweet_test.rb
CHANGED
@@ -1,150 +1,150 @@
|
|
1
1
|
# coding: utf-8
|
2
2
|
|
3
|
-
require '
|
4
|
-
require 'tweet_helper'
|
3
|
+
require 'unit/helper'
|
4
|
+
require 'unit/tweet_helper'
|
5
5
|
|
6
|
-
module Tweetwine::Test
|
6
|
+
module Tweetwine::Test::Unit
|
7
7
|
|
8
|
-
class TweetTest <
|
8
|
+
class TweetTest < TestCase
|
9
9
|
include TweetHelper
|
10
10
|
|
11
|
-
|
12
|
-
|
13
|
-
|
11
|
+
describe "for initialization" do
|
12
|
+
it "raises exception if from user field is not found" do
|
13
|
+
assert_raises(ArgumentError) { create_tweet(:from_user => nil) }
|
14
14
|
end
|
15
15
|
end
|
16
16
|
|
17
|
-
|
18
|
-
|
17
|
+
describe "for equality" do
|
18
|
+
it "equals to another tweet with same content" do
|
19
19
|
status = 'foo'
|
20
20
|
first = create_tweet(:status => status)
|
21
21
|
second = create_tweet(:status => status)
|
22
22
|
assert_equal first, second
|
23
23
|
end
|
24
24
|
|
25
|
-
|
25
|
+
it "does not equal to another tweet with different content" do
|
26
26
|
first = create_tweet(:status => 'ahem')
|
27
27
|
second = create_tweet(:status => 'hmph')
|
28
|
-
|
28
|
+
refute_equal first, second
|
29
29
|
end
|
30
30
|
end
|
31
31
|
|
32
|
-
|
33
|
-
|
32
|
+
describe "for handling regular tweet" do
|
33
|
+
before do
|
34
34
|
@status = 'lurking'
|
35
35
|
@tweet = create_tweet(:status => @status)
|
36
36
|
end
|
37
37
|
|
38
|
-
|
38
|
+
it "detects tweet as not retweet" do
|
39
39
|
assert_equal false, @tweet.retweet?
|
40
40
|
end
|
41
41
|
|
42
|
-
|
42
|
+
it "does not have retweeting user" do
|
43
43
|
assert_nil @tweet.rt_user
|
44
44
|
end
|
45
45
|
|
46
|
-
|
46
|
+
it "has originating user field" do
|
47
47
|
assert_equal(DEFAULT_FIELD_VALUES[:from_user], @tweet.from_user)
|
48
48
|
end
|
49
49
|
|
50
|
-
|
50
|
+
it "detects tweet as not being a reply" do
|
51
51
|
assert_equal false, @tweet.reply?
|
52
52
|
end
|
53
53
|
|
54
|
-
|
54
|
+
it "has no destination user" do
|
55
55
|
assert_nil @tweet.to_user
|
56
56
|
end
|
57
57
|
|
58
|
-
|
58
|
+
it "detects having creation timestamp" do
|
59
59
|
assert_equal true, @tweet.timestamped?
|
60
60
|
end
|
61
61
|
|
62
|
-
|
62
|
+
it "has creation timestamp" do
|
63
63
|
assert_equal Time.parse(DEFAULT_FIELD_VALUES[:created_at]), @tweet.created_at
|
64
64
|
end
|
65
65
|
|
66
|
-
|
66
|
+
it "detects having status" do
|
67
67
|
assert_equal true, @tweet.status?
|
68
68
|
end
|
69
69
|
|
70
|
-
|
70
|
+
it "has status" do
|
71
71
|
assert_equal @status, @tweet.status
|
72
72
|
end
|
73
73
|
end
|
74
74
|
|
75
|
-
|
76
|
-
|
75
|
+
describe "for handling replying tweet" do
|
76
|
+
before do
|
77
77
|
@to_user = 'jacko'
|
78
78
|
@tweet = create_tweet(:to_user => @to_user)
|
79
79
|
end
|
80
80
|
|
81
|
-
|
81
|
+
it "detects tweet as being a reply" do
|
82
82
|
assert_equal true, @tweet.reply?
|
83
83
|
end
|
84
84
|
|
85
|
-
|
85
|
+
it "has destination user" do
|
86
86
|
assert_equal @to_user, @tweet.to_user
|
87
87
|
end
|
88
88
|
end
|
89
89
|
|
90
|
-
|
91
|
-
|
90
|
+
describe "for handling retweet" do
|
91
|
+
before do
|
92
92
|
@rt_user = 'jonathan'
|
93
93
|
@status = 'tweet worth retweeting'
|
94
94
|
@tweet = create_tweet(:rt_user => @rt_user, :status => @status)
|
95
95
|
end
|
96
96
|
|
97
|
-
|
97
|
+
it "detects tweet as retweet" do
|
98
98
|
assert_equal true, @tweet.retweet?
|
99
99
|
end
|
100
100
|
|
101
|
-
|
101
|
+
it "has retweeting user" do
|
102
102
|
assert_equal @rt_user, @tweet.rt_user
|
103
103
|
end
|
104
104
|
|
105
|
-
|
105
|
+
it "has originating user" do
|
106
106
|
assert_equal DEFAULT_FIELD_VALUES[:from_user], @tweet.from_user
|
107
107
|
end
|
108
108
|
|
109
|
-
|
109
|
+
it "detects having creation timestamp of the original tweet" do
|
110
110
|
assert_equal true, @tweet.timestamped?
|
111
111
|
end
|
112
112
|
|
113
|
-
|
113
|
+
it "has creation timestamp of the original tweet" do
|
114
114
|
assert_equal Time.parse(DEFAULT_FIELD_VALUES[:created_at]), @tweet.created_at
|
115
115
|
end
|
116
116
|
|
117
|
-
|
117
|
+
it "detects having status of the original tweet" do
|
118
118
|
assert_equal true, @tweet.status?
|
119
119
|
end
|
120
120
|
|
121
|
-
|
121
|
+
it "has status of the original tweet" do
|
122
122
|
assert_equal @status, @tweet.status
|
123
123
|
end
|
124
124
|
end
|
125
125
|
|
126
|
-
|
127
|
-
|
126
|
+
describe "for handling tweet with just user info" do
|
127
|
+
before do
|
128
128
|
@tweet = create_tweet(:to_user => nil, :status => nil, :created_at => nil)
|
129
129
|
end
|
130
130
|
|
131
|
-
|
131
|
+
it "detects tweet as not retweet" do
|
132
132
|
assert_equal false, @tweet.retweet?
|
133
133
|
end
|
134
134
|
|
135
|
-
|
135
|
+
it "has originating user field" do
|
136
136
|
assert_equal(DEFAULT_FIELD_VALUES[:from_user], @tweet.from_user)
|
137
137
|
end
|
138
138
|
|
139
|
-
|
139
|
+
it "detects tweet as not being a reply" do
|
140
140
|
assert_equal false, @tweet.reply?
|
141
141
|
end
|
142
142
|
|
143
|
-
|
143
|
+
it "detects having no creation timestamp" do
|
144
144
|
assert_equal false, @tweet.timestamped?
|
145
145
|
end
|
146
146
|
|
147
|
-
|
147
|
+
it "detects having no status" do
|
148
148
|
assert_equal false, @tweet.status?
|
149
149
|
end
|
150
150
|
end
|