Skip to content
Extraits de code Groupes Projets
gather_o_embed_data_spec.rb 2,54 ko
Newer Older
  • Learn to ignore specific revisions
  • Manuel Schölling's avatar
    Manuel Schölling a validé
    require 'spec_helper'
    
    Jonne Haß's avatar
    Jonne Haß a validé
    describe Workers::GatherOEmbedData do
    
    Manuel Schölling's avatar
    Manuel Schölling a validé
      before do
        @flickr_oembed_data = {
          "trusted_endpoint_url" => "__!SPOOFED!__",
          "version" => "1.0",
          "type" => "photo",
          "author_url" => "http://www.flickr.com/photos/bees/",
          "cache_age" => 3600,
          "provider_name" => "Flickr",
          "provider_url" => "http://www.flickr.com/",
          "title" => "ZB8T0193",
          "author_name" => "Bees",
          "width" => "240",
          "height" => "160",
          "url" => "https://farm4.static.flickr.com/3123/2341623661_7c99f48bbf_m.jpg"
        }
    
    
    Jonne Haß's avatar
    Jonne Haß a validé
        @flickr_oembed_url = "https://www.flickr.com/services/oembed/"
        @flickr_photo_url = "http://www.flickr.com/photos/bees/2341623661"
        @flickr_oembed_get_request = "#{@flickr_oembed_url}" \
          "?format=json&frame=1&iframe=1&maxheight=420&maxwidth=420&url=#{@flickr_photo_url}"
    
    Manuel Schölling's avatar
    Manuel Schölling a validé
    
        @no_oembed_url = 'http://www.we-do-not-support-oembed.com/index.html'
    
    
    Jonne Haß's avatar
    Jonne Haß a validé
        @status_message = FactoryGirl.create(:status_message)
    
    Manuel Schölling's avatar
    Manuel Schölling a validé
        stub_request(:get, @flickr_oembed_get_request).to_return(:status => 200, :body => @flickr_oembed_data.to_json)
        stub_request(:get, @no_oembed_url).to_return(:status => 200, :body => '<html><body>hello there</body></html>')
      end
    
      describe '.perform' do
        it 'requests not data from the internet' do
    
    Jonne Haß's avatar
    Jonne Haß a validé
          Workers::GatherOEmbedData.new.perform(@status_message.id, @flickr_photo_url)
    
          expect(a_request(:get, @flickr_oembed_get_request)).to have_been_made
    
    Manuel Schölling's avatar
    Manuel Schölling a validé
        end
    
        it 'requests not data from the internet only once' do
    
    Jonne Haß's avatar
    Jonne Haß a validé
            Workers::GatherOEmbedData.new.perform(@status_message.id, @flickr_photo_url)
    
          expect(a_request(:get, @flickr_oembed_get_request)).to have_been_made.times(1)
    
    Manuel Schölling's avatar
    Manuel Schölling a validé
        end
    
        it 'creates one cache entry' do
    
    Jonne Haß's avatar
    Jonne Haß a validé
          Workers::GatherOEmbedData.new.perform(@status_message.id, @flickr_photo_url)
    
    Manuel Schölling's avatar
    Manuel Schölling a validé
    
          expected_data = @flickr_oembed_data
          expected_data['trusted_endpoint_url'] = @flickr_oembed_url
    
          expect(OEmbedCache.find_by_url(@flickr_photo_url).data).to eq(expected_data)
    
    Jonne Haß's avatar
    Jonne Haß a validé
          Workers::GatherOEmbedData.new.perform(@status_message.id, @flickr_photo_url)
    
          expect(OEmbedCache.where(url: @flickr_photo_url).count).to eq(1)
    
    Manuel Schölling's avatar
    Manuel Schölling a validé
        end
    
        it 'creates no cache entry for unsupported pages' do
    
    Jonne Haß's avatar
    Jonne Haß a validé
          Workers::GatherOEmbedData.new.perform(@status_message.id, @no_oembed_url)
    
          expect(OEmbedCache.find_by_url(@no_oembed_url)).to be_nil
    
    Manuel Schölling's avatar
    Manuel Schölling a validé
        end
    
    Jonne Haß's avatar
    Jonne Haß a validé
    
        it 'gracefully handles a deleted post' do
          expect {
            Workers::GatherOEmbedData.new.perform(0, @flickr_photo_url)
    
          }.to_not raise_error
    
    Jonne Haß's avatar
    Jonne Haß a validé
        end
    
    Manuel Schölling's avatar
    Manuel Schölling a validé
      end
    end