link_preview 0.3.0.pre.2 → 0.3.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.
@@ -34,13 +34,13 @@ describe LinkPreview::HTTPCrawler do
34
34
 
35
35
  context 'when http_client.get raises an exception' do
36
36
  before do
37
- allow(config.http_client).to receive(:get).and_raise(Timeout::Error)
37
+ allow(config.http_client.connection).to receive(:get).and_raise(Timeout::Error)
38
38
  expect(config.error_handler).to receive(:call).once { 'something' }
39
39
  end
40
40
 
41
41
  subject(:response) { crawler.dequeue! }
42
42
 
43
- it 'should receive error_handler call and return non successful response' do
43
+ it 'receives error_handler call and return non successful response' do
44
44
  should be_a(Faraday::Response)
45
45
  should_not be_success
46
46
  end
@@ -40,12 +40,14 @@ describe LinkPreview::Parser do
40
40
  expect(parser.parse_image_file_name(response)).to eq('image-cd.jpg')
41
41
  end
42
42
  end
43
+
43
44
  context 'when the content-disposition header does not contain a filename' do
44
45
  let(:content_disposition) { 'inline;' }
45
46
  it 'parses the filename from the url' do
46
47
  expect(parser.parse_image_file_name(response)).to eq('image-url.jpg')
47
48
  end
48
49
  end
50
+
49
51
  context 'when the content-disposition header contains a blank filename' do
50
52
  let(:content_disposition) { 'inline;filename=""' }
51
53
  it 'parses the filename from the url' do
@@ -38,7 +38,7 @@ describe LinkPreview do
38
38
  it { should be_a(LinkPreview::Content) }
39
39
  end
40
40
 
41
- context 'open graph data', vcr: { cassette_name: 'ogp.me' } do
41
+ context 'with open graph data', vcr: { cassette_name: 'ogp.me' } do
42
42
  let(:url) { 'http://ogp.me' }
43
43
 
44
44
  it_behaves_like 'link_preview'
@@ -89,13 +89,13 @@ describe LinkPreview do
89
89
  end
90
90
 
91
91
  it 'should issue minimum number of requests' do
92
- expect(http_client).to receive(:get).with('http://ogp.me/').ordered.and_call_original
92
+ expect(http_client).to receive(:get).with('http://ogp.me/', {}).ordered.and_call_original
93
93
  content.title
94
- expect(http_client).to receive(:get).with('http://ogp.me/logo.png').ordered.and_call_original
94
+ expect(http_client).to receive(:get).with('http://ogp.me/logo.png', {}).ordered.and_call_original
95
95
  content.image_data
96
96
  end
97
97
 
98
- context '#as_oembed' do
98
+ describe '#as_oembed' do
99
99
  subject(:oembed) { content.as_oembed }
100
100
 
101
101
  it 'should encode as link' do
@@ -112,7 +112,7 @@ describe LinkPreview do
112
112
  end
113
113
  end
114
114
 
115
- context 'youtube oembed', vcr: { cassette_name: 'youtube' } do
115
+ context 'with youtube oembed', vcr: { cassette_name: 'youtube' } do
116
116
  let(:url) { 'http://youtube.com/watch?v=M3r2XDceM6A' }
117
117
 
118
118
  it_behaves_like 'link_preview'
@@ -163,15 +163,15 @@ describe LinkPreview do
163
163
  end
164
164
 
165
165
  it 'should issue minimum number of requests' do
166
- expect(http_client).to receive(:get).with('https://www.youtube.com/oembed?scheme=https&format=json&url=http%3A%2F%2Fyoutube.com%2Fwatch%3Fv%3DM3r2XDceM6A').ordered.and_call_original
166
+ expect(http_client).to receive(:get).with('https://www.youtube.com/oembed?scheme=https&format=json&url=http%3A%2F%2Fyoutube.com%2Fwatch%3Fv%3DM3r2XDceM6A', {}).ordered.and_call_original
167
167
  content.title
168
- expect(http_client).to receive(:get).with('http://youtube.com/watch?v=M3r2XDceM6A').ordered.and_call_original
168
+ expect(http_client).to receive(:get).with('http://youtube.com/watch?v=M3r2XDceM6A', {}).ordered.and_call_original
169
169
  content.description
