RAILS_ROOT = File.dirname(__FILE__) + '/rails_root' require 'fileutils' class MockLogger def self.warn(msg) @f ||= File.open(File.dirname(__FILE__) + '/mock_upload_test.log', 'w') @f.puts("Into logger: %s" % msg) end end RAILS_DEFAULT_LOGGER = MockLogger require 'stringio' require 'rubygems' require 'active_support' require 'test/unit' require File.dirname(__FILE__) + '/init' class MockUploadTest < Test::Unit::TestCase def setup Dir.mkdir(File.join(File.dirname(__FILE__), 'tmp')) end def test_mock_uploads mock_jpeg = generate("stuff.JPG") mock_png = generate("stuff.png") mock_gif = generate("stuff.gif") mock_pdf = generate("doc.pdf") [mock_jpeg, mock_png, mock_gif].each do | obj | assert_kind_of StringIO, obj assert obj.respond_to?(:content_type) assert obj.respond_to?(:local_path) assert obj.respond_to?(:original_filename) assert File.exist?(obj.local_path) assert_equal File.join(RAILS_ROOT, 'tmp', 'uploads'), File.dirname(obj.local_path) end assert_equal 'jpg', mock_jpeg.extension assert_equal 'png', mock_png.extension assert_equal 'gif', mock_gif.extension assert_equal 'pdf', mock_pdf.extension assert_equal 'image/jpeg', mock_jpeg.content_type assert_equal 'image/png', mock_png.content_type assert_equal 'image/gif', mock_gif.content_type assert_equal 'application/pdf', mock_pdf.content_type assert_equal "stuff.JPG", mock_jpeg.original_filename assert_equal "stuff.png", mock_png.original_filename assert_equal "stuff.gif", mock_gif.original_filename assert_equal "doc.pdf", mock_pdf.original_filename assert_equal MockUpload.mock_jpg, mock_jpeg.read assert_equal MockUpload.mock_png, mock_png.read assert_equal MockUpload.mock_gif, mock_gif.read assert_equal MockUpload.mock_pdf, mock_pdf.read mock_pdf.rewind assert_equal 20820, mock_pdf.read.length, "The mock PDF should read the mock PDF file which is exactly 20820 bytes long" second_mock_jpeg = generate("stuff.JPG") assert (second_mock_jpeg.local_path != mock_jpeg.local_path), "Files with same names should not be reused" jpeg_temporary_path = mock_jpeg.local_path assert File.exist?(jpeg_temporary_path) mock_jpeg = nil ObjectSpace.garbage_collect assert !File.exist?(jpeg_temporary_path), "The tempfile should be removed when GC is ran" end def test_mock_icm_grabbed_from_rails_fixtures mock_icc_profile = MockUpload.new("Cineon.icm") assert_equal 3144, mock_icc_profile.read.length, "The length of the mock ICC profile in fixtures is exactly 3144 bytes" end def test_mock_file_not_in_fixtures_gets_filled_with_text mock_doc = MockUpload.new("fucking_bureaucrats_letter.doc") assert_equal "Mock file content for application/doc", mock_doc.read end def test_mock_upload_responds_to_logger assert_respond_to MockUpload, :logger= assert_respond_to MockUpload, :logger end class Boo < RuntimeError; end class MoLo def debug(msg) raise Boo, msg end end def test_mock_upload_logs_creation begin MockUpload.logger = MoLo.new assert_raise(Boo) do MockUpload.new("some_another.doc") end ensure MockUpload.logger = nil end end def teardown FileUtils.rm_rf(File.join(File.dirname(__FILE__), 'tmp')) end private def generate(name) MockUpload.new(name) end end