require 'test_helper'
require File.expand_path('../../lib/active_scaffold/bridges/paperclip/paperclip_bridge', __dir__)
require File.expand_path('../../lib/active_scaffold/bridges/paperclip/paperclip_bridge_helpers', __dir__)
require File.expand_path('../../lib/active_scaffold/bridges/paperclip/form_ui', __dir__)
require File.expand_path('../../lib/active_scaffold/bridges/paperclip/list_ui', __dir__)
class PaperclipCore < ActiveScaffold::Config::Core
include ActiveScaffold::Bridges::Paperclip::PaperclipBridge
end
class PaperclipTest < ActionView::TestCase
include ActiveScaffold::Helpers::ViewHelpers
def test_initialization_without_paperclip
Company.expects(:attachment_definitions)
config = PaperclipCore.new(:company)
refute config.create.multipart?
refute config.update.multipart?
refute(config.columns.any? { |column| column.form_ui == :paperclip })
end
def test_initialization
config = PaperclipCore.new(:company)
assert config.create.multipart?
assert config.update.multipart?
assert_equal :paperclip, config.columns[:logo].form_ui
assert_equal [:delete_logo], config.columns[:logo].params.to_a
%w[logo_file_name logo_file_size logo_updated_at logo_content_type].each do |attr|
refute config.columns._inheritable.include?(attr.to_sym)
end
assert Company.method_defined?(:delete_logo)
assert Company.method_defined?(:'delete_logo=')
end
def test_delete
PaperclipCore.new(:company)
company = Company.new
company.expects(:logo=).never
company.delete_logo = 'false'
company.expects(:logo).returns(stub(:dirty? => false))
company.expects(:logo=)
company.delete_logo = 'true' # rubocop:disable Lint/UselessSetterCall
end
def test_list_ui
config = PaperclipCore.new(:company)
company = Company.new
company.stubs(:logo).returns(stub(:file? => true, :original_filename => 'file', :url => '/system/file', :styles => Company.attachment_definitions[:logo]))
assert_dom_equal 'file', active_scaffold_column_paperclip(company, config.columns[:logo])
company.stubs(:logo).returns(stub(:file? => true, :original_filename => 'file', :url => '/system/file', :styles => {:thumbnail => '40x40'}))
assert_dom_equal '
', active_scaffold_column_paperclip(company, config.columns[:logo])
end
def test_form_ui
with_js_framework :jquery do
config = PaperclipCore.new(:company)
@record = Company.new
opts = {name: 'record[logo]', id: 'record_logo', object: @record}
@record.stubs(:logo).returns(stub(:file? => true, :original_filename => 'file', :url => '/system/file', :styles => Company.attachment_definitions[:logo]))
click_js = "jQuery(this).prev().val('true'); jQuery(this).parent().hide().next().show(); return false;"
change_js = "jQuery(this).parents('div.paperclip_controls').find('input.remove_file').val('false'); return false;"
@document = Nokogiri::HTML::Document.parse(active_scaffold_input_paperclip(config.columns[:logo], opts))
assert_select 'div.paperclip_controls input[type=file]' do |match|
assert_equal match[0]['onchange'], change_js
end
assert_select 'div.paperclip_controls a[href="#"][onclick]' do |match|
assert_equal match[0]['onclick'], click_js
end
assert_select 'div.paperclip_controls input.remove_file[type=hidden][value=false]'
@record.stubs(:logo).returns(stub(:file? => false))
assert_dom_equal '', active_scaffold_input_paperclip(config.columns[:logo], opts)
end
end
protected
def document_root_element
@document.root
end
end