170
- expect(http_client).to receive(:get).with('https://i.ytimg.com/vi/M3r2XDceM6A/hqdefault.jpg').ordered.and_call_original
170
+ expect(http_client).to receive(:get).with('https://i.ytimg.com/vi/M3r2XDceM6A/hqdefault.jpg', {}).ordered.and_call_original
171
171
  content.image_data
172
172
  end
173
173
 
174
- context '#as_oembed' do
174
+ describe '#as_oembed' do
175
175
  subject(:oembed) { content.as_oembed }
176
176
 
177
177
  it 'should proxy oembed content' do
@@ -196,7 +196,7 @@ describe LinkPreview do
196
196
  end
197
197
  end
198
198
 
199
- context 'kaltura oembed', vcr: { cassette_name: 'kaltura' } do
199
+ context 'with kaltura oembed', vcr: { cassette_name: 'kaltura' } do
200
200
  let(:url) { 'http://videos.kaltura.com/oembed?url=http%3A%2F%2Fvideos.kaltura.com%2Fmedia%2F%2Fid%2F1_abxlxlll&playerId=3073841&entryId=1_abxlxlll' }
201
201
  let(:options) { { width: 420 } }
202
202
 
@@ -248,16 +248,16 @@ describe LinkPreview do
248
248
  end
249
249
 
250
250
  it 'should issue minimum number of requests' do
251
- expect(http_client).to receive(:get).with('http://videos.kaltura.com/oembed/?url=http%3A%2F%2Fvideos.kaltura.com%2Fmedia%2F%2Fid%2F1_abxlxlll&playerId=3073841&entryId=1_abxlxlll&width=420').ordered.and_call_original
251
+ expect(http_client).to receive(:get).with('http://videos.kaltura.com/oembed/?url=http%3A%2F%2Fvideos.kaltura.com%2Fmedia%2F%2Fid%2F1_abxlxlll&playerId=3073841&entryId=1_abxlxlll&width=420', width: 420).ordered.and_call_original
252
252
  content.title
253
- expect(http_client).to receive(:get).with('http://cdnbakmi.kaltura.com/p/811441/sp/81144100/thumbnail/entry_id/1_abxlxlll/version/100012/width//height/').ordered.and_call_original
253
+ expect(http_client).to receive(:get).with('http://cdnbakmi.kaltura.com/p/811441/sp/81144100/thumbnail/entry_id/1_abxlxlll/version/100012/width//height/', width: 420).ordered.and_call_original
254
254
  content.image_data
255
- expect(http_client).to receive(:get).with('http://videos.kaltura.com/media//id/1_abxlxlll').ordered.and_call_original
255
+ expect(http_client).to receive(:get).with('http://videos.kaltura.com/media//id/1_abxlxlll', width: 420).ordered.and_call_original
256
256
  content.description
257
257
  end
258
258
  end
259
259
 
260
- context 'sliderocket oembed discovery', vcr: { cassette_name: 'sliderocket' } do
260
+ context 'with sliderocket oembed discovery', vcr: { cassette_name: 'sliderocket' } do
261
261
  let(:url) { 'http://portal.sliderocket.com/SlideRocket-Presentations/Hoshyar-Foundation' }
262
262
  let(:options) { { width: 420 } }
263
263
 
@@ -309,15 +309,15 @@ describe LinkPreview do
309
309
  end
310
310
 
311
311
  it 'should issue minimum number of requests' do
312
- expect(http_client).to receive(:get).with('http://portal.sliderocket.com/SlideRocket-Presentations/Hoshyar-Foundation').ordered.and_call_original
312
+ expect(http_client).to receive(:get).with('http://portal.sliderocket.com/SlideRocket-Presentations/Hoshyar-Foundation', width: 420).ordered.and_call_original
313
313
  content.title
