require 'rails_helper' RSpec.describe Preview::ThumbnailFetcher do describe '.fetch' do it 'rejects svg thumbnails' do page = Preview::HttpFetcher::Response.new( '', 'text/html', 'https://example.com/page') svg = Preview::HttpFetcher::Response.new( '', 'image/svg+xml', 'https://example.com/thumb.svg') allow(Preview::UrlSafety).to receive(:validate) .and_return([URI.parse('https://example.com/page'), ['203.0.113.10']]) allow(Preview::HttpFetcher).to receive(:fetch) .with('https://example.com/page', max_bytes: described_class::HTML_MAX_BYTES) .and_return(page) allow(Preview::HttpFetcher).to receive(:fetch) .with('https://example.com/thumb.svg') .and_return(svg) expect { described_class.fetch('https://example.com/page') }.to raise_error(Preview::ThumbnailFetcher::GenerationFailed) end it 'accepts allowed image content type with parameters' do page = Preview::HttpFetcher::Response.new( '', 'text/html', 'https://example.com/page') image = Preview::HttpFetcher::Response.new( 'jpeg-bytes', 'image/jpeg; charset=binary', 'https://example.com/thumb.jpg') allow(Preview::UrlSafety).to receive(:validate) .and_return([URI.parse('https://example.com/page'), ['203.0.113.10']]) allow(Preview::HttpFetcher).to receive(:fetch) .with('https://example.com/page', max_bytes: described_class::HTML_MAX_BYTES) .and_return(page) allow(Preview::HttpFetcher).to receive(:fetch) .with('https://example.com/thumb.jpg') .and_return(image) expect(described_class.fetch('https://example.com/page')).to eq('jpeg-bytes') end end end