attachmerb_fu 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/LICENSE +22 -0
- data/README +166 -0
- data/Rakefile +35 -0
- data/TODO +5 -0
- data/lib/amazon_s3.yml.tpl +14 -0
- data/lib/attachment_fu.rb +431 -0
- data/lib/attachmerb_fu.rb +446 -0
- data/lib/attachmerb_fu/backends/db_file_backend.rb +37 -0
- data/lib/attachmerb_fu/backends/file_system_backend.rb +95 -0
- data/lib/attachmerb_fu/backends/s3_backend.rb +307 -0
- data/lib/attachmerb_fu/merbtasks.rb +6 -0
- data/lib/attachmerb_fu/processors/image_science_processor.rb +60 -0
- data/lib/attachmerb_fu/processors/mini_magick_processor.rb +54 -0
- data/lib/attachmerb_fu/processors/rmagick_processor.rb +51 -0
- data/lib/geometry.rb +93 -0
- data/lib/tempfile_ext.rb +9 -0
- data/lib/test/amazon_s3.yml +6 -0
- data/lib/test/backends/db_file_test.rb +16 -0
- data/lib/test/backends/file_system_test.rb +80 -0
- data/lib/test/backends/remote/s3_test.rb +103 -0
- data/lib/test/base_attachment_tests.rb +57 -0
- data/lib/test/basic_test.rb +64 -0
- data/lib/test/database.yml +18 -0
- data/lib/test/extra_attachment_test.rb +57 -0
- data/lib/test/fixtures/attachment.rb +127 -0
- data/lib/test/fixtures/files/fake/rails.png +0 -0
- data/lib/test/fixtures/files/foo.txt +1 -0
- data/lib/test/fixtures/files/rails.png +0 -0
- data/lib/test/geometry_test.rb +101 -0
- data/lib/test/processors/image_science_test.rb +31 -0
- data/lib/test/processors/mini_magick_test.rb +31 -0
- data/lib/test/processors/rmagick_test.rb +241 -0
- data/lib/test/schema.rb +86 -0
- data/lib/test/test_helper.rb +142 -0
- data/lib/test/validation_test.rb +55 -0
- metadata +107 -0
@@ -0,0 +1,64 @@
|
|
1
|
+
require File.expand_path(File.join(File.dirname(__FILE__), 'test_helper'))
|
2
|
+
|
3
|
+
class BasicTest < Test::Unit::TestCase
|
4
|
+
def test_should_set_default_min_size
|
5
|
+
assert_equal 1, Attachment.attachment_options[:min_size]
|
6
|
+
end
|
7
|
+
|
8
|
+
def test_should_set_default_max_size
|
9
|
+
assert_equal 1.megabyte, Attachment.attachment_options[:max_size]
|
10
|
+
end
|
11
|
+
|
12
|
+
def test_should_set_default_size
|
13
|
+
assert_equal (1..1.megabyte), Attachment.attachment_options[:size]
|
14
|
+
end
|
15
|
+
|
16
|
+
def test_should_set_default_thumbnails_option
|
17
|
+
assert_equal Hash.new, Attachment.attachment_options[:thumbnails]
|
18
|
+
end
|
19
|
+
|
20
|
+
def test_should_set_default_thumbnail_class
|
21
|
+
assert_equal Attachment, Attachment.attachment_options[:thumbnail_class]
|
22
|
+
end
|
23
|
+
|
24
|
+
def test_should_normalize_content_types_to_array
|
25
|
+
assert_equal %w(pdf), PdfAttachment.attachment_options[:content_type]
|
26
|
+
assert_equal %w(pdf doc txt), DocAttachment.attachment_options[:content_type]
|
27
|
+
assert_equal ['image/jpeg', 'image/pjpeg', 'image/gif', 'image/png', 'image/x-png', 'image/jpg'], ImageAttachment.attachment_options[:content_type]
|
28
|
+
assert_equal ['pdf', 'image/jpeg', 'image/pjpeg', 'image/gif', 'image/png', 'image/x-png', 'image/jpg'], ImageOrPdfAttachment.attachment_options[:content_type]
|
29
|
+
end
|
30
|
+
|
31
|
+
def test_should_sanitize_content_type
|
32
|
+
@attachment = Attachment.new :content_type => ' foo '
|
33
|
+
assert_equal 'foo', @attachment.content_type
|
34
|
+
end
|
35
|
+
|
36
|
+
def test_should_sanitize_filenames
|
37
|
+
@attachment = Attachment.new :filename => 'blah/foo.bar'
|
38
|
+
assert_equal 'foo.bar', @attachment.filename
|
39
|
+
|
40
|
+
@attachment.filename = 'blah\\foo.bar'
|
41
|
+
assert_equal 'foo.bar', @attachment.filename
|
42
|
+
|
43
|
+
@attachment.filename = 'f o!O-.bar'
|
44
|
+
assert_equal 'f_o_O-.bar', @attachment.filename
|
45
|
+
end
|
46
|
+
|
47
|
+
def test_should_convert_thumbnail_name
|
48
|
+
@attachment = FileAttachment.new :filename => 'foo.bar'
|
49
|
+
assert_equal 'foo.bar', @attachment.thumbnail_name_for(nil)
|
50
|
+
assert_equal 'foo.bar', @attachment.thumbnail_name_for('')
|
51
|
+
assert_equal 'foo_blah.bar', @attachment.thumbnail_name_for(:blah)
|
52
|
+
assert_equal 'foo_blah.blah.bar', @attachment.thumbnail_name_for('blah.blah')
|
53
|
+
|
54
|
+
@attachment.filename = 'foo.bar.baz'
|
55
|
+
assert_equal 'foo.bar_blah.baz', @attachment.thumbnail_name_for(:blah)
|
56
|
+
end
|
57
|
+
|
58
|
+
def test_should_require_valid_thumbnails_option
|
59
|
+
klass = Class.new(ActiveRecord::Base)
|
60
|
+
assert_raise ArgumentError do
|
61
|
+
klass.has_attachment :thumbnails => []
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
sqlite:
|
2
|
+
:adapter: sqlite
|
3
|
+
:dbfile: attachment_fu_plugin.sqlite.db
|
4
|
+
sqlite3:
|
5
|
+
:adapter: sqlite3
|
6
|
+
:dbfile: attachment_fu_plugin.sqlite3.db
|
7
|
+
postgresql:
|
8
|
+
:adapter: postgresql
|
9
|
+
:username: postgres
|
10
|
+
:password: postgres
|
11
|
+
:database: attachment_fu_plugin_test
|
12
|
+
:min_messages: ERROR
|
13
|
+
mysql:
|
14
|
+
:adapter: mysql
|
15
|
+
:host: localhost
|
16
|
+
:username: rails
|
17
|
+
:password:
|
18
|
+
:database: attachment_fu_plugin_test
|
@@ -0,0 +1,57 @@
|
|
1
|
+
require File.expand_path(File.join(File.dirname(__FILE__), 'test_helper'))
|
2
|
+
|
3
|
+
class OrphanAttachmentTest < Test::Unit::TestCase
|
4
|
+
include BaseAttachmentTests
|
5
|
+
attachment_model OrphanAttachment
|
6
|
+
|
7
|
+
def test_should_create_image_from_uploaded_file
|
8
|
+
assert_created do
|
9
|
+
attachment = upload_file :filename => '/files/rails.png'
|
10
|
+
assert_valid attachment
|
11
|
+
assert !attachment.db_file.new_record? if attachment.respond_to?(:db_file)
|
12
|
+
assert attachment.image?
|
13
|
+
assert !attachment.size.zero?
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
def test_should_create_file_from_uploaded_file
|
18
|
+
assert_created do
|
19
|
+
attachment = upload_file :filename => '/files/foo.txt'
|
20
|
+
assert_valid attachment
|
21
|
+
assert !attachment.db_file.new_record? if attachment.respond_to?(:db_file)
|
22
|
+
assert attachment.image?
|
23
|
+
assert !attachment.size.zero?
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
def test_should_create_image_from_uploaded_file_with_custom_content_type
|
28
|
+
assert_created do
|
29
|
+
attachment = upload_file :content_type => 'foo/bar', :filename => '/files/rails.png'
|
30
|
+
assert_valid attachment
|
31
|
+
assert !attachment.image?
|
32
|
+
assert !attachment.db_file.new_record? if attachment.respond_to?(:db_file)
|
33
|
+
assert !attachment.size.zero?
|
34
|
+
#assert_equal 1784, attachment.size
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
def test_should_create_thumbnail
|
39
|
+
attachment = upload_file :filename => '/files/rails.png'
|
40
|
+
|
41
|
+
assert_raise Technoweenie::AttachmentFu::ThumbnailError do
|
42
|
+
attachment.create_or_update_thumbnail(attachment.create_temp_file, 'thumb', 50, 50)
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
def test_should_create_thumbnail_with_geometry_string
|
47
|
+
attachment = upload_file :filename => '/files/rails.png'
|
48
|
+
|
49
|
+
assert_raise Technoweenie::AttachmentFu::ThumbnailError do
|
50
|
+
attachment.create_or_update_thumbnail(attachment.create_temp_file, 'thumb', 'x50')
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
class MinimalAttachmentTest < OrphanAttachmentTest
|
56
|
+
attachment_model MinimalAttachment
|
57
|
+
end
|
@@ -0,0 +1,127 @@
|
|
1
|
+
class Attachment < ActiveRecord::Base
|
2
|
+
@@saves = 0
|
3
|
+
cattr_accessor :saves
|
4
|
+
has_attachment :processor => :rmagick
|
5
|
+
validates_as_attachment
|
6
|
+
after_attachment_saved do |record|
|
7
|
+
self.saves += 1
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
class SmallAttachment < Attachment
|
12
|
+
has_attachment :max_size => 1.kilobyte
|
13
|
+
end
|
14
|
+
|
15
|
+
class BigAttachment < Attachment
|
16
|
+
has_attachment :size => 1.megabyte..2.megabytes
|
17
|
+
end
|
18
|
+
|
19
|
+
class PdfAttachment < Attachment
|
20
|
+
has_attachment :content_type => 'pdf'
|
21
|
+
end
|
22
|
+
|
23
|
+
class DocAttachment < Attachment
|
24
|
+
has_attachment :content_type => %w(pdf doc txt)
|
25
|
+
end
|
26
|
+
|
27
|
+
class ImageAttachment < Attachment
|
28
|
+
has_attachment :content_type => :image, :resize_to => [50,50]
|
29
|
+
end
|
30
|
+
|
31
|
+
class ImageOrPdfAttachment < Attachment
|
32
|
+
has_attachment :content_type => ['pdf', :image], :resize_to => 'x50'
|
33
|
+
end
|
34
|
+
|
35
|
+
class ImageWithThumbsAttachment < Attachment
|
36
|
+
has_attachment :thumbnails => { :thumb => [50, 50], :geometry => 'x50' }, :resize_to => [55,55]
|
37
|
+
after_resize do |record, img|
|
38
|
+
record.aspect_ratio = img.columns.to_f / img.rows.to_f
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
class FileAttachment < ActiveRecord::Base
|
43
|
+
has_attachment :path_prefix => 'vendor/plugins/attachment_fu/test/files', :processor => :rmagick
|
44
|
+
validates_as_attachment
|
45
|
+
end
|
46
|
+
|
47
|
+
class ImageFileAttachment < FileAttachment
|
48
|
+
has_attachment :path_prefix => 'vendor/plugins/attachment_fu/test/files',
|
49
|
+
:content_type => :image, :resize_to => [50,50]
|
50
|
+
end
|
51
|
+
|
52
|
+
class ImageWithThumbsFileAttachment < FileAttachment
|
53
|
+
has_attachment :path_prefix => 'vendor/plugins/attachment_fu/test/files',
|
54
|
+
:thumbnails => { :thumb => [50, 50], :geometry => 'x50' }, :resize_to => [55,55]
|
55
|
+
after_resize do |record, img|
|
56
|
+
record.aspect_ratio = img.columns.to_f / img.rows.to_f
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
class ImageWithThumbsClassFileAttachment < FileAttachment
|
61
|
+
# use file_system_path to test backwards compatibility
|
62
|
+
has_attachment :file_system_path => 'vendor/plugins/attachment_fu/test/files',
|
63
|
+
:thumbnails => { :thumb => [50, 50] }, :resize_to => [55,55],
|
64
|
+
:thumbnail_class => 'ImageThumbnail'
|
65
|
+
end
|
66
|
+
|
67
|
+
class ImageThumbnail < FileAttachment
|
68
|
+
has_attachment :path_prefix => 'vendor/plugins/attachment_fu/test/files/thumbnails'
|
69
|
+
end
|
70
|
+
|
71
|
+
# no parent
|
72
|
+
class OrphanAttachment < ActiveRecord::Base
|
73
|
+
has_attachment :processor => :rmagick
|
74
|
+
validates_as_attachment
|
75
|
+
end
|
76
|
+
|
77
|
+
# no filename, no size, no content_type
|
78
|
+
class MinimalAttachment < ActiveRecord::Base
|
79
|
+
has_attachment :path_prefix => 'vendor/plugins/attachment_fu/test/files', :processor => :rmagick
|
80
|
+
validates_as_attachment
|
81
|
+
|
82
|
+
def filename
|
83
|
+
"#{id}.file"
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
begin
|
88
|
+
class ImageScienceAttachment < ActiveRecord::Base
|
89
|
+
has_attachment :path_prefix => 'vendor/plugins/attachment_fu/test/files',
|
90
|
+
:processor => :image_science, :thumbnails => { :thumb => [50, 51], :geometry => '31>' }, :resize_to => 55
|
91
|
+
end
|
92
|
+
rescue MissingSourceFile
|
93
|
+
puts $!.message
|
94
|
+
puts "no ImageScience"
|
95
|
+
end
|
96
|
+
|
97
|
+
begin
|
98
|
+
class MiniMagickAttachment < ActiveRecord::Base
|
99
|
+
has_attachment :path_prefix => 'vendor/plugins/attachment_fu/test/files',
|
100
|
+
:processor => :mini_magick, :thumbnails => { :thumb => [50, 51], :geometry => '31>' }, :resize_to => 55
|
101
|
+
end
|
102
|
+
rescue MissingSourceFile
|
103
|
+
puts $!.message
|
104
|
+
puts "no Mini Magick"
|
105
|
+
end
|
106
|
+
|
107
|
+
begin
|
108
|
+
class MiniMagickAttachment < ActiveRecord::Base
|
109
|
+
has_attachment :path_prefix => 'vendor/plugins/attachment_fu/test/files',
|
110
|
+
:processor => :mini_magick, :thumbnails => { :thumb => [50, 51], :geometry => '31>' }, :resize_to => 55
|
111
|
+
end
|
112
|
+
rescue MissingSourceFile
|
113
|
+
end
|
114
|
+
|
115
|
+
begin
|
116
|
+
class S3Attachment < ActiveRecord::Base
|
117
|
+
has_attachment :storage => :s3, :processor => :rmagick, :s3_config_path => File.join(File.dirname(__FILE__), '../amazon_s3.yml')
|
118
|
+
validates_as_attachment
|
119
|
+
end
|
120
|
+
|
121
|
+
class S3WithPathPrefixAttachment < S3Attachment
|
122
|
+
has_attachment :storage => :s3, :path_prefix => 'some/custom/path/prefix', :processor => :rmagick
|
123
|
+
validates_as_attachment
|
124
|
+
end
|
125
|
+
rescue Technoweenie::AttachmentFu::Backends::S3Backend::ConfigFileNotFoundError
|
126
|
+
puts "S3 error: #{$!}"
|
127
|
+
end
|
Binary file
|
@@ -0,0 +1 @@
|
|
1
|
+
foo
|
Binary file
|
@@ -0,0 +1,101 @@
|
|
1
|
+
require 'test/unit'
|
2
|
+
require File.expand_path(File.join(File.dirname(__FILE__), '../lib/geometry')) unless Object.const_defined?(:Geometry)
|
3
|
+
|
4
|
+
class GeometryTest < Test::Unit::TestCase
|
5
|
+
def test_should_resize
|
6
|
+
assert_geometry 50, 64,
|
7
|
+
"50x50" => [39, 50],
|
8
|
+
"60x60" => [47, 60],
|
9
|
+
"100x100" => [78, 100]
|
10
|
+
end
|
11
|
+
|
12
|
+
def test_should_resize_no_width
|
13
|
+
assert_geometry 50, 64,
|
14
|
+
"x50" => [39, 50],
|
15
|
+
"x60" => [47, 60],
|
16
|
+
"x100" => [78, 100]
|
17
|
+
end
|
18
|
+
|
19
|
+
def test_should_resize_no_height
|
20
|
+
assert_geometry 50, 64,
|
21
|
+
"50" => [50, 64],
|
22
|
+
"60" => [60, 77],
|
23
|
+
"100" => [100, 128]
|
24
|
+
end
|
25
|
+
|
26
|
+
def test_should_resize_with_percent
|
27
|
+
assert_geometry 50, 64,
|
28
|
+
"50x50%" => [25, 32],
|
29
|
+
"60x60%" => [30, 38],
|
30
|
+
"120x112%" => [60, 72]
|
31
|
+
end
|
32
|
+
|
33
|
+
def test_should_resize_with_percent_and_no_width
|
34
|
+
assert_geometry 50, 64,
|
35
|
+
"x50%" => [50, 32],
|
36
|
+
"x60%" => [50, 38],
|
37
|
+
"x112%" => [50, 72]
|
38
|
+
end
|
39
|
+
|
40
|
+
def test_should_resize_with_percent_and_no_height
|
41
|
+
assert_geometry 50, 64,
|
42
|
+
"50%" => [25, 32],
|
43
|
+
"60%" => [30, 38],
|
44
|
+
"120%" => [60, 77]
|
45
|
+
end
|
46
|
+
|
47
|
+
def test_should_resize_with_less
|
48
|
+
assert_geometry 50, 64,
|
49
|
+
"50x50<" => [50, 64],
|
50
|
+
"60x60<" => [50, 64],
|
51
|
+
"100x100<" => [78, 100],
|
52
|
+
"100x112<" => [88, 112],
|
53
|
+
"40x70<" => [50, 64]
|
54
|
+
end
|
55
|
+
|
56
|
+
def test_should_resize_with_less_and_no_width
|
57
|
+
assert_geometry 50, 64,
|
58
|
+
"x50<" => [50, 64],
|
59
|
+
"x60<" => [50, 64],
|
60
|
+
"x100<" => [78, 100]
|
61
|
+
end
|
62
|
+
|
63
|
+
def test_should_resize_with_less_and_no_height
|
64
|
+
assert_geometry 50, 64,
|
65
|
+
"50<" => [50, 64],
|
66
|
+
"60<" => [60, 77],
|
67
|
+
"100<" => [100, 128]
|
68
|
+
end
|
69
|
+
|
70
|
+
def test_should_resize_with_greater
|
71
|
+
assert_geometry 50, 64,
|
72
|
+
"50x50>" => [39, 50],
|
73
|
+
"60x60>" => [47, 60],
|
74
|
+
"100x100>" => [50, 64],
|
75
|
+
"100x112>" => [50, 64],
|
76
|
+
"40x70>" => [40, 51]
|
77
|
+
end
|
78
|
+
|
79
|
+
def test_should_resize_with_greater_and_no_width
|
80
|
+
assert_geometry 50, 64,
|
81
|
+
"x40>" => [31, 40],
|
82
|
+
"x60>" => [47, 60],
|
83
|
+
"x100>" => [50, 64]
|
84
|
+
end
|
85
|
+
|
86
|
+
def test_should_resize_with_greater_and_no_height
|
87
|
+
assert_geometry 50, 64,
|
88
|
+
"40>" => [40, 51],
|
89
|
+
"60>" => [50, 64],
|
90
|
+
"100>" => [50, 64]
|
91
|
+
end
|
92
|
+
|
93
|
+
protected
|
94
|
+
def assert_geometry(width, height, values)
|
95
|
+
values.each do |geo, result|
|
96
|
+
# run twice to verify the Geometry string isn't modified after a run
|
97
|
+
geo = Geometry.from_s(geo)
|
98
|
+
2.times { assert_equal result, [width, height] / geo }
|
99
|
+
end
|
100
|
+
end
|
101
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
require File.expand_path(File.join(File.dirname(__FILE__), '..', 'test_helper'))
|
2
|
+
|
3
|
+
class ImageScienceTest < Test::Unit::TestCase
|
4
|
+
attachment_model ImageScienceAttachment
|
5
|
+
|
6
|
+
if Object.const_defined?(:ImageScience)
|
7
|
+
def test_should_resize_image
|
8
|
+
attachment = upload_file :filename => '/files/rails.png'
|
9
|
+
assert_valid attachment
|
10
|
+
assert attachment.image?
|
11
|
+
# test image science thumbnail
|
12
|
+
assert_equal 42, attachment.width
|
13
|
+
assert_equal 55, attachment.height
|
14
|
+
|
15
|
+
thumb = attachment.thumbnails.detect { |t| t.filename =~ /_thumb/ }
|
16
|
+
geo = attachment.thumbnails.detect { |t| t.filename =~ /_geometry/ }
|
17
|
+
|
18
|
+
# test exact resize dimensions
|
19
|
+
assert_equal 50, thumb.width
|
20
|
+
assert_equal 51, thumb.height
|
21
|
+
|
22
|
+
# test geometry string
|
23
|
+
assert_equal 31, geo.width
|
24
|
+
assert_equal 41, geo.height
|
25
|
+
end
|
26
|
+
else
|
27
|
+
def test_flunk
|
28
|
+
puts "ImageScience not loaded, tests not running"
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
require File.expand_path(File.join(File.dirname(__FILE__), '..', 'test_helper'))
|
2
|
+
|
3
|
+
class MiniMagickTest < Test::Unit::TestCase
|
4
|
+
attachment_model MiniMagickAttachment
|
5
|
+
|
6
|
+
if Object.const_defined?(:MiniMagick)
|
7
|
+
def test_should_resize_image
|
8
|
+
attachment = upload_file :filename => '/files/rails.png'
|
9
|
+
assert_valid attachment
|
10
|
+
assert attachment.image?
|
11
|
+
# test MiniMagick thumbnail
|
12
|
+
assert_equal 43, attachment.width
|
13
|
+
assert_equal 55, attachment.height
|
14
|
+
|
15
|
+
thumb = attachment.thumbnails.detect { |t| t.filename =~ /_thumb/ }
|
16
|
+
geo = attachment.thumbnails.detect { |t| t.filename =~ /_geometry/ }
|
17
|
+
|
18
|
+
# test exact resize dimensions
|
19
|
+
assert_equal 50, thumb.width
|
20
|
+
assert_equal 51, thumb.height
|
21
|
+
|
22
|
+
# test geometry string
|
23
|
+
assert_equal 31, geo.width
|
24
|
+
assert_equal 40, geo.height
|
25
|
+
end
|
26
|
+
else
|
27
|
+
def test_flunk
|
28
|
+
puts "MiniMagick not loaded, tests not running"
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,241 @@
|
|
1
|
+
require File.expand_path(File.join(File.dirname(__FILE__), '..', 'test_helper'))
|
2
|
+
|
3
|
+
class RmagickTest < Test::Unit::TestCase
|
4
|
+
attachment_model Attachment
|
5
|
+
|
6
|
+
if Object.const_defined?(:Magick)
|
7
|
+
def test_should_create_image_from_uploaded_file
|
8
|
+
assert_created do
|
9
|
+
attachment = upload_file :filename => '/files/rails.png'
|
10
|
+
assert_valid attachment
|
11
|
+
assert !attachment.db_file.new_record? if attachment.respond_to?(:db_file)
|
12
|
+
assert attachment.image?
|
13
|
+
assert !attachment.size.zero?
|
14
|
+
#assert_equal 1784, attachment.size
|
15
|
+
assert_equal 50, attachment.width
|
16
|
+
assert_equal 64, attachment.height
|
17
|
+
assert_equal '50x64', attachment.image_size
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
def test_should_create_image_from_uploaded_file_with_custom_content_type
|
22
|
+
assert_created do
|
23
|
+
attachment = upload_file :content_type => 'foo/bar', :filename => '/files/rails.png'
|
24
|
+
assert_valid attachment
|
25
|
+
assert !attachment.image?
|
26
|
+
assert !attachment.db_file.new_record? if attachment.respond_to?(:db_file)
|
27
|
+
assert !attachment.size.zero?
|
28
|
+
#assert_equal 1784, attachment.size
|
29
|
+
assert_nil attachment.width
|
30
|
+
assert_nil attachment.height
|
31
|
+
assert_equal [], attachment.thumbnails
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
def test_should_create_thumbnail
|
36
|
+
attachment = upload_file :filename => '/files/rails.png'
|
37
|
+
|
38
|
+
assert_created do
|
39
|
+
basename, ext = attachment.filename.split '.'
|
40
|
+
thumbnail = attachment.create_or_update_thumbnail(attachment.create_temp_file, 'thumb', 50, 50)
|
41
|
+
assert_valid thumbnail
|
42
|
+
assert !thumbnail.size.zero?
|
43
|
+
#assert_in_delta 4673, thumbnail.size, 2
|
44
|
+
assert_equal 50, thumbnail.width
|
45
|
+
assert_equal 50, thumbnail.height
|
46
|
+
assert_equal [thumbnail.id], attachment.thumbnails.collect(&:id)
|
47
|
+
assert_equal attachment.id, thumbnail.parent_id if thumbnail.respond_to?(:parent_id)
|
48
|
+
assert_equal "#{basename}_thumb.#{ext}", thumbnail.filename
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
def test_should_create_thumbnail_with_geometry_string
|
53
|
+
attachment = upload_file :filename => '/files/rails.png'
|
54
|
+
|
55
|
+
assert_created do
|
56
|
+
basename, ext = attachment.filename.split '.'
|
57
|
+
thumbnail = attachment.create_or_update_thumbnail(attachment.create_temp_file, 'thumb', 'x50')
|
58
|
+
assert_valid thumbnail
|
59
|
+
assert !thumbnail.size.zero?
|
60
|
+
#assert_equal 3915, thumbnail.size
|
61
|
+
assert_equal 39, thumbnail.width
|
62
|
+
assert_equal 50, thumbnail.height
|
63
|
+
assert_equal [thumbnail], attachment.thumbnails
|
64
|
+
assert_equal attachment.id, thumbnail.parent_id if thumbnail.respond_to?(:parent_id)
|
65
|
+
assert_equal "#{basename}_thumb.#{ext}", thumbnail.filename
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
def test_should_resize_image(klass = ImageAttachment)
|
70
|
+
attachment_model klass
|
71
|
+
assert_equal [50, 50], attachment_model.attachment_options[:resize_to]
|
72
|
+
attachment = upload_file :filename => '/files/rails.png'
|
73
|
+
assert_valid attachment
|
74
|
+
assert !attachment.db_file.new_record? if attachment.respond_to?(:db_file)
|
75
|
+
assert attachment.image?
|
76
|
+
assert !attachment.size.zero?
|
77
|
+
#assert_in_delta 4673, attachment.size, 2
|
78
|
+
assert_equal 50, attachment.width
|
79
|
+
assert_equal 50, attachment.height
|
80
|
+
end
|
81
|
+
|
82
|
+
test_against_subclass :test_should_resize_image, ImageAttachment
|
83
|
+
|
84
|
+
def test_should_resize_image_with_geometry(klass = ImageOrPdfAttachment)
|
85
|
+
attachment_model klass
|
86
|
+
assert_equal 'x50', attachment_model.attachment_options[:resize_to]
|
87
|
+
attachment = upload_file :filename => '/files/rails.png'
|
88
|
+
assert_valid attachment
|
89
|
+
assert !attachment.db_file.new_record? if attachment.respond_to?(:db_file)
|
90
|
+
assert attachment.image?
|
91
|
+
assert !attachment.size.zero?
|
92
|
+
#assert_equal 3915, attachment.size
|
93
|
+
assert_equal 39, attachment.width
|
94
|
+
assert_equal 50, attachment.height
|
95
|
+
end
|
96
|
+
|
97
|
+
test_against_subclass :test_should_resize_image_with_geometry, ImageOrPdfAttachment
|
98
|
+
|
99
|
+
def test_should_give_correct_thumbnail_filenames(klass = ImageWithThumbsFileAttachment)
|
100
|
+
attachment_model klass
|
101
|
+
assert_created 3 do
|
102
|
+
attachment = upload_file :filename => '/files/rails.png'
|
103
|
+
thumb = attachment.thumbnails.detect { |t| t.filename =~ /_thumb/ }
|
104
|
+
geo = attachment.thumbnails.detect { |t| t.filename =~ /_geometry/ }
|
105
|
+
|
106
|
+
[attachment, thumb, geo].each { |record| assert_valid record }
|
107
|
+
|
108
|
+
assert_match /rails\.png$/, attachment.full_filename
|
109
|
+
assert_match /rails_geometry\.png$/, attachment.full_filename(:geometry)
|
110
|
+
assert_match /rails_thumb\.png$/, attachment.full_filename(:thumb)
|
111
|
+
end
|
112
|
+
end
|
113
|
+
|
114
|
+
test_against_subclass :test_should_give_correct_thumbnail_filenames, ImageWithThumbsFileAttachment
|
115
|
+
|
116
|
+
def test_should_automatically_create_thumbnails(klass = ImageWithThumbsAttachment)
|
117
|
+
attachment_model klass
|
118
|
+
assert_created 3 do
|
119
|
+
attachment = upload_file :filename => '/files/rails.png'
|
120
|
+
assert_valid attachment
|
121
|
+
assert !attachment.size.zero?
|
122
|
+
#assert_equal 1784, attachment.size
|
123
|
+
assert_equal 55, attachment.width
|
124
|
+
assert_equal 55, attachment.height
|
125
|
+
assert_equal 2, attachment.thumbnails.length
|
126
|
+
assert_equal 1.0, attachment.aspect_ratio
|
127
|
+
|
128
|
+
thumb = attachment.thumbnails.detect { |t| t.filename =~ /_thumb/ }
|
129
|
+
assert !thumb.new_record?, thumb.errors.full_messages.join("\n")
|
130
|
+
assert !thumb.size.zero?
|
131
|
+
#assert_in_delta 4673, thumb.size, 2
|
132
|
+
assert_equal 50, thumb.width
|
133
|
+
assert_equal 50, thumb.height
|
134
|
+
assert_equal 1.0, thumb.aspect_ratio
|
135
|
+
|
136
|
+
geo = attachment.thumbnails.detect { |t| t.filename =~ /_geometry/ }
|
137
|
+
assert !geo.new_record?, geo.errors.full_messages.join("\n")
|
138
|
+
assert !geo.size.zero?
|
139
|
+
#assert_equal 3915, geo.size
|
140
|
+
assert_equal 50, geo.width
|
141
|
+
assert_equal 50, geo.height
|
142
|
+
assert_equal 1.0, geo.aspect_ratio
|
143
|
+
end
|
144
|
+
end
|
145
|
+
|
146
|
+
test_against_subclass :test_should_automatically_create_thumbnails, ImageWithThumbsAttachment
|
147
|
+
|
148
|
+
# same as above method, but test it on a file model
|
149
|
+
test_against_class :test_should_automatically_create_thumbnails, ImageWithThumbsFileAttachment
|
150
|
+
test_against_subclass :test_should_automatically_create_thumbnails_on_class, ImageWithThumbsFileAttachment
|
151
|
+
|
152
|
+
def test_should_use_thumbnail_subclass(klass = ImageWithThumbsClassFileAttachment)
|
153
|
+
attachment_model klass
|
154
|
+
attachment = nil
|
155
|
+
assert_difference ImageThumbnail, :count do
|
156
|
+
attachment = upload_file :filename => '/files/rails.png'
|
157
|
+
assert_valid attachment
|
158
|
+
end
|
159
|
+
assert_kind_of ImageThumbnail, attachment.thumbnails.first
|
160
|
+
assert_equal attachment.id, attachment.thumbnails.first.parent.id
|
161
|
+
assert_kind_of FileAttachment, attachment.thumbnails.first.parent
|
162
|
+
assert_equal 'rails_thumb.png', attachment.thumbnails.first.filename
|
163
|
+
assert_equal attachment.thumbnails.first.full_filename, attachment.full_filename(attachment.thumbnails.first.thumbnail),
|
164
|
+
"#full_filename does not use thumbnail class' path."
|
165
|
+
assert_equal attachment.destroy attachment
|
166
|
+
end
|
167
|
+
|
168
|
+
test_against_subclass :test_should_use_thumbnail_subclass, ImageWithThumbsClassFileAttachment
|
169
|
+
|
170
|
+
def test_should_remove_old_thumbnail_files_when_updating(klass = ImageWithThumbsFileAttachment)
|
171
|
+
attachment_model klass
|
172
|
+
attachment = nil
|
173
|
+
assert_created 3 do
|
174
|
+
attachment = upload_file :filename => '/files/rails.png'
|
175
|
+
end
|
176
|
+
|
177
|
+
old_filenames = [attachment.full_filename] + attachment.thumbnails.collect(&:full_filename)
|
178
|
+
|
179
|
+
assert_not_created do
|
180
|
+
use_temp_file "files/rails.png" do |file|
|
181
|
+
attachment.filename = 'rails2.png'
|
182
|
+
attachment.temp_path = File.join(fixture_path, file)
|
183
|
+
attachment.save
|
184
|
+
new_filenames = [attachment.reload.full_filename] + attachment.thumbnails.collect { |t| t.reload.full_filename }
|
185
|
+
new_filenames.each { |f| assert File.exists?(f), "#{f} does not exist" }
|
186
|
+
old_filenames.each { |f| assert !File.exists?(f), "#{f} still exists" }
|
187
|
+
end
|
188
|
+
end
|
189
|
+
end
|
190
|
+
|
191
|
+
test_against_subclass :test_should_remove_old_thumbnail_files_when_updating, ImageWithThumbsFileAttachment
|
192
|
+
|
193
|
+
def test_should_delete_file_when_in_file_system_when_attachment_record_destroyed(klass = ImageWithThumbsFileAttachment)
|
194
|
+
attachment_model klass
|
195
|
+
attachment = upload_file :filename => '/files/rails.png'
|
196
|
+
filenames = [attachment.full_filename] + attachment.thumbnails.collect(&:full_filename)
|
197
|
+
filenames.each { |f| assert File.exists?(f), "#{f} never existed to delete on destroy" }
|
198
|
+
attachment.destroy
|
199
|
+
filenames.each { |f| assert !File.exists?(f), "#{f} still exists" }
|
200
|
+
end
|
201
|
+
|
202
|
+
test_against_subclass :test_should_delete_file_when_in_file_system_when_attachment_record_destroyed, ImageWithThumbsFileAttachment
|
203
|
+
|
204
|
+
def test_should_overwrite_old_thumbnail_records_when_updating(klass = ImageWithThumbsAttachment)
|
205
|
+
attachment_model klass
|
206
|
+
attachment = nil
|
207
|
+
assert_created 3 do
|
208
|
+
attachment = upload_file :filename => '/files/rails.png'
|
209
|
+
end
|
210
|
+
assert_not_created do # no new db_file records
|
211
|
+
use_temp_file "files/rails.png" do |file|
|
212
|
+
attachment.filename = 'rails2.png'
|
213
|
+
attachment.temp_path = File.join(fixture_path, file)
|
214
|
+
attachment.save!
|
215
|
+
end
|
216
|
+
end
|
217
|
+
end
|
218
|
+
|
219
|
+
test_against_subclass :test_should_overwrite_old_thumbnail_records_when_updating, ImageWithThumbsAttachment
|
220
|
+
|
221
|
+
def test_should_overwrite_old_thumbnail_records_when_renaming(klass = ImageWithThumbsAttachment)
|
222
|
+
attachment_model klass
|
223
|
+
attachment = nil
|
224
|
+
assert_created 3 do
|
225
|
+
attachment = upload_file :class => klass, :filename => '/files/rails.png'
|
226
|
+
end
|
227
|
+
assert_not_created do # no new db_file records
|
228
|
+
attachment.filename = 'rails2.png'
|
229
|
+
attachment.save
|
230
|
+
assert !attachment.reload.size.zero?
|
231
|
+
assert_equal 'rails2.png', attachment.filename
|
232
|
+
end
|
233
|
+
end
|
234
|
+
|
235
|
+
test_against_subclass :test_should_overwrite_old_thumbnail_records_when_renaming, ImageWithThumbsAttachment
|
236
|
+
else
|
237
|
+
def test_flunk
|
238
|
+
puts "RMagick not installed, no tests running"
|
239
|
+
end
|
240
|
+
end
|
241
|
+
end
|