314
- expect(http_client).to receive(:get).with('http://cdn.sliderocket.com/thumbnails/4/43/43b475a4-192e-455e-832f-4a40697d8d25.jpg').ordered.and_call_original
314
+ expect(http_client).to receive(:get).with('http://cdn.sliderocket.com/thumbnails/4/43/43b475a4-192e-455e-832f-4a40697d8d25.jpg', width: 420).ordered.and_call_original
315
315
  content.image_data
316
- expect(http_client).to receive(:get).with('http://app.sliderocket.com/app/oEmbed.aspx?url=http%3A%2F%2Fapp.sliderocket.com%2Fapp%2Ffullplayer.aspx%3Fid%3Df614ec65-0f9b-4167-bb2a-b384dad535f3&maxwidth=420').ordered.and_call_original
316
+ expect(http_client).to receive(:get).with('http://app.sliderocket.com/app/oEmbed.aspx?url=http%3A%2F%2Fapp.sliderocket.com%2Fapp%2Ffullplayer.aspx%3Fid%3Df614ec65-0f9b-4167-bb2a-b384dad535f3&maxwidth=420', width: 420).ordered.and_call_original
317
317
  content.as_oembed
318
318
  end
319
319
 
320
- context '#as_oembed' do
320
+ describe '#as_oembed' do
321
321
  subject(:oembed) { content.as_oembed }
322
322
 
323
323
  it 'should proxy oembed content' do
@@ -338,7 +338,7 @@ describe LinkPreview do
338
338
  end
339
339
  end
340
340
 
341
- context 'html data with unescaped html', vcr: { cassette_name: 'support.apple.com' } do
341
+ context 'with html data with unescaped html', vcr: { cassette_name: 'support.apple.com' } do
342
342
  let(:url) { 'http://support.apple.com/kb/HT5642' }
343
343
 
344
344
  it_behaves_like 'link_preview'
@@ -389,12 +389,12 @@ describe LinkPreview do
389
389
  end
390
390
 
391
391
  it 'should issue minimum number of requests' do
392
- expect(http_client).to receive(:get).with('http://support.apple.com/kb/HT5642').ordered.and_call_original
392
+ expect(http_client).to receive(:get).with('http://support.apple.com/kb/HT5642', {}).ordered.and_call_original
393
393
  content.title
394
394
  content.image_data
395
395
  end
396
396
 
397
- context '#as_oembed' do
397
+ describe '#as_oembed' do
398
398
  subject(:oembed) { content.as_oembed }
399
399
 
400
400
  it 'should convert to oembed link' do
@@ -410,7 +410,7 @@ describe LinkPreview do
410
410
  end
411
411
  end
412
412
 
413
- context 'image data', vcr: { cassette_name: 'ggp.png' } do
413
+ context 'with image data', vcr: { cassette_name: 'ggp.png' } do
414
414
  let(:url) { 'http://www.golden-gate-park.com/wp-content/uploads/2011/02/Golden_Gate_Park_Logo_Header.png' }
415
415
 
416
416
  it_behaves_like 'link_preview'
@@ -461,7 +461,7 @@ describe LinkPreview do
461
461
  end
462
462
 
463
463
  # FIXME: should convert to photo via paperclip
464
- context '#as_oembed' do
464
+ describe '#as_oembed' do
465
465
  subject(:oembed) { content.as_oembed }
466
466
 
467
467
  it 'should convert to oembed link' do
@@ -477,18 +477,18 @@ describe LinkPreview do
477
477
  end
478
478
  end
479
479
 
480
- context 'youtube oembed 404', vcr: { cassette_name: 'youtube 404' } do
480
+ context 'with youtube oembed 404', vcr: { cassette_name: 'youtube 404' } do
481
481
  let(:url) { 'http://youtube.com/watch?v=1' }
482
482
 
483
483
  it_behaves_like 'link_preview'
484
484
  it { should_not be_found }
485
485
  it 'should issue minimum number of requests' do
