citrusbyte-milton 0.1.1 → 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (2) hide show
  1. data/spec/milton/is_resizeable_spec.rb +131 -0
  2. metadata +1 -1
@@ -0,0 +1,131 @@
1
+ require File.dirname(__FILE__) + '/../spec_helper'
2
+
3
+ describe Citrusbyte::Milton::IsResizeable do
4
+ describe "building the filename from options" do
5
+ before :each do
6
+ @image = Image.create :file => upload('milton.jpg')
7
+ end
8
+
9
+ describe "options as hash" do
10
+ it "should coalesce size into filename" do
11
+ File.basename(@image.path(:size => '40x40')).should eql('milton.size=40x40.jpg')
12
+ end
13
+
14
+ it "should raise unless a size is given" do
15
+ lambda {
16
+ File.basename(@image.path(:crop => true))
17
+ }.should raise_error
18
+ end
19
+
20
+ it "should coalesce crop into filename" do
21
+ File.basename(@image.path(:size => '40x40', :crop => true)).should eql('milton.crop=true_size=40x40.jpg')
22
+ end
23
+
24
+ it "should coalesce gravity into filename" do
25
+ File.basename(@image.path(:size => '40x40', :gravity => 'north')).should eql('milton.gravity=north_size=40x40.jpg')
26
+ end
27
+
28
+ it "should coalese all options together" do
29
+ File.basename(@image.path(:size => '40x40', :gravity => 'north', :crop => true)).should eql('milton.crop=true_gravity=north_size=40x40.jpg')
30
+ end
31
+ end
32
+
33
+ describe "options as string" do
34
+ it "should parse size" do
35
+ File.basename(@image.path('size=40x40')).should eql('milton.size=40x40.jpg')
36
+ end
37
+
38
+ it "should parse crop" do
39
+ File.basename(@image.path('size=40x40_crop=true')).should eql('milton.crop=true_size=40x40.jpg')
40
+ end
41
+
42
+ it "should parse gravity" do
43
+ File.basename(@image.path('size=40x40_gravity=north')).should eql('milton.gravity=north_size=40x40.jpg')
44
+ end
45
+
46
+ it "should parse them all together" do
47
+ File.basename(@image.path('size=40x40_crop=true_gravity=north')).should eql('milton.crop=true_gravity=north_size=40x40.jpg')
48
+ end
49
+ end
50
+ end
51
+
52
+ # milton.jpg is 320x300
53
+ describe "resizing" do
54
+ before :each do
55
+ @image = Image.create :file => upload('milton.jpg')
56
+ end
57
+
58
+ describe "checking errors" do
59
+ it "should raise a MissingFileError if source file does not exist" do
60
+ FileUtils.rm(@image.path)
61
+ lambda {
62
+ @image.path(:size => '50x50')
63
+ }.should raise_error(Citrusbyte::Milton::MissingFileError)
64
+ end
65
+ end
66
+
67
+ describe "when cropped" do
68
+ before :each do
69
+ @info = Citrusbyte::Milton::IsResizeable::Image.from_path(@image.reload.path(:size => '50x50', :crop => true))
70
+ end
71
+
72
+ it "should have width of 50px" do
73
+ @info.width.should eql(50)
74
+ end
75
+
76
+ it "should have height of 50px" do
77
+ @info.height.should eql(50)
78
+ end
79
+ end
80
+
81
+ # 300/320 = 0.9375
82
+ # 50*0.9375 = 47
83
+ describe "when not cropped" do
84
+ before :each do
85
+ @info = Citrusbyte::Milton::IsResizeable::Image.from_path(@image.reload.path(:size => '50x50'))
86
+ end
87
+
88
+ it "should have width of 47px" do
89
+ @info.width.should eql(47)
90
+ end
91
+
92
+ it "should have height of 50px" do
93
+ @info.height.should eql(50)
94
+ end
95
+ end
96
+ end
97
+
98
+ describe "smarter thumbnails" do
99
+ before :each do
100
+ @image = Image.create :file => upload('big-milton.jpg')
101
+ end
102
+
103
+ it "should generate 640px wide version when image is wider than 640px wide and generating an image smaller than 640px wide" do
104
+ path = @image.path(:crop => true, :size => '40x40')
105
+ File.exists?(path.gsub(/\.crop=true_size=40x40/, '.size=640x')).should be_true
106
+ end
107
+
108
+ it "should generate images smaller than 640px wide from the existing 640px one" do
109
+ # TODO: how can i test this?
110
+ @image.path(:crop => true, :size => '40x40')
111
+ end
112
+ end
113
+
114
+ describe "fetching thumbnails" do
115
+ before :each do
116
+ @image = Image.create :file => upload('milton.jpg')
117
+ end
118
+
119
+ it "should use the partitioned path when grabbing the original file" do
120
+ @image.path.should =~ /\/\d+\/\d+\/milton.jpg$/
121
+ end
122
+
123
+ it "should use the partitioned path and derivative path when grabbing a thubmnail" do
124
+ @image.path(:size => '10x10', :crop => true).should =~ /\/milton\/milton.crop=true_size=10x10.jpg$/
125
+ end
126
+
127
+ it "should append source filename to thumbnail path" do
128
+ @image.path(:size => '10x10').should =~ /\/milton\/milton.size=10x10.jpg$/
129
+ end
130
+ end
131
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: citrusbyte-milton
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ben Alavi