test/storage_test.rb in thoughtbot-paperclip-2.3.0 vs test/storage_test.rb in thoughtbot-paperclip-2.3.1

- old
+ new

@@ -1,10 +1,18 @@ require 'test/helper' +require 'aws/s3' class StorageTest < Test::Unit::TestCase + def rails_env(env) + silence_warnings do + Object.const_set(:RAILS_ENV, env) + end + end + context "Parsing S3 credentials" do setup do + AWS::S3::Base.stubs(:establish_connection!) rebuild_model :storage => :s3, :bucket => "testing", :s3_credentials => {:not => :important} @dummy = Dummy.new @@ -12,35 +20,36 @@ @current_env = RAILS_ENV end teardown do - Object.const_set("RAILS_ENV", @current_env) + rails_env(@current_env) end should "get the correct credentials when RAILS_ENV is production" do - Object.const_set('RAILS_ENV', "production") + rails_env("production") assert_equal({:key => "12345"}, @avatar.parse_credentials('production' => {:key => '12345'}, :development => {:key => "54321"})) end should "get the correct credentials when RAILS_ENV is development" do - Object.const_set('RAILS_ENV', "development") + rails_env("development") assert_equal({:key => "54321"}, @avatar.parse_credentials('production' => {:key => '12345'}, :development => {:key => "54321"})) end should "return the argument if the key does not exist" do - Object.const_set('RAILS_ENV', "not really an env") + rails_env("not really an env") assert_equal({:test => "12345"}, @avatar.parse_credentials(:test => "12345")) end end context "" do setup do + AWS::S3::Base.stubs(:establish_connection!) rebuild_model :storage => :s3, :s3_credentials => {}, :bucket => "bucket", :path => ":attachment/:basename.:extension", :url => ":s3_path_url" @@ -52,10 +61,11 @@ assert_match %r{^http://s3.amazonaws.com/bucket/avatars/stringio.txt}, @dummy.avatar.url end end context "" do setup do + AWS::S3::Base.stubs(:establish_connection!) rebuild_model :storage => :s3, :s3_credentials => {}, :bucket => "bucket", :path => ":attachment/:basename.:extension", :url => ":s3_domain_url" @@ -67,10 +77,11 @@ assert_match %r{^http://bucket.s3.amazonaws.com/avatars/stringio.txt}, @dummy.avatar.url end end context "" do setup do + AWS::S3::Base.stubs(:establish_connection!) rebuild_model :storage => :s3, :s3_credentials => { :production => { :bucket => "prod_bucket" }, :development => { :bucket => "dev_bucket" } }, @@ -86,28 +97,29 @@ end end context "Parsing S3 credentials with a bucket in them" do setup do + AWS::S3::Base.stubs(:establish_connection!) rebuild_model :storage => :s3, :s3_credentials => { :production => { :bucket => "prod_bucket" }, :development => { :bucket => "dev_bucket" } } @dummy = Dummy.new @old_env = RAILS_ENV end - teardown{ Object.const_set("RAILS_ENV", @old_env) } + teardown{ rails_env(@old_env) } should "get the right bucket in production" do - Object.const_set("RAILS_ENV", "production") + rails_env("production") assert_equal "prod_bucket", @dummy.avatar.bucket_name end should "get the right bucket in development" do - Object.const_set("RAILS_ENV", "development") + rails_env("development") assert_equal "dev_bucket", @dummy.avatar.bucket_name end end context "An attachment with S3 storage" do @@ -144,35 +156,23 @@ assert_match %r{^http://s3\.amazonaws\.com/testing/avatars/original/5k\.png}, @dummy.avatar.url end context "and saved" do setup do - @s3_mock = stub - @bucket_mock = stub - RightAws::S3.expects(:new).with("12345", "54321", {}).returns(@s3_mock) - @s3_mock.expects(:bucket).with("testing", true, "public-read").returns(@bucket_mock) - @key_mock = stub - @bucket_mock.expects(:key).returns(@key_mock) - @key_mock.expects(:data=) - @key_mock.expects(:put).with(nil, 'public-read', 'Content-type' => 'image/png') + AWS::S3::S3Object.stubs(:store).with(@dummy.avatar.path, anything, 'testing', :content_type => 'image/png', :access => :public_read) @dummy.save end should "succeed" do assert true end end context "and remove" do setup do - @s3_mock = stub - @bucket_mock = stub - RightAws::S3.expects(:new).with("12345", "54321", {}).returns(@s3_mock) - @s3_mock.expects(:bucket).with("testing", true, "public-read").returns(@bucket_mock) - @key_mock = stub - @bucket_mock.expects(:key).at_least(2).returns(@key_mock) - @key_mock.expects(:delete) + AWS::S3::S3Object.stubs(:exists?).returns(true) + AWS::S3::S3Object.stubs(:delete) @dummy.destroy_attached_files end should "succeed" do assert true @@ -181,10 +181,11 @@ end end context "An attachment with S3 storage and bucket defined as a Proc" do setup do + AWS::S3::Base.stubs(:establish_connection!) rebuild_model :storage => :s3, :bucket => lambda { |attachment| "bucket_#{attachment.instance.other}" }, :s3_credentials => {:not => :important} end @@ -194,10 +195,11 @@ end end context "An attachment with S3 storage and specific s3 headers set" do setup do + AWS::S3::Base.stubs(:establish_connection!) rebuild_model :storage => :s3, :bucket => "testing", :path => ":attachment/:style/:basename.:extension", :s3_credentials => { 'access_key_id' => "12345", @@ -215,21 +217,17 @@ teardown { @file.close } context "and saved" do setup do - @s3_mock = stub - @bucket_mock = stub - RightAws::S3.expects(:new).with("12345", "54321", {}).returns(@s3_mock) - @s3_mock.expects(:bucket).with("testing", true, "public-read").returns(@bucket_mock) - @key_mock = stub - @bucket_mock.expects(:key).returns(@key_mock) - @key_mock.expects(:data=) - @key_mock.expects(:put).with(nil, - 'public-read', - 'Content-type' => 'image/png', - 'Cache-Control' => 'max-age=31557600') + AWS::S3::Base.stubs(:establish_connection!) + AWS::S3::S3Object.stubs(:store).with(@dummy.avatar.path, + anything, + 'testing', + :content_type => 'image/png', + :access => :public_read, + 'Cache-Control' => 'max-age=31557600') @dummy.save end should "succeed" do assert true @@ -261,11 +259,11 @@ @dummy.avatar = @file end teardown { @file.close } - should "still return a Tempfile when sent #to_io" do - assert_equal Tempfile, @dummy.avatar.to_io.class + should "still return a Tempfile when sent #to_file" do + assert_equal Tempfile, @dummy.avatar.to_file.class end context "and saved" do setup do @dummy.save