486
- expect(http_client).to receive(:get).with('https://www.youtube.com/oembed?scheme=https&format=json&url=http%3A%2F%2Fyoutube.com%2Fwatch%3Fv%3D1').ordered.and_call_original
487
- expect(http_client).to receive(:get).with('http://youtube.com/watch?v=1').ordered.and_call_original
486
+ expect(http_client).to receive(:get).with('https://www.youtube.com/oembed?scheme=https&format=json&url=http%3A%2F%2Fyoutube.com%2Fwatch%3Fv%3D1', {}).ordered.and_call_original
487
+ expect(http_client).to receive(:get).with('http://youtube.com/watch?v=1', {}).ordered.and_call_original
488
488
  content.title
489
489
  end
490
490
 
491
- context '#as_oembed' do
491
+ describe '#as_oembed' do
492
492
  subject(:oembed) { content.as_oembed }
493
493
  it 'should return basic oembed' do
494
494
  should == {
@@ -502,7 +502,7 @@ describe LinkPreview do
502
502
  end
503
503
  end
504
504
 
505
- context 'kaltura opengraph', vcr: { cassette_name: 'kaltura_opengraph' } do
505
+ context 'with kaltura opengraph', vcr: { cassette_name: 'kaltura_opengraph' } do
506
506
  let(:url) { 'https://media.mediaspace.kaltura.com/media/Despicable+Me/0_w2zsofdj/6065172' }
507
507
 
508
508
  it_behaves_like 'link_preview'
@@ -553,14 +553,14 @@ describe LinkPreview do
553
553
  end
554
554
 
555
555
  it 'should issue minimum number of requests' do
556
- expect(http_client).to receive(:get).with('https://media.mediaspace.kaltura.com/media/Despicable+Me/0_w2zsofdj/6065172').ordered.and_call_original
556
+ expect(http_client).to receive(:get).with('https://media.mediaspace.kaltura.com/media/Despicable+Me/0_w2zsofdj/6065172', {}).ordered.and_call_original
557
557
  content.title
558
- expect(http_client).to receive(:get).with('https://cdnbakmi.kaltura.com/p/1059491/sp/105949100/thumbnail/entry_id/0_w2zsofdj/version/100021/width/400').ordered.and_call_original
558
+ expect(http_client).to receive(:get).with('https://cdnbakmi.kaltura.com/p/1059491/sp/105949100/thumbnail/entry_id/0_w2zsofdj/version/100021/width/400', {}).ordered.and_call_original
559
559
  content.image_data
560
560
  content.description
561
561
  end
562
562
 
563
- context '#as_oembed' do
563
+ describe '#as_oembed' do
564
564
  subject(:oembed) { content.as_oembed }
565
565
 
566
566
  it 'should convert opengraph to oembed' do
@@ -580,7 +580,7 @@ describe LinkPreview do
580
580
  end
581
581
  end
582
582
 
583
- context 'elasticsearch', vcr: { cassette_name: 'elasticsearch' } do
583
+ context 'with elasticsearch', vcr: { cassette_name: 'elasticsearch' } do
584
584
  let(:url) { 'http://www.elasticsearch.org/overview/hadoop' }
585
585
 
586
586
  it_behaves_like 'link_preview'
@@ -630,7 +630,7 @@ describe LinkPreview do
630
630
  it { should == 'blank_hero.png' }
631
631
  end
632
632
 
633
- context '#as_oembed' do
633
+ describe '#as_oembed' do
634
634
  subject(:oembed) { content.as_oembed }
635
635
 
636
636
  it 'should encode as link' do
@@ -647,7 +647,7 @@ describe LinkPreview do
647
647
  end
648
648
  end
649
649
 
650
- context 'resource with bad utf-8 in response', vcr: { cassette_name: 'bad_utf8' } do
650
+ context 'with resource with bad utf-8 in response', vcr: { cassette_name: 'bad_utf8' } do
651
651
  let(:url) { 'http://s.taobao.com' }
652
652
 
653
653
  it_behaves_like 'link_preview'
@@ -683,8 +683,9 @@ describe LinkPreview do
683
683
  end
684
684
  end
685
685
 
686
- context 'kaltura with html5 response', vcr: { cassette_name: 'kalture_html5' } do
686
+ context 'with kaltura with html5 video response fallback', vcr: { cassette_name: 'kaltura_html5_video' } do
687
687
  let(:url) { 'http://player.kaltura.com/modules/KalturaSupport/components/share/Share.html' }
688
+ let(:options) { { width: 600 } }
688
689
 
689
690
  it_behaves_like 'link_preview'
690
691
 
@@ -733,10 +734,164 @@ describe LinkPreview do
733
734
  it { should == '400' }
734
735
  end
735
736
 
736
- context '#as_oembed' do
737
+ describe '#as_oembed' do
737
738
  subject(:oembed) { content.as_oembed }
738
739
 
739
- it 'should convert opengraph to oembed' do
740
+ it 'should issue minimum number of requests convert opengraph to oembed' do
741
+ expect(http_client).to receive(:get).with('http://player.kaltura.com/modules/KalturaSupport/components/share/Share.html', width: 600).ordered.and_call_original
742
+ expect(http_client).to receive(:get).with('https://cdnapisec.kaltura.com/p/243342/sp/24334200/embedIframeJs/uiconf_id/28685261/partner_id/243342?iframeembed=true&playerId=kaltura_player&entry_id=1_sf5ovm7u', width: 600).ordered.and_return(Faraday::Response.new(status: 404))
743
+ expect(http_client).to receive(:get).with('http://cdnbakmi.kaltura.com/p/243342/sp/24334200/thumbnail/entry_id/1_sf5ovm7u/version/100003/width/400', width: 600).ordered.and_call_original
744
+ should == {
745
+ version: '1.0',
746
+ provider_name: %(Kaltura),
747
+ provider_url: 'http://player.kaltura.com',
748
+ title: %(Kaltura Player: Share Plugin example),
749
+ description: %(Kaltura Player: Share plugin demonstrates the ease of which social share can be configured with the kaltura player toolkit.),
750
+ type: 'video',
751
+ thumbnail_url: 'http://cdnbakmi.kaltura.com/p/243342/sp/24334200/thumbnail/entry_id/1_sf5ovm7u/version/100003/width/400',
752
+ html: %(<video width="600" height="338" controls><source src="https://cdnapisec.kaltura.com/p/243342/sp/24334200/playManifest/entryId/1_sf5ovm7u/flavorId/1_d2uwy7vv/format/url/protocol/http/a.mp4" type="video/mp4" /></video>),
753
+ width: 600,
754
+ height: 338
755
+ }
756
+ end
757
+ end
758
+ end
759
+
760
+ context 'with kaltura with html5 embed response', vcr: { cassette_name: 'kaltura_html5_embed' } do
761
+ let(:url) { 'http://player.kaltura.com/modules/KalturaSupport/components/share/Share.html' }
762
+
763
+ it_behaves_like 'link_preview'
764
+
765
+ describe '#url' do
766
+ subject { content.url }
767
+ it { should == url }
768
+ end
769
+
770
+ describe '#title' do
771
+ subject { content.title }
772
+ it { should == %(Kaltura Player: Share Plugin example) }
773
+ end
774
+
775
+ describe '#description' do
776
+ subject { content.description }
777
+ it { should == %(Kaltura Player: Share plugin demonstrates the ease of which social share can be configured with the kaltura player toolkit.) }
778
+ end
779
+
780
+ describe '#site_name' do
781
+ subject { content.site_name }
782
+ it { should == 'Kaltura' }
783
+ end
784
+
785
+ describe '#site_url' do
786
+ subject { content.site_url }
787
+ it { should == 'http://player.kaltura.com' }
788
+ end
789
+
790
+ describe '#image_url' do
791
+ subject { content.image_url }
792
+ it { should == 'http://cdnbakmi.kaltura.com/p/243342/sp/24334200/thumbnail/entry_id/1_sf5ovm7u/version/100003/width/400' }
793
+ end
794
+
795
+ describe '#image_data' do
796
+ subject { content.image_data }
797
+ it { should be_a(StringIO) }
798
+ end
799
+
800
+ describe '#image_content_type' do
801
+ subject { content.image_content_type }
802
+ it { should == 'image/jpeg' }
803
+ end
804
+
805
+ describe '#image_file_name' do
806
+ subject { content.image_file_name }
807
+ it { should == '400' }
808
+ end
809
+
810
+ describe '#as_oembed' do
811
+ subject(:oembed) { content.as_oembed }
812
+
813
+ it 'should issue minimum number of requests convert opengraph to oembed' do
814
+ expect(http_client).to receive(:get).with('http://player.kaltura.com/modules/KalturaSupport/components/share/Share.html', {}).ordered.and_call_original
815
+ expect(http_client).to receive(:get).with('https://cdnapisec.kaltura.com/p/243342/sp/24334200/embedIframeJs/uiconf_id/28685261/partner_id/243342?iframeembed=true&playerId=kaltura_player&entry_id=1_sf5ovm7u', {}).ordered.and_call_original
816
+ expect(http_client).to receive(:get).with('http://cdnbakmi.kaltura.com/p/243342/sp/24334200/thumbnail/entry_id/1_sf5ovm7u/version/100003/width/400', {}).ordered.and_call_original
817
+ should == {
818
+ version: '1.0',
819
+ provider_name: %(Kaltura),
820
+ provider_url: 'http://player.kaltura.com',
821
+ title: %(Kaltura Player: Share Plugin example),
822
+ description: %(Kaltura Player: Share plugin demonstrates the ease of which social share can be configured with the kaltura player toolkit.),
823
+ type: 'video',
824
+ thumbnail_url: 'http://cdnbakmi.kaltura.com/p/243342/sp/24334200/thumbnail/entry_id/1_sf5ovm7u/version/100003/width/400',
825
+ html: content.sources[:opengraph_embed][:html],
826
+ width: 560,
827
+ height: 395
828
+ }
829
+ end
830
+ end
831
+ end
832
+
833
+ context 'with kaltura with html5 video response with configuration ignore_opengraph_video_type_html', vcr: { cassette_name: 'kaltura_html5_ignore_video_type_html' } do
834
+ let(:url) { 'http://player.kaltura.com/modules/KalturaSupport/components/share/Share.html' }
835
+
836
+ around do |example|
837
+ LinkPreview.configuration.ignore_opengraph_video_type_html = true
838
+ example.run
839
+ LinkPreview.configuration.ignore_opengraph_video_type_html = nil
840
+ end
841
+
842
+ it_behaves_like 'link_preview'
843
+
844
+ describe '#url' do
845
+ subject { content.url }
846
+ it { should == url }
847
+ end
848
+
849
+ describe '#title' do
850
+ subject { content.title }
851
+ it { should == %(Kaltura Player: Share Plugin example) }
852
+ end
853
+
854
+ describe '#description' do
855
+ subject { content.description }
856
+ it { should == %(Kaltura Player: Share plugin demonstrates the ease of which social share can be configured with the kaltura player toolkit.) }
857
+ end
858
+
859
+ describe '#site_name' do
860
+ subject { content.site_name }
861
+ it { should == 'Kaltura' }
862
+ end
863
+
864
+ describe '#site_url' do
865
+ subject { content.site_url }
866
+ it { should == 'http://player.kaltura.com' }
867
+ end
868
+
869
+ describe '#image_url' do
870
+ subject { content.image_url }
871
+ it { should == 'http://cdnbakmi.kaltura.com/p/243342/sp/24334200/thumbnail/entry_id/1_sf5ovm7u/version/100003/width/400' }
872
+ end
873
+
874
+ describe '#image_data' do
875
+ subject { content.image_data }
876
+ it { should be_a(StringIO) }
877
+ end
878
+
879
+ describe '#image_content_type' do
880
+ subject { content.image_content_type }
881
+ it { should == 'image/jpeg' }
882
+ end
883
+
884
+ describe '#image_file_name' do
885
+ subject { content.image_file_name }
886
+ it { should == '400' }
887
+ end
888
+
889
+ describe '#as_oembed' do
890
+ subject(:oembed) { content.as_oembed }
891
+
892
+ it 'should issue minimum number of requests convert opengraph to oembed' do
893
+ expect(http_client).to receive(:get).with('http://player.kaltura.com/modules/KalturaSupport/components/share/Share.html', {}).ordered.and_call_original
894
+ expect(http_client).to receive(:get).with('http://cdnbakmi.kaltura.com/p/243342/sp/24334200/thumbnail/entry_id/1_sf5ovm7u/version/100003/width/400', {}).ordered.and_call_original
740
895
  should == {
741
896
  version: '1.0',
742
897
  provider_name: %(Kaltura),
@@ -752,4 +907,86 @@ describe LinkPreview do
752
907
  end
753
908
  end
754
909
  end
910
+
911
+ context 'with flickr with oembed response', vcr: { cassette_name: 'flickr_oembed' } do
912
+ let(:url) { 'https://www.flickr.com/photos/bees/2341623661' }
913
+ let(:options) { { width: 600 } }
914
+
915
+ it_behaves_like 'link_preview'
916
+
917
+ describe '#url' do
918
+ subject { content.url }
919
+ it { should == 'https://farm4.staticflickr.com/3123/2341623661_7c99f48bbf_n.jpg' }
920
+ end
921
+
922
+ describe '#title' do
923
+ subject { content.title }
924
+ it { should == %(ZB8T0193) }
925
+ end
926
+
927
+ describe '#description' do
928
+ subject { content.description }
929
+ it { should == %(Explore bees's photos on Flickr. bees has uploaded 10229 photos to Flickr.) }
930
+ end
931
+
932
+ describe '#site_name' do
933
+ subject { content.site_name }
934
+ it { should == 'Flickr' }
935
+ end
936
+
937
+ describe '#site_url' do
938
+ subject { content.site_url }
939
+ it { should == 'https://www.flickr.com/' }
940
+ end
941
+
942
+ describe '#image_url' do
943
+ subject { content.image_url }
944
+ it { should == 'https://farm4.staticflickr.com/3123/2341623661_7c99f48bbf_q.jpg' }
945
+ end
946
+
947
+ describe '#image_data' do
948
+ subject { content.image_data }
949
+ it { should be_a(StringIO) }
950
+ end
951
+
952
+ describe '#image_content_type' do
953
+ subject { content.image_content_type }
954
+ it { should == 'image/jpeg' }
955
+ end
956
+
957
+ describe '#image_file_name' do
958
+ subject { content.image_file_name }
959
+ it { should == '2341623661_7c99f48bbf_q.jpg' }
960
+ end
961
+
962
+ describe '#as_oembed' do
963
+ subject(:oembed) { content.as_oembed }
964
+
965
+ it 'should convert opengraph to oembed' do
966
+ should == {
967
+ author_name: "\u202e\u202d\u202cbees\u202c",
968
+ author_url: 'https://www.flickr.com/photos/bees/',
969
+ cache_age: 3600,
970
+ description: "Explore bees's photos on Flickr. bees has uploaded 10229 photos to Flickr.",
971
+ flickr_type: 'photo',
972
+ height: 213,
973
+ html: %(<a data-flickr-embed="true" href="https://www.flickr.com/photos/bees/2341623661/" title="ZB8T0193 by \u202e\u202d\u202cbees\u202c, on Flickr"><img src="https://farm4.staticflickr.com/3123/2341623661_7c99f48bbf_n.jpg" width="320" height="213" alt="ZB8T0193"></a><script async src="https://embedr.flickr.com/assets/client-code.js" charset="utf-8"></script>),
974
+ license: 'All Rights Reserved',
975
+ license_id: 0,
976
+ provider_name: 'Flickr',
977
+ provider_url: 'https://www.flickr.com/',
978
+ thumbnail_height: 150,
979
+ thumbnail_url: 'https://farm4.staticflickr.com/3123/2341623661_7c99f48bbf_q.jpg',
980
+ thumbnail_width: 150,
981
+ title: 'ZB8T0193',
982
+ type: 'photo',
983
+ url: 'https://farm4.staticflickr.com/3123/2341623661_7c99f48bbf_n.jpg',
984
+ version: '1.0',
985
+ web_page: 'https://www.flickr.com/photos/bees/2341623661/',
986
+ web_page_short_url: 'https://flic.kr/p/4yVr8K',
987
+ width: '320'
988
+ }
989
+ end
990
+ end
991
+ end
755
992
  end