1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163
|
# encoding: utf-8
require 'spec_helper'
describe CarrierWave::MiniMagick do
before do
@klass = Class.new do
include CarrierWave::MiniMagick
end
@instance = @klass.new
FileUtils.cp(file_path('landscape.jpg'), file_path('landscape_copy.jpg'))
@instance.stub(:current_path).and_return(file_path('landscape_copy.jpg'))
@instance.stub(:cached?).and_return true
end
after do
FileUtils.rm(file_path('landscape_copy.jpg'))
end
describe "#convert" do
it "should convert from one format to another" do
@instance.convert('png')
img = ::MiniMagick::Image.open(@instance.current_path)
img['format'].should =~ /PNG/
end
end
describe '#resize_to_fill' do
it "should resize the image to exactly the given dimensions and maintain file type" do
@instance.resize_to_fill(200, 200)
@instance.should have_dimensions(200, 200)
::MiniMagick::Image.open(@instance.current_path)['format'].should =~ /JPEG/
end
it "should resize the image to exactly the given dimensions and maintain updated file type" do
@instance.convert('png')
@instance.resize_to_fill(200, 200)
@instance.should have_dimensions(200, 200)
::MiniMagick::Image.open(@instance.current_path)['format'].should =~ /PNG/
end
it "should scale up the image if it smaller than the given dimensions" do
@instance.resize_to_fill(1000, 1000)
@instance.should have_dimensions(1000, 1000)
end
end
describe '#resize_and_pad' do
it "should resize the image to exactly the given dimensions and maintain file type" do
@instance.resize_and_pad(200, 200)
@instance.should have_dimensions(200, 200)
::MiniMagick::Image.open(@instance.current_path)['format'].should =~ /JPEG/
end
it "should resize the image to exactly the given dimensions and maintain updated file type" do
@instance.convert('png')
@instance.resize_and_pad(200, 200)
@instance.should have_dimensions(200, 200)
::MiniMagick::Image.open(@instance.current_path)['format'].should =~ /PNG/
end
it "should scale up the image if it smaller than the given dimensions" do
@instance.resize_and_pad(1000, 1000)
@instance.should have_dimensions(1000, 1000)
end
it "should pad with white" do
@instance.resize_and_pad(200, 200)
color = color_of_pixel(@instance.current_path, 0, 0)
color.should include('#FFFFFF')
color.should_not include('#FFFFFF00')
end
it "should pad with transparent" do
@instance.convert('png')
@instance.resize_and_pad(200, 200, :transparent)
color = color_of_pixel(@instance.current_path, 0, 0)
color.should include('#FFFFFF00')
end
it "should not pad with transparent" do
@instance.resize_and_pad(200, 200, :transparent)
@instance.convert('png')
color = color_of_pixel(@instance.current_path, 0, 0)
color.should include('#FFFFFF')
color.should_not include('#FFFFFF00')
end
end
describe '#resize_to_fit' do
it "should resize the image to fit within the given dimensions and maintain file type" do
@instance.resize_to_fit(200, 200)
@instance.should have_dimensions(200, 150)
::MiniMagick::Image.open(@instance.current_path)['format'].should =~ /JPEG/
end
it "should resize the image to fit within the given dimensions and maintain updated file type" do
@instance.convert('png')
@instance.resize_to_fit(200, 200)
@instance.should have_dimensions(200, 150)
::MiniMagick::Image.open(@instance.current_path)['format'].should =~ /PNG/
end
it "should scale up the image if it smaller than the given dimensions" do
@instance.resize_to_fit(1000, 1000)
@instance.should have_dimensions(1000, 750)
end
end
describe '#resize_to_limit' do
it "should resize the image to fit within the given dimensions and maintain file type" do
@instance.resize_to_limit(200, 200)
@instance.should have_dimensions(200, 150)
::MiniMagick::Image.open(@instance.current_path)['format'].should =~ /JPEG/
end
it "should resize the image to fit within the given dimensions and maintain updated file type" do
@instance.convert('png')
@instance.resize_to_limit(200, 200)
@instance.should have_dimensions(200, 150)
::MiniMagick::Image.open(@instance.current_path)['format'].should =~ /PNG/
end
it "should not scale up the image if it smaller than the given dimensions" do
@instance.resize_to_limit(1000, 1000)
@instance.should have_dimensions(640, 480)
end
end
describe "test errors" do
context "invalid image file" do
before do
File.open(@instance.current_path, 'w') do |f|
f.puts "bogus"
end
end
it "should fail to process a non image file" do
lambda {@instance.resize_to_limit(200, 200)}.should raise_exception(CarrierWave::ProcessingError, /^Failed to manipulate with MiniMagick, maybe it is not an image\? Original Error:/)
end
it "should use I18n" do
change_locale_and_store_translations(:nl, :errors => {
:messages => {
:mini_magick_processing_error => "Kon bestand niet met MiniMagick bewerken, misschien is het geen beeld bestand? MiniMagick foutmelding: %{e}"
}
}) do
lambda {@instance.resize_to_limit(200, 200)}.should raise_exception(CarrierWave::ProcessingError, /^Kon bestand niet met MiniMagick bewerken, misschien is het geen beeld bestand\? MiniMagick foutmelding:/)
end
end
it "should not suppress errors when translation is unavailable" do
change_locale_and_store_translations(:foo, {}) do
lambda do
@instance.resize_to_limit(200, 200)
end.should raise_exception( CarrierWave::ProcessingError, /Not a JPEG/ )
end
end
end
end
end
|