require 'test_helper'
require 'action_view/test_case'
class WickedPdfHelperAssetsTest < ActionView::TestCase
include WickedPdf::WickedPdfHelper::Assets
setup do
@saved_config = WickedPdf.config
WickedPdf.config = {}
end
teardown do
WickedPdf.config = @saved_config
end
if Rails::VERSION::MAJOR > 3 || (Rails::VERSION::MAJOR == 3 && Rails::VERSION::MINOR > 0)
test 'wicked_pdf_asset_base64 returns a base64 encoded asset' do
assert_match %r{data:text\/css;base64,.+}, wicked_pdf_asset_base64('wicked.css')
end
test 'wicked_pdf_stylesheet_link_tag should inline the stylesheets passed in' do
Rails.configuration.assets.expects(:compile => true)
assert_equal "",
wicked_pdf_stylesheet_link_tag('wicked')
end
test 'wicked_pdf_stylesheet_link_tag should raise if the stylesheet is not available and config is set' do
Rails.configuration.assets.expects(:compile => true)
WickedPdf.config[:raise_on_missing_assets] = true
assert_raise WickedPdf::WickedPdfHelper::Assets::MissingLocalAsset do
wicked_pdf_stylesheet_link_tag('non_existent')
end
end
test 'wicked_pdf_stylesheet_link_tag should return empty if the stylesheet is not available' do
Rails.configuration.assets.expects(:compile => true)
assert_equal "",
wicked_pdf_stylesheet_link_tag('non_existent')
end
test 'wicked_pdf_stylesheet_link_tag should raise if the absolute path stylesheet is not available and config is set' do
Rails.configuration.assets.expects(:compile => true)
WickedPdf.config[:raise_on_missing_assets] = true
expects(:precompiled_or_absolute_asset? => true).twice
assert_raise WickedPdf::WickedPdfHelper::Assets::MissingLocalAsset do
wicked_pdf_stylesheet_link_tag('/non_existent')
end
end
test 'wicked_pdf_stylesheet_link_tag should return empty if the absolute path stylesheet is not available' do
Rails.configuration.assets.expects(:compile => true).twice
assert_equal "",
wicked_pdf_stylesheet_link_tag('/non_existent')
end
test 'wicked_pdf_stylesheet_link_tag should inline the stylesheets passed in when assets are remote' do
stub_request(:get, 'https://www.example.com/wicked.css').to_return(:status => 200, :body => '/* Wicked styles */')
expects(:precompiled_or_absolute_asset? => true).twice
assert_equal "",
wicked_pdf_stylesheet_link_tag('https://www.example.com/wicked.css')
end
test 'wicked_pdf_stylesheet_link_tag should raise if remote assets are not available and config is set' do
WickedPdf.config[:raise_on_missing_assets] = true
stub_request(:get, 'https://www.example.com/wicked.css').to_return(:status => 404, :body => 'File not found')
expects(:precompiled_or_absolute_asset? => true).twice
assert_raise WickedPdf::WickedPdfHelper::Assets::MissingRemoteAsset do
wicked_pdf_stylesheet_link_tag('https://www.example.com/wicked.css')
end
end
test 'wicked_pdf_stylesheet_link_tag should return empty if remote assets are not available' do
stub_request(:get, 'https://www.example.com/wicked.css').to_return(:status => 404, :body => 'File not found')
expects(:precompiled_or_absolute_asset? => true).twice
assert_equal "",
wicked_pdf_stylesheet_link_tag('https://www.example.com/wicked.css')
end
test 'wicked_pdf_image_tag should return the same as image_tag when passed a full path' do
Rails.configuration.assets.expects(:compile => true)
assert_equal image_tag("file:///#{Rails.root.join('public', 'pdf')}"),
wicked_pdf_image_tag('pdf')
end
test 'wicked_pdf_javascript_include_tag should inline the javascripts passed in' do
Rails.configuration.assets.expects(:compile => true)
assert_equal "",
wicked_pdf_javascript_include_tag('wicked')
end
test 'wicked_pdf_asset_path should return a url when assets are served by an asset server' do
expects(:asset_pathname => 'http://assets.domain.com/dummy.png')
assert_equal 'http://assets.domain.com/dummy.png', wicked_pdf_asset_path('dummy.png')
end
test 'wicked_pdf_asset_path should return a url when assets are served by an asset server using HTTPS' do
Rails.configuration.assets.expects(:compile => false)
expects(:asset_path => 'https://assets.domain.com/dummy.png')
assert_equal 'https://assets.domain.com/dummy.png', wicked_pdf_asset_path('dummy.png')
end
test 'wicked_pdf_asset_path should return a url with a protocol when assets are served by an asset server with relative urls' do
Rails.configuration.assets.expects(:compile => false)
expects(:asset_path => '//assets.domain.com/dummy.png')
assert_equal 'http://assets.domain.com/dummy.png', wicked_pdf_asset_path('dummy.png')
end
test 'wicked_pdf_asset_path should return a url with a protocol when assets are served by an asset server with no protocol set' do
Rails.configuration.assets.expects(:compile => false)
expects(:asset_path => 'assets.domain.com/dummy.png')
assert_equal 'http://assets.domain.com/dummy.png', wicked_pdf_asset_path('dummy.png')
end
test 'wicked_pdf_asset_path should return a path' do
Rails.configuration.assets.expects(:compile => true)
path = wicked_pdf_asset_path('application.css')
assert path.include?('/app/assets/stylesheets/application.css')
assert path.include?('file:///')
Rails.configuration.assets.expects(:compile => false)
expects(:asset_path => '/assets/application-6fba03f13d6ff1553477dba03475c4b9b02542e9fb8913bd63c258f4de5b48d9.css')
path = wicked_pdf_asset_path('application.css')
assert path.include?('/public/assets/application-6fba03f13d6ff1553477dba03475c4b9b02542e9fb8913bd63c258f4de5b48d9.css')
assert path.include?('file:///')
end
# This assets does not exists so probably it doesn't matter what is
# returned, but lets ensure that returned value is the same when assets
# are precompiled and when they are not
test 'wicked_pdf_asset_path should return a path when asset does not exist' do
Rails.configuration.assets.expects(:compile => true)
path = wicked_pdf_asset_path('missing.png')
assert path.include?('/public/missing.png')
assert path.include?('file:///')
Rails.configuration.assets.expects(:compile => false)
expects(:asset_path => '/missing.png')
path = wicked_pdf_asset_path('missing.png')
assert path.include?('/public/missing.png')
assert path.include?('file:///')
end
test 'wicked_pdf_asset_path should return a url when asset is url' do
Rails.configuration.assets.expects(:compile => true)
expects(:asset_path => 'http://example.com/rails.png')
assert_equal 'http://example.com/rails.png', wicked_pdf_asset_path('http://example.com/rails.png')
Rails.configuration.assets.expects(:compile => false)
expects(:asset_path => 'http://example.com/rails.png')
assert_equal 'http://example.com/rails.png', wicked_pdf_asset_path('http://example.com/rails.png')
end
test 'wicked_pdf_asset_path should return a url when asset is url without protocol' do
Rails.configuration.assets.expects(:compile => true)
expects(:asset_path => '//example.com/rails.png')
assert_equal 'http://example.com/rails.png', wicked_pdf_asset_path('//example.com/rails.png')
Rails.configuration.assets.expects(:compile => false)
expects(:asset_path => '//example.com/rails.png')
assert_equal 'http://example.com/rails.png', wicked_pdf_asset_path('//example.com/rails.png')
end
test 'WickedPdfHelper::Assets::ASSET_URL_REGEX should match various URL data type formats' do
assert_match WickedPdf::WickedPdfHelper::Assets::ASSET_URL_REGEX, 'url(\'/asset/stylesheets/application.css\');'
assert_match WickedPdf::WickedPdfHelper::Assets::ASSET_URL_REGEX, 'url("/asset/stylesheets/application.css");'
assert_match WickedPdf::WickedPdfHelper::Assets::ASSET_URL_REGEX, 'url(/asset/stylesheets/application.css);'
assert_match WickedPdf::WickedPdfHelper::Assets::ASSET_URL_REGEX, 'url(\'http://assets.domain.com/dummy.png\');'
assert_match WickedPdf::WickedPdfHelper::Assets::ASSET_URL_REGEX, 'url("http://assets.domain.com/dummy.png");'
assert_match WickedPdf::WickedPdfHelper::Assets::ASSET_URL_REGEX, 'url(http://assets.domain.com/dummy.png);'
assert_no_match WickedPdf::WickedPdfHelper::Assets::ASSET_URL_REGEX, '.url { \'http://assets.domain.com/dummy.png\' }'
end
test 'prepend_protocol should properly set the protocol when the asset is precompiled' do
assert_equal 'http://assets.domain.com/dummy.png', prepend_protocol('//assets.domain.com/dummy.png')
assert_equal '/assets.domain.com/dummy.png', prepend_protocol('/assets.domain.com/dummy.png')
assert_equal 'http://assets.domain.com/dummy.png', prepend_protocol('http://assets.domain.com/dummy.png')
assert_equal 'https://assets.domain.com/dummy.png', prepend_protocol('https://assets.domain.com/dummy.png')
end
end
end