diff test/functional/attachments_controller_test.rb @ 1115:433d4f72a19b redmine-2.2

Update to Redmine SVN revision 11137 on 2.2-stable branch
author Chris Cannam
date Mon, 07 Jan 2013 12:01:42 +0000
parents cbb26bc654de
children bb32da3bea34 622f24f53b42
line wrap: on
line diff
--- a/test/functional/attachments_controller_test.rb	Wed Jun 27 14:54:18 2012 +0100
+++ b/test/functional/attachments_controller_test.rb	Mon Jan 07 12:01:42 2013 +0000
@@ -1,7 +1,7 @@
 # encoding: utf-8
 #
 # Redmine - project management software
-# Copyright (C) 2006-2011  Jean-Philippe Lang
+# Copyright (C) 2006-2012  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
@@ -32,8 +32,12 @@
     @controller = AttachmentsController.new
     @request    = ActionController::TestRequest.new
     @response   = ActionController::TestResponse.new
-    Attachment.storage_path = "#{Rails.root}/test/fixtures/files"
     User.current = nil
+    set_fixtures_attachments_directory
+  end
+
+  def teardown
+    set_tmp_attachments_directory
   end
 
   def test_show_diff
@@ -92,8 +96,13 @@
   end
 
   def test_save_diff_type
+    user1 = User.find(1)
+    user1.pref[:diff_type] = nil
+    user1.preference.save
+    user = User.find(1)
+    assert_nil user.pref[:diff_type]
+
     @request.session[:user_id] = 1 # admin
-    user = User.find(1)
     get :show, :id => 5
     assert_response :success
     assert_template 'diff'
@@ -106,6 +115,21 @@
     assert_equal "sbs", user.pref[:diff_type]
   end
 
+  def test_diff_show_filename_in_mercurial_export
+    set_tmp_attachments_directory
+    a = Attachment.new(:container => Issue.find(1),
+                       :file => uploaded_test_file("hg-export.diff", "text/plain"),
+                       :author => User.find(1))
+    assert a.save
+    assert_equal 'hg-export.diff', a.filename
+
+    get :show, :id => a.id, :type => 'inline'
+    assert_response :success
+    assert_template 'diff'
+    assert_equal 'text/html', @response.content_type
+    assert_select 'th.filename', :text => 'test1.txt'
+  end
+
   def test_show_text_file
     get :show, :id => 4
     assert_response :success
@@ -206,6 +230,20 @@
     set_tmp_attachments_directory
   end
 
+  def test_show_file_without_container_should_be_denied
+    set_tmp_attachments_directory
+    attachment = Attachment.create!(:file => uploaded_test_file("testfile.txt", "text/plain"), :author_id => 2)
+
+    @request.session[:user_id] = 2
+    get :show, :id => attachment.id
+    assert_response 403
+  end
+
+  def test_show_invalid_should_respond_with_404
+    get :show, :id => 999
+    assert_response 404
+  end
+
   def test_download_text_file
     get :download, :id => 4
     assert_response :success
@@ -234,27 +272,77 @@
     set_tmp_attachments_directory
   end
 
-  def test_anonymous_on_private_private
+  def test_download_should_be_denied_without_permission
     get :download, :id => 7
     assert_redirected_to '/login?back_url=http%3A%2F%2Ftest.host%2Fattachments%2Fdownload%2F7'
     set_tmp_attachments_directory
   end
 
+  if convert_installed?
+    def test_thumbnail
+      Attachment.clear_thumbnails
+      @request.session[:user_id] = 2
+
+      get :thumbnail, :id => 16
+      assert_response :success
+      assert_equal 'image/png', response.content_type
+    end
+
+    def test_thumbnail_should_not_exceed_maximum_size
+      Redmine::Thumbnail.expects(:generate).with {|source, target, size| size == 800}
+
+      @request.session[:user_id] = 2
+      get :thumbnail, :id => 16, :size => 2000
+    end
+
+    def test_thumbnail_should_round_size
+      Redmine::Thumbnail.expects(:generate).with {|source, target, size| size == 250}
+
+      @request.session[:user_id] = 2
+      get :thumbnail, :id => 16, :size => 260
+    end
+
+    def test_thumbnail_should_return_404_for_non_image_attachment
+      @request.session[:user_id] = 2
+
+      get :thumbnail, :id => 15
+      assert_response 404
+    end
+
+    def test_thumbnail_should_return_404_if_thumbnail_generation_failed
+      Attachment.any_instance.stubs(:thumbnail).returns(nil)
+      @request.session[:user_id] = 2
+
+      get :thumbnail, :id => 16
+      assert_response 404
+    end
+
+    def test_thumbnail_should_be_denied_without_permission
+      get :thumbnail, :id => 16
+      assert_redirected_to '/login?back_url=http%3A%2F%2Ftest.host%2Fattachments%2Fthumbnail%2F16'
+    end
+  else
+    puts '(ImageMagick convert not available)'
+  end
+
   def test_destroy_issue_attachment
     set_tmp_attachments_directory
     issue = Issue.find(3)
     @request.session[:user_id] = 2
 
     assert_difference 'issue.attachments.count', -1 do
-      delete :destroy, :id => 1
+      assert_difference 'Journal.count' do
+        delete :destroy, :id => 1
+        assert_redirected_to '/projects/ecookbook'
+      end
     end
-    # no referrer
-    assert_redirected_to '/projects/ecookbook'
     assert_nil Attachment.find_by_id(1)
-    j = issue.journals.find(:first, :order => 'created_on DESC')
+    j = Journal.first(:order => 'id DESC')
+    assert_equal issue, j.journalized
     assert_equal 'attachment', j.details.first.property
     assert_equal '1', j.details.first.prop_key
     assert_equal 'error281.txt', j.details.first.old_value
+    assert_equal User.find(2), j.user
   end
 
   def test_destroy_wiki_page_attachment