feedjira 1.3.1 → 1.4.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.
- checksums.yaml +4 -4
- data/.travis.yml +5 -0
- data/CHANGELOG.md +14 -0
- data/Gemfile +1 -0
- data/feedjira.gemspec +4 -4
- data/lib/feedjira/feed_utilities.rb +2 -1
- data/lib/feedjira/version.rb +1 -1
- data/spec/feedjira/feed_entry_utilities_spec.rb +11 -11
- data/spec/feedjira/feed_spec.rb +165 -164
- data/spec/feedjira/feed_utilities_spec.rb +35 -35
- data/spec/feedjira/parser/atom_entry_spec.rb +22 -26
- data/spec/feedjira/parser/atom_feed_burner_entry_spec.rb +9 -9
- data/spec/feedjira/parser/atom_feed_burner_spec.rb +12 -12
- data/spec/feedjira/parser/atom_spec.rb +20 -18
- data/spec/feedjira/parser/google_docs_atom_entry_spec.rb +3 -3
- data/spec/feedjira/parser/google_docs_atom_spec.rb +5 -5
- data/spec/feedjira/parser/itunes_rss_item_spec.rb +15 -15
- data/spec/feedjira/parser/itunes_rss_owner_spec.rb +2 -2
- data/spec/feedjira/parser/itunes_rss_spec.rb +15 -15
- data/spec/feedjira/parser/rss_entry_spec.rb +18 -23
- data/spec/feedjira/parser/rss_feed_burner_entry_spec.rb +18 -23
- data/spec/feedjira/parser/rss_feed_burner_spec.rb +13 -13
- data/spec/feedjira/parser/rss_spec.rb +11 -11
- data/spec/feedjira/preprocessor_spec.rb +2 -2
- data/spec/sample_feeds/itunes.xml +0 -1
- data/spec/spec_helper.rb +2 -0
- metadata +11 -11
data/spec/feedjira/feed_spec.rb
CHANGED
@@ -16,15 +16,15 @@ describe Feedjira::Feed do
|
|
16
16
|
end
|
17
17
|
|
18
18
|
it "should parse the added element out of Atom feeds" do
|
19
|
-
Feedjira::Feed.parse(sample_wfw_feed).generator.
|
19
|
+
expect(Feedjira::Feed.parse(sample_wfw_feed).generator).to eq "TypePad"
|
20
20
|
end
|
21
21
|
|
22
22
|
it "should parse the added element out of Atom Feedburner feeds" do
|
23
|
-
Feedjira::Parser::Atom.new.
|
23
|
+
expect(Feedjira::Parser::Atom.new).to respond_to(:generator)
|
24
24
|
end
|
25
25
|
|
26
26
|
it "should parse the added element out of RSS feeds" do
|
27
|
-
Feedjira::Parser::RSS.new.
|
27
|
+
expect(Feedjira::Parser::RSS.new).to respond_to(:generator)
|
28
28
|
end
|
29
29
|
end
|
30
30
|
|
@@ -34,15 +34,15 @@ describe Feedjira::Feed do
|
|
34
34
|
end
|
35
35
|
|
36
36
|
it "should parse the added element out of Atom feeds entries" do
|
37
|
-
Feedjira::Feed.parse(sample_wfw_feed).entries.first.comment_rss.
|
37
|
+
expect(Feedjira::Feed.parse(sample_wfw_feed).entries.first.comment_rss).to eq "this is the new val"
|
38
38
|
end
|
39
39
|
|
40
40
|
it "should parse the added element out of Atom Feedburner feeds entries" do
|
41
|
-
Feedjira::Parser::AtomEntry.new.
|
41
|
+
expect(Feedjira::Parser::AtomEntry.new).to respond_to(:comment_rss)
|
42
42
|
end
|
43
43
|
|
44
44
|
it "should parse the added element out of RSS feeds entries" do
|
45
|
-
Feedjira::Parser::RSSEntry.new.
|
45
|
+
expect(Feedjira::Parser::RSSEntry.new).to respond_to(:comment_rss)
|
46
46
|
end
|
47
47
|
end
|
48
48
|
|
@@ -51,7 +51,7 @@ describe Feedjira::Feed do
|
|
51
51
|
|
52
52
|
it 'invokes the parser and passes the xml' do
|
53
53
|
parser = double 'Parser', parse: nil
|
54
|
-
parser.
|
54
|
+
expect(parser).to receive(:parse).with xml
|
55
55
|
Feedjira::Feed.parse_with parser, xml
|
56
56
|
end
|
57
57
|
|
@@ -70,83 +70,83 @@ describe Feedjira::Feed do
|
|
70
70
|
context "when there's an available parser" do
|
71
71
|
it "should parse an rdf feed" do
|
72
72
|
feed = Feedjira::Feed.parse(sample_rdf_feed)
|
73
|
-
feed.title.
|
74
|
-
feed.entries.first.published.
|
75
|
-
feed.entries.size.
|
73
|
+
expect(feed.title).to eq "HREF Considered Harmful"
|
74
|
+
expect(feed.entries.first.published).to eq Time.parse_safely("Tue Sep 02 19:50:07 UTC 2008")
|
75
|
+
expect(feed.entries.size).to eq 10
|
76
76
|
end
|
77
77
|
|
78
78
|
it "should parse an rss feed" do
|
79
79
|
feed = Feedjira::Feed.parse(sample_rss_feed)
|
80
|
-
feed.title.
|
81
|
-
feed.entries.first.published.
|
82
|
-
feed.entries.size.
|
80
|
+
expect(feed.title).to eq "Tender Lovemaking"
|
81
|
+
expect(feed.entries.first.published).to eq Time.parse_safely("Thu Dec 04 17:17:49 UTC 2008")
|
82
|
+
expect(feed.entries.size).to eq 10
|
83
83
|
end
|
84
84
|
|
85
85
|
it "should parse an atom feed" do
|
86
86
|
feed = Feedjira::Feed.parse(sample_atom_feed)
|
87
|
-
feed.title.
|
88
|
-
feed.entries.first.published.
|
89
|
-
feed.entries.size.
|
87
|
+
expect(feed.title).to eq "Amazon Web Services Blog"
|
88
|
+
expect(feed.entries.first.published).to eq Time.parse_safely("Fri Jan 16 18:21:00 UTC 2009")
|
89
|
+
expect(feed.entries.size).to eq 10
|
90
90
|
end
|
91
91
|
|
92
92
|
it "should parse an feedburner atom feed" do
|
93
93
|
feed = Feedjira::Feed.parse(sample_feedburner_atom_feed)
|
94
|
-
feed.title.
|
95
|
-
feed.entries.first.published.
|
96
|
-
feed.entries.size.
|
94
|
+
expect(feed.title).to eq "Paul Dix Explains Nothing"
|
95
|
+
expect(feed.entries.first.published).to eq Time.parse_safely("Thu Jan 22 15:50:22 UTC 2009")
|
96
|
+
expect(feed.entries.size).to eq 5
|
97
97
|
end
|
98
98
|
|
99
99
|
it "should parse an itunes feed" do
|
100
100
|
feed = Feedjira::Feed.parse(sample_itunes_feed)
|
101
|
-
feed.title.
|
102
|
-
feed.entries.first.published.
|
103
|
-
feed.entries.size.
|
101
|
+
expect(feed.title).to eq "All About Everything"
|
102
|
+
expect(feed.entries.first.published).to eq Time.parse_safely("Wed, 15 Jun 2005 19:00:00 GMT")
|
103
|
+
expect(feed.entries.size).to eq 3
|
104
104
|
end
|
105
105
|
end
|
106
106
|
|
107
107
|
context "when there's no available parser" do
|
108
108
|
it "raises Feedjira::NoParserAvailable" do
|
109
|
-
|
109
|
+
expect {
|
110
110
|
Feedjira::Feed.parse("I'm an invalid feed")
|
111
|
-
}.
|
111
|
+
}.to raise_error(Feedjira::NoParserAvailable)
|
112
112
|
end
|
113
113
|
end
|
114
114
|
|
115
115
|
it "should parse an feedburner rss feed" do
|
116
116
|
feed = Feedjira::Feed.parse(sample_rss_feed_burner_feed)
|
117
|
-
feed.title.
|
118
|
-
feed.entries.first.published.
|
119
|
-
feed.entries.size.
|
117
|
+
expect(feed.title).to eq "TechCrunch"
|
118
|
+
expect(feed.entries.first.published).to eq Time.parse_safely("Wed Nov 02 17:25:27 UTC 2011")
|
119
|
+
expect(feed.entries.size).to eq 20
|
120
120
|
end
|
121
121
|
end
|
122
122
|
|
123
123
|
describe "#determine_feed_parser_for_xml" do
|
124
124
|
it 'should return the Feedjira::Parser::GoogleDocsAtom calss for a Google Docs atom feed' do
|
125
|
-
Feedjira::Feed.determine_feed_parser_for_xml(sample_google_docs_list_feed).
|
125
|
+
expect(Feedjira::Feed.determine_feed_parser_for_xml(sample_google_docs_list_feed)).to eq Feedjira::Parser::GoogleDocsAtom
|
126
126
|
end
|
127
127
|
|
128
|
-
it "should return the Feedjira::Parser::Atom class for an atom feed" do
|
129
|
-
Feedjira::Feed.determine_feed_parser_for_xml(sample_atom_feed).
|
128
|
+
it "should return the expect(Feedjira::Parser::Atom class for an atom feed" do
|
129
|
+
expect(Feedjira::Feed.determine_feed_parser_for_xml(sample_atom_feed)).to eq Feedjira::Parser::Atom
|
130
130
|
end
|
131
131
|
|
132
|
-
it "should return the Feedjira::Parser::AtomFeedBurner class for an atom feedburner feed" do
|
133
|
-
Feedjira::Feed.determine_feed_parser_for_xml(sample_feedburner_atom_feed).
|
132
|
+
it "should return the expect(Feedjira::Parser::AtomFeedBurner class for an atom feedburner feed" do
|
133
|
+
expect(Feedjira::Feed.determine_feed_parser_for_xml(sample_feedburner_atom_feed)).to eq Feedjira::Parser::AtomFeedBurner
|
134
134
|
end
|
135
135
|
|
136
|
-
it "should return the Feedjira::Parser::RSS class for an rdf/rss 1.0 feed" do
|
137
|
-
Feedjira::Feed.determine_feed_parser_for_xml(sample_rdf_feed).
|
136
|
+
it "should return the expect(Feedjira::Parser::RSS class for an rdf/rss 1.0 feed" do
|
137
|
+
expect(Feedjira::Feed.determine_feed_parser_for_xml(sample_rdf_feed)).to eq Feedjira::Parser::RSS
|
138
138
|
end
|
139
139
|
|
140
|
-
it "should return the Feedjira::Parser::RSSFeedBurner class for an rss feedburner feed" do
|
141
|
-
Feedjira::Feed.determine_feed_parser_for_xml(sample_rss_feed_burner_feed).
|
140
|
+
it "should return the expect(Feedjira::Parser::RSSFeedBurner class for an rss feedburner feed" do
|
141
|
+
expect(Feedjira::Feed.determine_feed_parser_for_xml(sample_rss_feed_burner_feed)).to eq Feedjira::Parser::RSSFeedBurner
|
142
142
|
end
|
143
143
|
|
144
|
-
it "should return the Feedjira::Parser::RSS object for an rss 2.0 feed" do
|
145
|
-
Feedjira::Feed.determine_feed_parser_for_xml(sample_rss_feed).
|
144
|
+
it "should return the expect(Feedjira::Parser::RSS object for an rss 2.0 feed" do
|
145
|
+
expect(Feedjira::Feed.determine_feed_parser_for_xml(sample_rss_feed)).to eq Feedjira::Parser::RSS
|
146
146
|
end
|
147
147
|
|
148
|
-
it "should return a Feedjira::Parser::RSS object for an itunes feed" do
|
149
|
-
Feedjira::Feed.determine_feed_parser_for_xml(sample_itunes_feed).
|
148
|
+
it "should return a expect(Feedjira::Parser::RSS object for an itunes feed" do
|
149
|
+
expect(Feedjira::Feed.determine_feed_parser_for_xml(sample_itunes_feed)).to eq Feedjira::Parser::ITunesRSS
|
150
150
|
end
|
151
151
|
|
152
152
|
end
|
@@ -165,33 +165,33 @@ describe Feedjira::Feed do
|
|
165
165
|
it "sets defaults on curl" do
|
166
166
|
Feedjira::Feed.setup_easy curl
|
167
167
|
|
168
|
-
curl.headers["User-Agent"].
|
169
|
-
curl.follow_location.
|
168
|
+
expect(curl.headers["User-Agent"]).to eq Feedjira::Feed::USER_AGENT
|
169
|
+
expect(curl.follow_location).to eq true
|
170
170
|
end
|
171
171
|
|
172
172
|
it "allows user agent over-ride" do
|
173
173
|
Feedjira::Feed.setup_easy(curl, user_agent: '007')
|
174
|
-
curl.headers["User-Agent"].
|
174
|
+
expect(curl.headers["User-Agent"]).to eq '007'
|
175
175
|
end
|
176
176
|
|
177
177
|
it "allows to set language" do
|
178
178
|
Feedjira::Feed.setup_easy(curl, language: 'en-US')
|
179
|
-
curl.headers["Accept-Language"].
|
179
|
+
expect(curl.headers["Accept-Language"]).to eq 'en-US'
|
180
180
|
end
|
181
181
|
|
182
182
|
it "enables compression" do
|
183
183
|
Feedjira::Feed.setup_easy(curl, compress: true)
|
184
|
-
curl.headers["Accept-encoding"].
|
184
|
+
expect(curl.headers["Accept-encoding"]).to eq 'gzip, deflate'
|
185
185
|
end
|
186
186
|
|
187
187
|
it "enables compression even when you act like you don't want it" do
|
188
188
|
Feedjira::Feed.setup_easy(curl, compress: false)
|
189
|
-
curl.headers["Accept-encoding"].
|
189
|
+
expect(curl.headers["Accept-encoding"]).to eq 'gzip, deflate'
|
190
190
|
end
|
191
191
|
|
192
192
|
it "sets up http auth" do
|
193
193
|
Feedjira::Feed.setup_easy(curl, http_authentication: ['user', 'pass'])
|
194
|
-
curl.userpwd.
|
194
|
+
expect(curl.userpwd).to eq 'user:pass'
|
195
195
|
end
|
196
196
|
|
197
197
|
it "passes known options to curl" do
|
@@ -212,7 +212,7 @@ describe Feedjira::Feed do
|
|
212
212
|
|
213
213
|
known_options.each do |option|
|
214
214
|
key, value = option
|
215
|
-
curl.send(key).
|
215
|
+
expect(curl.send(key)).to eq value
|
216
216
|
end
|
217
217
|
end
|
218
218
|
|
@@ -224,16 +224,16 @@ describe Feedjira::Feed do
|
|
224
224
|
describe "when adding feed types" do
|
225
225
|
it "should prioritize added types over the built in ones" do
|
226
226
|
feed_text = "Atom asdf"
|
227
|
-
Feedjira::Parser::Atom.
|
227
|
+
allow(Feedjira::Parser::Atom).to receive(:able_to_parse?).and_return(true)
|
228
228
|
new_feed_type = Class.new do
|
229
229
|
def self.able_to_parse?(val)
|
230
230
|
true
|
231
231
|
end
|
232
232
|
end
|
233
233
|
|
234
|
-
new_feed_type.
|
234
|
+
expect(new_feed_type).to be_able_to_parse(feed_text)
|
235
235
|
Feedjira::Feed.add_feed_class(new_feed_type)
|
236
|
-
Feedjira::Feed.determine_feed_parser_for_xml(feed_text).
|
236
|
+
expect(Feedjira::Feed.determine_feed_parser_for_xml(feed_text)).to eq new_feed_type
|
237
237
|
|
238
238
|
# this is a hack so that this doesn't break the rest of the tests
|
239
239
|
Feedjira::Feed.feed_classes.reject! {|o| o == new_feed_type }
|
@@ -246,11 +246,11 @@ describe Feedjira::Feed do
|
|
246
246
|
end
|
247
247
|
|
248
248
|
it "should return the etag from the header if it exists" do
|
249
|
-
Feedjira::Feed.etag_from_header(@header).
|
249
|
+
expect(Feedjira::Feed.etag_from_header(@header)).to eq "ziEyTl4q9GH04BR4jgkImd0GvSE"
|
250
250
|
end
|
251
251
|
|
252
252
|
it "should return nil if there is no etag in the header" do
|
253
|
-
Feedjira::Feed.etag_from_header("foo").
|
253
|
+
expect(Feedjira::Feed.etag_from_header("foo")).to be_nil
|
254
254
|
end
|
255
255
|
|
256
256
|
end
|
@@ -261,11 +261,11 @@ describe Feedjira::Feed do
|
|
261
261
|
end
|
262
262
|
|
263
263
|
it "should return the last modified date from the header if it exists" do
|
264
|
-
Feedjira::Feed.last_modified_from_header(@header).
|
264
|
+
expect(Feedjira::Feed.last_modified_from_header(@header)).to eq Time.parse_safely("Wed, 28 Jan 2009 04:10:32 GMT")
|
265
265
|
end
|
266
266
|
|
267
267
|
it "should return nil if there is no last modified date in the header" do
|
268
|
-
Feedjira::Feed.last_modified_from_header("foo").
|
268
|
+
expect(Feedjira::Feed.last_modified_from_header("foo")).to be_nil
|
269
269
|
end
|
270
270
|
end
|
271
271
|
|
@@ -282,72 +282,73 @@ describe Feedjira::Feed do
|
|
282
282
|
@multi = double('curl_multi', :add => true, :perform => true)
|
283
283
|
@curl_easy = double('curl_easy')
|
284
284
|
@curl = double('curl', :headers => {}, :follow_location= => true, :on_failure => true, :on_complete => true)
|
285
|
-
@curl.
|
285
|
+
allow(@curl).to receive(:on_success).and_yield(@cmock)
|
286
286
|
|
287
|
-
Curl::Multi.
|
288
|
-
Curl::Easy.
|
287
|
+
allow(Curl::Multi).to receive(:new).and_return(@multi)
|
288
|
+
allow(Curl::Easy).to receive(:new).and_yield(@curl).and_return(@curl_easy)
|
289
289
|
end
|
290
290
|
|
291
291
|
it "should set user agent if it's passed as an option" do
|
292
292
|
Feedjira::Feed.fetch_raw(@paul_feed[:url], :user_agent => 'Custom Useragent')
|
293
|
-
@curl.headers['User-Agent'].
|
293
|
+
expect(@curl.headers['User-Agent']).to eq 'Custom Useragent'
|
294
294
|
end
|
295
295
|
|
296
296
|
it "should set user agent to default if it's not passed as an option" do
|
297
297
|
Feedjira::Feed.fetch_raw(@paul_feed[:url])
|
298
|
-
@curl.headers['User-Agent'].
|
298
|
+
expect(@curl.headers['User-Agent']).to eq Feedjira::Feed::USER_AGENT
|
299
299
|
end
|
300
300
|
|
301
301
|
it "should set if modified since as an option if passed" do
|
302
302
|
Feedjira::Feed.fetch_raw(@paul_feed[:url], :if_modified_since => Time.parse_safely("Wed, 28 Jan 2009 04:10:32 GMT"))
|
303
|
-
@curl.headers["If-Modified-Since"].
|
303
|
+
expect(@curl.headers["If-Modified-Since"]).to eq 'Wed, 28 Jan 2009 04:10:32 GMT'
|
304
304
|
end
|
305
305
|
|
306
306
|
it "should set if none match as an option if passed" do
|
307
307
|
Feedjira::Feed.fetch_raw(@paul_feed[:url], :if_none_match => 'ziEyTl4q9GH04BR4jgkImd0GvSE')
|
308
|
-
@curl.headers["If-None-Match"].
|
308
|
+
expect(@curl.headers["If-None-Match"]).to eq 'ziEyTl4q9GH04BR4jgkImd0GvSE'
|
309
309
|
end
|
310
310
|
|
311
311
|
it 'should set userpwd for http basic authentication if :http_authentication is passed' do
|
312
|
-
@curl.
|
312
|
+
expect(@curl).to receive(:userpwd=).with('username:password')
|
313
313
|
Feedjira::Feed.fetch_raw(@paul_feed[:url], :http_authentication => ['username', 'password'])
|
314
314
|
end
|
315
315
|
|
316
316
|
it 'should set accepted encodings' do
|
317
317
|
Feedjira::Feed.fetch_raw(@paul_feed[:url], :compress => true)
|
318
|
-
@curl.headers["Accept-encoding"].
|
318
|
+
expect(@curl.headers["Accept-encoding"]).to eq 'gzip, deflate'
|
319
319
|
end
|
320
320
|
|
321
321
|
it "should return raw xml" do
|
322
|
-
Feedjira::Feed.fetch_raw
|
322
|
+
raw_xml = Feedjira::Feed.fetch_raw @paul_feed[:url]
|
323
|
+
expect(raw_xml).to match /^#{Regexp.escape('<?xml version="1.0" encoding="UTF-8"?>')}/
|
323
324
|
end
|
324
325
|
|
325
326
|
it "should take multiple feed urls and return a hash of urls and response xml" do
|
326
327
|
multi = double('curl_multi', :add => true, :perform => true)
|
327
|
-
Curl::Multi.
|
328
|
+
allow(Curl::Multi).to receive(:new).and_return(multi)
|
328
329
|
|
329
330
|
paul_response = double('paul_response', :header_str => '', :body_str => @paul_feed[:xml] )
|
330
331
|
trotter_response = double('trotter_response', :header_str => '', :body_str => @trotter_feed[:xml] )
|
331
332
|
|
332
333
|
paul_curl = double('paul_curl', :headers => {}, :follow_location= => true, :on_failure => true, :on_complete => true)
|
333
|
-
paul_curl.
|
334
|
+
allow(paul_curl).to receive(:on_success).and_yield(paul_response)
|
334
335
|
|
335
336
|
trotter_curl = double('trotter_curl', :headers => {}, :follow_location= => true, :on_failure => true, :on_complete => true)
|
336
|
-
trotter_curl.
|
337
|
+
allow(trotter_curl).to receive(:on_success).and_yield(trotter_response)
|
337
338
|
|
338
|
-
Curl::Easy.
|
339
|
-
Curl::Easy.
|
339
|
+
expect(Curl::Easy).to receive(:new).with(@paul_feed[:url]).ordered.and_yield(paul_curl)
|
340
|
+
expect(Curl::Easy).to receive(:new).with(@trotter_feed[:url]).ordered.and_yield(trotter_curl)
|
340
341
|
|
341
342
|
results = Feedjira::Feed.fetch_raw([@paul_feed[:url], @trotter_feed[:url]])
|
342
|
-
results.keys.
|
343
|
-
results.keys.
|
344
|
-
results[@paul_feed[:url]].
|
345
|
-
results[@trotter_feed[:url]].
|
343
|
+
expect(results.keys).to include(@paul_feed[:url])
|
344
|
+
expect(results.keys).to include(@trotter_feed[:url])
|
345
|
+
expect(results[@paul_feed[:url]]).to match /Paul Dix/
|
346
|
+
expect(results[@trotter_feed[:url]]).to match /Trotter Cashion/
|
346
347
|
end
|
347
348
|
|
348
349
|
it "should always return a hash when passed an array" do
|
349
350
|
results = Feedjira::Feed.fetch_raw([@paul_feed[:url]])
|
350
|
-
results.class.
|
351
|
+
expect(results.class).to eq Hash
|
351
352
|
end
|
352
353
|
end
|
353
354
|
|
@@ -355,71 +356,71 @@ describe Feedjira::Feed do
|
|
355
356
|
before(:each) do
|
356
357
|
allow_message_expectations_on_nil
|
357
358
|
@multi = Curl::Multi.get([@paul_feed[:url]], {:follow_location => true}, {:pipeline => true})
|
358
|
-
@multi.
|
359
|
+
allow(@multi).to receive(:add)
|
359
360
|
@easy_curl = Curl::Easy.new(@paul_feed[:url])
|
360
361
|
|
361
|
-
Curl::Easy.
|
362
|
+
allow(Curl::Easy).to receive(:new).and_yield(@easy_curl)
|
362
363
|
end
|
363
364
|
|
364
365
|
it "should set user agent if it's passed as an option" do
|
365
366
|
Feedjira::Feed.add_url_to_multi(@multi, @paul_feed[:url], [], {}, :user_agent => 'My cool application')
|
366
|
-
@easy_curl.headers["User-Agent"].
|
367
|
+
expect(@easy_curl.headers["User-Agent"]).to eq 'My cool application'
|
367
368
|
end
|
368
369
|
|
369
370
|
it "should set user agent to default if it's not passed as an option" do
|
370
371
|
Feedjira::Feed.add_url_to_multi(@multi, @paul_feed[:url], [], {}, {})
|
371
|
-
@easy_curl.headers["User-Agent"].
|
372
|
+
expect(@easy_curl.headers["User-Agent"]).to eq Feedjira::Feed::USER_AGENT
|
372
373
|
end
|
373
374
|
|
374
375
|
it "should set if modified since as an option if passed" do
|
375
376
|
Feedjira::Feed.add_url_to_multi(@multi, @paul_feed[:url], [], {}, :if_modified_since => Time.parse_safely("Jan 25 2009 04:10:32 GMT"))
|
376
|
-
@easy_curl.headers["If-Modified-Since"].
|
377
|
+
expect(@easy_curl.headers["If-Modified-Since"]).to eq 'Sun, 25 Jan 2009 04:10:32 GMT'
|
377
378
|
end
|
378
379
|
|
379
380
|
it 'should set follow location to true' do
|
380
|
-
@easy_curl.
|
381
|
+
expect(@easy_curl).to receive(:follow_location=).with(true)
|
381
382
|
Feedjira::Feed.add_url_to_multi(@multi, @paul_feed[:url], [], {}, {})
|
382
383
|
end
|
383
384
|
|
384
385
|
it 'should set userpwd for http basic authentication if :http_authentication is passed' do
|
385
386
|
Feedjira::Feed.add_url_to_multi(@multi, @paul_feed[:url], [], {}, :http_authentication => ['myusername', 'mypassword'])
|
386
|
-
@easy_curl.userpwd.
|
387
|
+
expect(@easy_curl.userpwd).to eq 'myusername:mypassword'
|
387
388
|
end
|
388
389
|
|
389
390
|
it 'should set accepted encodings' do
|
390
391
|
Feedjira::Feed.add_url_to_multi(@multi, @paul_feed[:url], [], {}, {:compress => true})
|
391
|
-
@easy_curl.headers["Accept-encoding"].
|
392
|
+
expect(@easy_curl.headers["Accept-encoding"]).to eq 'gzip, deflate'
|
392
393
|
end
|
393
394
|
|
394
395
|
it "should set if_none_match as an option if passed" do
|
395
396
|
Feedjira::Feed.add_url_to_multi(@multi, @paul_feed[:url], [], {}, :if_none_match => 'ziEyTl4q9GH04BR4jgkImd0GvSE')
|
396
|
-
@easy_curl.headers["If-None-Match"].
|
397
|
+
expect(@easy_curl.headers["If-None-Match"]).to eq 'ziEyTl4q9GH04BR4jgkImd0GvSE'
|
397
398
|
end
|
398
399
|
|
399
400
|
describe 'on success' do
|
400
401
|
before(:each) do
|
401
402
|
@feed = double('feed', :feed_url= => true, :etag= => true, :last_modified= => true)
|
402
|
-
Feedjira::Feed.
|
403
|
-
Feedjira::Feed.
|
404
|
-
Feedjira::Parser::AtomFeedBurner.
|
405
|
-
Feedjira::Feed.
|
406
|
-
Feedjira::Feed.
|
403
|
+
allow(Feedjira::Feed).to receive(:decode_content).and_return(@paul_feed[:xml])
|
404
|
+
allow(Feedjira::Feed).to receive(:determine_feed_parser_for_xml).and_return(Feedjira::Parser::AtomFeedBurner)
|
405
|
+
allow(Feedjira::Parser::AtomFeedBurner).to receive(:parse).and_return(@feed)
|
406
|
+
allow(Feedjira::Feed).to receive(:etag_from_header).and_return('ziEyTl4q9GH04BR4jgkImd0GvSE')
|
407
|
+
allow(Feedjira::Feed).to receive(:last_modified_from_header).and_return('Wed, 28 Jan 2009 04:10:32 GMT')
|
407
408
|
end
|
408
409
|
|
409
410
|
it 'should decode the response body' do
|
410
|
-
Feedjira::Feed.
|
411
|
+
expect(Feedjira::Feed).to receive(:decode_content).with(@easy_curl).and_return(@paul_feed[:xml])
|
411
412
|
Feedjira::Feed.add_url_to_multi(@multi, @paul_feed[:url], [], {}, {})
|
412
413
|
@easy_curl.on_success.call(@easy_curl)
|
413
414
|
end
|
414
415
|
|
415
416
|
it 'should determine the xml parser class' do
|
416
|
-
Feedjira::Feed.
|
417
|
+
expect(Feedjira::Feed).to receive(:determine_feed_parser_for_xml).with(@paul_feed[:xml]).and_return(Feedjira::Parser::AtomFeedBurner)
|
417
418
|
Feedjira::Feed.add_url_to_multi(@multi, @paul_feed[:url], [], {}, {})
|
418
419
|
@easy_curl.on_success.call(@easy_curl)
|
419
420
|
end
|
420
421
|
|
421
422
|
it 'should parse the xml' do
|
422
|
-
Feedjira::Parser::AtomFeedBurner.
|
423
|
+
expect(Feedjira::Parser::AtomFeedBurner).to receive(:parse).
|
423
424
|
with(@paul_feed[:xml]).and_return(@feed)
|
424
425
|
Feedjira::Feed.add_url_to_multi(@multi, @paul_feed[:url], [], {}, {})
|
425
426
|
@easy_curl.on_success.call(@easy_curl)
|
@@ -427,20 +428,20 @@ describe Feedjira::Feed do
|
|
427
428
|
|
428
429
|
describe 'when a compatible xml parser class is found' do
|
429
430
|
it 'should set the last effective url to the feed url' do
|
430
|
-
@easy_curl.
|
431
|
-
@feed.
|
431
|
+
expect(@easy_curl).to receive(:last_effective_url).and_return(@paul_feed[:url])
|
432
|
+
expect(@feed).to receive(:feed_url=).with(@paul_feed[:url])
|
432
433
|
Feedjira::Feed.add_url_to_multi(@multi, @paul_feed[:url], [], {}, {})
|
433
434
|
@easy_curl.on_success.call(@easy_curl)
|
434
435
|
end
|
435
436
|
|
436
437
|
it 'should set the etags on the feed' do
|
437
|
-
@feed.
|
438
|
+
expect(@feed).to receive(:etag=).with('ziEyTl4q9GH04BR4jgkImd0GvSE')
|
438
439
|
Feedjira::Feed.add_url_to_multi(@multi, @paul_feed[:url], [], {}, {})
|
439
440
|
@easy_curl.on_success.call(@easy_curl)
|
440
441
|
end
|
441
442
|
|
442
443
|
it 'should set the last modified on the feed' do
|
443
|
-
@feed.
|
444
|
+
expect(@feed).to receive(:last_modified=).with('Wed, 28 Jan 2009 04:10:32 GMT')
|
444
445
|
Feedjira::Feed.add_url_to_multi(@multi, @paul_feed[:url], [], {}, {})
|
445
446
|
@easy_curl.on_success.call(@easy_curl)
|
446
447
|
end
|
@@ -450,13 +451,13 @@ describe Feedjira::Feed do
|
|
450
451
|
Feedjira::Feed.add_url_to_multi(@multi, @paul_feed[:url], [], responses, {})
|
451
452
|
@easy_curl.on_success.call(@easy_curl)
|
452
453
|
|
453
|
-
responses.length.
|
454
|
-
responses['http://feeds.feedburner.com/PaulDixExplainsNothing'].
|
454
|
+
expect(responses.length).to eq 1
|
455
|
+
expect(responses['http://feeds.feedburner.com/PaulDixExplainsNothing']).to eq @feed
|
455
456
|
end
|
456
457
|
|
457
458
|
it 'should call proc if :on_success option is passed' do
|
458
459
|
success = lambda { |url, feed| }
|
459
|
-
success.
|
460
|
+
expect(success).to receive(:call).with(@paul_feed[:url], @feed)
|
460
461
|
Feedjira::Feed.add_url_to_multi(@multi, @paul_feed[:url], [], {}, { :on_success => success })
|
461
462
|
@easy_curl.on_success.call(@easy_curl)
|
462
463
|
end
|
@@ -464,9 +465,9 @@ describe Feedjira::Feed do
|
|
464
465
|
describe 'when the parser raises an exception' do
|
465
466
|
it 'invokes the on_failure callback with that exception' do
|
466
467
|
failure = double 'Failure callback', arity: 2
|
467
|
-
failure.
|
468
|
+
expect(failure).to receive(:call).with(@easy_curl, an_instance_of(Hell))
|
468
469
|
|
469
|
-
Feedjira::Parser::AtomFeedBurner.
|
470
|
+
expect(Feedjira::Parser::AtomFeedBurner).to receive(:parse).and_raise Hell
|
470
471
|
Feedjira::Feed.add_url_to_multi(@multi, @paul_feed[:url], [], {}, { on_failure: failure })
|
471
472
|
|
472
473
|
@easy_curl.on_success.call(@easy_curl)
|
@@ -475,12 +476,12 @@ describe Feedjira::Feed do
|
|
475
476
|
|
476
477
|
describe 'when the parser invokes its on_failure callback' do
|
477
478
|
before(:each) do
|
478
|
-
Feedjira::Feed.
|
479
|
+
allow(Feedjira::Feed).to receive(:determine_feed_parser_for_xml).and_return FailParser
|
479
480
|
end
|
480
481
|
|
481
482
|
it 'invokes the on_failure callback' do
|
482
483
|
failure = double 'Failure callback', arity: 2
|
483
|
-
failure.
|
484
|
+
expect(failure).to receive(:call).with(@easy_curl, an_instance_of(RuntimeError))
|
484
485
|
|
485
486
|
Feedjira::Feed.add_url_to_multi(@multi, @paul_feed[:url], [], {}, { on_failure: failure })
|
486
487
|
@easy_curl.on_success.call(@easy_curl)
|
@@ -491,9 +492,9 @@ describe Feedjira::Feed do
|
|
491
492
|
describe 'when no compatible xml parser class is found' do
|
492
493
|
it 'invokes the on_failure callback' do
|
493
494
|
failure = double 'Failure callback', arity: 2
|
494
|
-
failure.
|
495
|
+
expect(failure).to receive(:call).with(@easy_curl, "Can't determine a parser")
|
495
496
|
|
496
|
-
Feedjira::Feed.
|
497
|
+
allow(Feedjira::Feed).to receive(:determine_feed_parser_for_xml).and_return nil
|
497
498
|
Feedjira::Feed.add_url_to_multi(@multi, @paul_feed[:url], [], {}, { on_failure: failure })
|
498
499
|
|
499
500
|
@easy_curl.on_success.call(@easy_curl)
|
@@ -506,14 +507,14 @@ describe Feedjira::Feed do
|
|
506
507
|
@headers = "HTTP/1.0 500 Something Bad\r\nDate: Thu, 29 Jan 2009 03:55:24 GMT\r\nServer: Apache\r\nX-FB-Host: chi-write6\r\nLast-Modified: Wed, 28 Jan 2009 04:10:32 GMT\r\n"
|
507
508
|
@body = 'Sorry, something broke'
|
508
509
|
|
509
|
-
@easy_curl.
|
510
|
-
@easy_curl.
|
511
|
-
@easy_curl.
|
510
|
+
allow(@easy_curl).to receive(:response_code).and_return(500)
|
511
|
+
allow(@easy_curl).to receive(:header_str).and_return(@headers)
|
512
|
+
allow(@easy_curl).to receive(:body_str).and_return(@body)
|
512
513
|
end
|
513
514
|
|
514
515
|
it 'should call proc if :on_failure option is passed' do
|
515
516
|
failure = double 'Failure callback', arity: 2
|
516
|
-
failure.
|
517
|
+
expect(failure).to receive(:call).with(@easy_curl, nil)
|
517
518
|
Feedjira::Feed.add_url_to_multi(@multi, @paul_feed[:url], [], {}, { :on_failure => failure })
|
518
519
|
@easy_curl.on_failure.call(@easy_curl)
|
519
520
|
end
|
@@ -523,8 +524,8 @@ describe Feedjira::Feed do
|
|
523
524
|
Feedjira::Feed.add_url_to_multi(@multi, @paul_feed[:url], [], responses, {})
|
524
525
|
@easy_curl.on_failure.call(@easy_curl)
|
525
526
|
|
526
|
-
responses.length.
|
527
|
-
responses[@paul_feed[:url]].
|
527
|
+
expect(responses.length).to eq 1
|
528
|
+
expect(responses[@paul_feed[:url]]).to eq 500
|
528
529
|
end
|
529
530
|
end
|
530
531
|
|
@@ -533,14 +534,14 @@ describe Feedjira::Feed do
|
|
533
534
|
@headers = "HTTP/1.0 404 Not Found\r\nDate: Thu, 29 Jan 2009 03:55:24 GMT\r\nServer: Apache\r\nX-FB-Host: chi-write6\r\nLast-Modified: Wed, 28 Jan 2009 04:10:32 GMT\r\n"
|
534
535
|
@body = 'Page could not be found.'
|
535
536
|
|
536
|
-
@easy_curl.
|
537
|
-
@easy_curl.
|
538
|
-
@easy_curl.
|
537
|
+
allow(@easy_curl).to receive(:response_code).and_return(404)
|
538
|
+
allow(@easy_curl).to receive(:header_str).and_return(@headers)
|
539
|
+
allow(@easy_curl).to receive(:body_str).and_return(@body)
|
539
540
|
end
|
540
541
|
|
541
542
|
it 'should call proc if :on_failure option is passed' do
|
542
543
|
complete = double 'Failure callback', arity: 2
|
543
|
-
complete.
|
544
|
+
expect(complete).to receive(:call).with(@easy_curl, 'Server returned a 404')
|
544
545
|
Feedjira::Feed.add_url_to_multi(@multi, @paul_feed[:url], [], {}, { :on_failure => complete })
|
545
546
|
@easy_curl.on_missing.call(@easy_curl)
|
546
547
|
end
|
@@ -550,8 +551,8 @@ describe Feedjira::Feed do
|
|
550
551
|
Feedjira::Feed.add_url_to_multi(@multi, @paul_feed[:url], [], responses, {})
|
551
552
|
@easy_curl.on_complete.call(@easy_curl)
|
552
553
|
|
553
|
-
responses.length.
|
554
|
-
responses[@paul_feed[:url]].
|
554
|
+
expect(responses.length).to eq 1
|
555
|
+
expect(responses[@paul_feed[:url]]).to eq 404
|
555
556
|
end
|
556
557
|
end
|
557
558
|
end
|
@@ -560,79 +561,79 @@ describe Feedjira::Feed do
|
|
560
561
|
before(:each) do
|
561
562
|
allow_message_expectations_on_nil
|
562
563
|
@multi = Curl::Multi.get([@paul_feed[:url]], {:follow_location => true}, {:pipeline => true})
|
563
|
-
@multi.
|
564
|
+
allow(@multi).to receive(:add)
|
564
565
|
@easy_curl = Curl::Easy.new(@paul_feed[:url])
|
565
566
|
@feed = Feedjira::Feed.parse(sample_feedburner_atom_feed)
|
566
567
|
|
567
|
-
Curl::Easy.
|
568
|
+
allow(Curl::Easy).to receive(:new).and_yield(@easy_curl)
|
568
569
|
end
|
569
570
|
|
570
571
|
it "should set user agent if it's passed as an option" do
|
571
572
|
Feedjira::Feed.add_feed_to_multi(@multi, @feed, [], {}, :user_agent => 'My cool application')
|
572
|
-
@easy_curl.headers["User-Agent"].
|
573
|
+
expect(@easy_curl.headers["User-Agent"]).to eq 'My cool application'
|
573
574
|
end
|
574
575
|
|
575
576
|
it "should set user agent to default if it's not passed as an option" do
|
576
577
|
Feedjira::Feed.add_feed_to_multi(@multi, @feed, [], {}, {})
|
577
|
-
@easy_curl.headers["User-Agent"].
|
578
|
+
expect(@easy_curl.headers["User-Agent"]).to eq Feedjira::Feed::USER_AGENT
|
578
579
|
end
|
579
580
|
|
580
581
|
it "should set if modified since as an option if passed" do
|
581
582
|
modified_time = Time.parse_safely("Wed, 28 Jan 2009 04:10:32 GMT")
|
582
583
|
Feedjira::Feed.add_feed_to_multi(@multi, @feed, [], {}, {:if_modified_since => modified_time})
|
583
|
-
modified_time.
|
584
|
+
expect(modified_time).to be > @feed.last_modified
|
584
585
|
|
585
|
-
@easy_curl.headers["If-Modified-Since"].
|
586
|
+
expect(@easy_curl.headers["If-Modified-Since"]).to eq modified_time
|
586
587
|
end
|
587
588
|
|
588
589
|
it 'should set follow location to true' do
|
589
|
-
@easy_curl.
|
590
|
+
expect(@easy_curl).to receive(:follow_location=).with(true)
|
590
591
|
Feedjira::Feed.add_feed_to_multi(@multi, @feed, [], {}, {})
|
591
592
|
end
|
592
593
|
|
593
594
|
it 'should set userpwd for http basic authentication if :http_authentication is passed' do
|
594
595
|
Feedjira::Feed.add_feed_to_multi(@multi, @feed, [], {}, :http_authentication => ['myusername', 'mypassword'])
|
595
|
-
@easy_curl.userpwd.
|
596
|
+
expect(@easy_curl.userpwd).to eq 'myusername:mypassword'
|
596
597
|
end
|
597
598
|
|
598
599
|
it "should set if_none_match as an option if passed" do
|
599
600
|
@feed.etag = 'ziEyTl4q9GH04BR4jgkImd0GvSE'
|
600
601
|
Feedjira::Feed.add_feed_to_multi(@multi, @feed, [], {}, {})
|
601
|
-
@easy_curl.headers["If-None-Match"].
|
602
|
+
expect(@easy_curl.headers["If-None-Match"]).to eq 'ziEyTl4q9GH04BR4jgkImd0GvSE'
|
602
603
|
end
|
603
604
|
|
604
605
|
describe 'on success' do
|
605
606
|
before(:each) do
|
606
607
|
@new_feed = @feed.clone
|
607
|
-
@feed.
|
608
|
-
Feedjira::Feed.
|
609
|
-
Feedjira::Feed.
|
610
|
-
Feedjira::Parser::AtomFeedBurner.
|
611
|
-
Feedjira::Feed.
|
612
|
-
Feedjira::Feed.
|
608
|
+
allow(@feed).to receive(:update_from_feed)
|
609
|
+
allow(Feedjira::Feed).to receive(:decode_content).and_return(@paul_feed[:xml])
|
610
|
+
allow(Feedjira::Feed).to receive(:determine_feed_parser_for_xml).and_return(Feedjira::Parser::AtomFeedBurner)
|
611
|
+
allow(Feedjira::Parser::AtomFeedBurner).to receive(:parse).and_return(@new_feed)
|
612
|
+
allow(Feedjira::Feed).to receive(:etag_from_header).and_return('ziEyTl4q9GH04BR4jgkImd0GvSE')
|
613
|
+
allow(Feedjira::Feed).to receive(:last_modified_from_header).and_return('Wed, 28 Jan 2009 04:10:32 GMT')
|
613
614
|
end
|
614
615
|
|
615
616
|
it 'should parse the updated feed' do
|
616
|
-
Feedjira::Parser::AtomFeedBurner.
|
617
|
+
expect(Feedjira::Parser::AtomFeedBurner).to receive(:parse).and_return(@new_feed)
|
617
618
|
Feedjira::Feed.add_feed_to_multi(@multi, @feed, [], {}, {})
|
618
619
|
@easy_curl.on_success.call(@easy_curl)
|
619
620
|
end
|
620
621
|
|
621
622
|
it 'should set the last effective url to the feed url' do
|
622
|
-
@easy_curl.
|
623
|
-
@new_feed.
|
623
|
+
expect(@easy_curl).to receive(:last_effective_url).and_return(@paul_feed[:url])
|
624
|
+
expect(@new_feed).to receive(:feed_url=).with(@paul_feed[:url])
|
624
625
|
Feedjira::Feed.add_feed_to_multi(@multi, @feed, [], {}, {})
|
625
626
|
@easy_curl.on_success.call(@easy_curl)
|
626
627
|
end
|
627
628
|
|
628
629
|
it 'should set the etags on the feed' do
|
629
|
-
@new_feed.
|
630
|
+
expect(@new_feed).to receive(:etag=).with('ziEyTl4q9GH04BR4jgkImd0GvSE')
|
630
631
|
Feedjira::Feed.add_feed_to_multi(@multi, @feed, [], {}, {})
|
631
632
|
@easy_curl.on_success.call(@easy_curl)
|
632
633
|
end
|
633
634
|
|
634
635
|
it 'should set the last modified on the feed' do
|
635
|
-
@new_feed.
|
636
|
+
expect(@new_feed).to receive(:last_modified=).with('Wed, 28 Jan 2009 04:10:32 GMT')
|
636
637
|
Feedjira::Feed.add_feed_to_multi(@multi, @feed, [], {}, {})
|
637
638
|
@easy_curl.on_success.call(@easy_curl)
|
638
639
|
end
|
@@ -642,31 +643,31 @@ describe Feedjira::Feed do
|
|
642
643
|
Feedjira::Feed.add_feed_to_multi(@multi, @feed, [], responses, {})
|
643
644
|
@easy_curl.on_success.call(@easy_curl)
|
644
645
|
|
645
|
-
responses.length.
|
646
|
-
responses['http://feeds.feedburner.com/PaulDixExplainsNothing'].
|
646
|
+
expect(responses.length).to eq 1
|
647
|
+
expect(responses['http://feeds.feedburner.com/PaulDixExplainsNothing']).to eq @feed
|
647
648
|
end
|
648
649
|
|
649
650
|
it 'should call proc if :on_success option is passed' do
|
650
651
|
success = lambda { |feed| }
|
651
|
-
success.
|
652
|
+
expect(success).to receive(:call).with(@feed)
|
652
653
|
Feedjira::Feed.add_feed_to_multi(@multi, @feed, [], {}, { :on_success => success })
|
653
654
|
@easy_curl.on_success.call(@easy_curl)
|
654
655
|
end
|
655
656
|
|
656
657
|
it 'should call update from feed on the old feed with the updated feed' do
|
657
|
-
@feed.
|
658
|
+
expect(@feed).to receive(:update_from_feed).with(@new_feed)
|
658
659
|
Feedjira::Feed.add_feed_to_multi(@multi, @feed, [], {}, {})
|
659
660
|
@easy_curl.on_success.call(@easy_curl)
|
660
661
|
end
|
661
662
|
|
662
663
|
describe 'when the parser invokes its on_failure callback' do
|
663
664
|
before(:each) do
|
664
|
-
Feedjira::Feed.
|
665
|
+
allow(Feedjira::Feed).to receive(:determine_feed_parser_for_xml).and_return FailParser
|
665
666
|
end
|
666
667
|
|
667
668
|
it 'invokes the on_failure callback' do
|
668
669
|
failure = double 'Failure callback', arity: 2
|
669
|
-
failure.
|
670
|
+
expect(failure).to receive(:call)
|
670
671
|
|
671
672
|
Feedjira::Feed.add_feed_to_multi(@multi, @feed, [], {}, { on_failure: failure })
|
672
673
|
@easy_curl.on_success.call(@easy_curl)
|
@@ -679,15 +680,15 @@ describe Feedjira::Feed do
|
|
679
680
|
@headers = "HTTP/1.0 404 Not Found\r\nDate: Thu, 29 Jan 2009 03:55:24 GMT\r\nServer: Apache\r\nX-FB-Host: chi-write6\r\nLast-Modified: Wed, 28 Jan 2009 04:10:32 GMT\r\n"
|
680
681
|
@body = 'Page could not be found.'
|
681
682
|
|
682
|
-
@easy_curl.
|
683
|
-
@easy_curl.
|
684
|
-
@easy_curl.
|
683
|
+
allow(@easy_curl).to receive(:response_code).and_return(404)
|
684
|
+
allow(@easy_curl).to receive(:header_str).and_return(@headers)
|
685
|
+
allow(@easy_curl).to receive(:body_str).and_return(@body)
|
685
686
|
end
|
686
687
|
|
687
688
|
it 'should call on success callback if the response code is 304' do
|
688
689
|
success = lambda { |feed| }
|
689
|
-
success.
|
690
|
-
@easy_curl.
|
690
|
+
expect(success).to receive(:call).with(@feed)
|
691
|
+
expect(@easy_curl).to receive(:response_code).and_return(304)
|
691
692
|
Feedjira::Feed.add_feed_to_multi(@multi, @feed, [], {}, { :on_success => success })
|
692
693
|
@easy_curl.on_redirect.call(@easy_curl)
|
693
694
|
end
|
@@ -697,8 +698,8 @@ describe Feedjira::Feed do
|
|
697
698
|
Feedjira::Feed.add_feed_to_multi(@multi, @feed, [], responses, {})
|
698
699
|
@easy_curl.on_failure.call(@easy_curl)
|
699
700
|
|
700
|
-
responses.length.
|
701
|
-
responses[@paul_feed[:url]].
|
701
|
+
expect(responses.length).to eq 1
|
702
|
+
expect(responses[@paul_feed[:url]]).to eq 404
|
702
703
|
end
|
703
704
|
end
|
704
705
|
end
|
@@ -707,7 +708,7 @@ describe Feedjira::Feed do
|
|
707
708
|
it "passes options to multicurl" do
|
708
709
|
options = { user_agent: '007' }
|
709
710
|
|
710
|
-
Feedjira::Feed.
|
711
|
+
expect(Feedjira::Feed).to receive(:add_url_to_multi).
|
711
712
|
with(anything, anything, anything, anything, options)
|
712
713
|
|
713
714
|
Feedjira::Feed.fetch_and_parse(sample_rss_feed, options)
|
@@ -720,36 +721,36 @@ describe Feedjira::Feed do
|
|
720
721
|
end
|
721
722
|
|
722
723
|
it 'should decode the response body using gzip if the Content-Encoding: is gzip' do
|
723
|
-
@curl_easy.
|
724
|
+
allow(@curl_easy).to receive(:header_str).and_return('Content-Encoding: gzip')
|
724
725
|
string_io = double('stringio', :read => @curl_easy.body_str, :close => true)
|
725
|
-
StringIO.
|
726
|
-
Zlib::GzipReader.
|
726
|
+
expect(StringIO).to receive(:new).and_return(string_io)
|
727
|
+
expect(Zlib::GzipReader).to receive(:new).with(string_io).and_return(string_io)
|
727
728
|
Feedjira::Feed.decode_content(@curl_easy)
|
728
729
|
end
|
729
730
|
|
730
731
|
it 'should decode the response body using gzip if the Content-Encoding: is gzip even when the case is wrong' do
|
731
|
-
@curl_easy.
|
732
|
+
allow(@curl_easy).to receive(:header_str).and_return('content-encoding: gzip')
|
732
733
|
string_io = double('stringio', :read => @curl_easy.body_str, :close => true)
|
733
|
-
StringIO.
|
734
|
-
Zlib::GzipReader.
|
734
|
+
expect(StringIO).to receive(:new).and_return(string_io)
|
735
|
+
expect(Zlib::GzipReader).to receive(:new).with(string_io).and_return(string_io)
|
735
736
|
Feedjira::Feed.decode_content(@curl_easy)
|
736
737
|
end
|
737
738
|
|
738
739
|
it 'should deflate the response body using inflate if the Content-Encoding: is deflate' do
|
739
|
-
@curl_easy.
|
740
|
-
Zlib::Inflate.
|
740
|
+
allow(@curl_easy).to receive(:header_str).and_return('Content-Encoding: deflate')
|
741
|
+
expect(Zlib::Inflate).to receive(:inflate).with(@curl_easy.body_str)
|
741
742
|
Feedjira::Feed.decode_content(@curl_easy)
|
742
743
|
end
|
743
744
|
|
744
745
|
it 'should deflate the response body using inflate if the Content-Encoding: is deflate event if the case is wrong' do
|
745
|
-
@curl_easy.
|
746
|
-
Zlib::Inflate.
|
746
|
+
allow(@curl_easy).to receive(:header_str).and_return('content-encoding: deflate')
|
747
|
+
expect(Zlib::Inflate).to receive(:inflate).with(@curl_easy.body_str)
|
747
748
|
Feedjira::Feed.decode_content(@curl_easy)
|
748
749
|
end
|
749
750
|
|
750
751
|
it 'should return the response body if it is not encoded' do
|
751
|
-
@curl_easy.
|
752
|
-
Feedjira::Feed.decode_content(@curl_easy).
|
752
|
+
allow(@curl_easy).to receive(:header_str).and_return('')
|
753
|
+
expect(Feedjira::Feed.decode_content(@curl_easy)).to eq '<xml></xml>'
|
753
754
|
end
|
754
755
|
end
|
755
756
|
|
@@ -757,7 +758,7 @@ describe Feedjira::Feed do
|
|
757
758
|
it "passes options to multicurl" do
|
758
759
|
options = { user_agent: '007' }
|
759
760
|
|
760
|
-
Feedjira::Feed.
|
761
|
+
expect(Feedjira::Feed).to receive(:add_feed_to_multi).
|
761
762
|
with(anything, anything, anything, anything, options)
|
762
763
|
|
763
764
|
Feedjira::Feed.update([nil], options)
|