spec/cases/uploadable_io_spec.rb in koala-1.0.0 vs spec/cases/uploadable_io_spec.rb in koala-1.1.0rc
- old
+ new
@@ -7,10 +7,25 @@
end
end
end
describe "Koala::UploadableIO" do
+ def rails_3_mocks
+ tempfile = stub('Tempfile', :path => "foo")
+ uploaded_file = stub('ActionDispatch::Http::UploadedFile',
+ :content_type => true,
+ :tempfile => tempfile
+ )
+ tempfile.stub!(:respond_to?).with(:path).and_return(true)
+
+ [tempfile, uploaded_file]
+ end
+
+ def sinatra_mocks
+ {:type => "type", :tempfile => "Tempfile"}
+ end
+
describe "the constructor" do
describe "when given a file path" do
before(:each) do
@koala_io_params = [File.open(BEACH_BALL_PATH)]
end
@@ -27,10 +42,16 @@
it "should return an UploadIO with the same content type" do
stub_type = @koala_io_params[1] = stub('Content Type')
Koala::UploadableIO.new(*@koala_io_params).content_type.should == stub_type
end
+
+ it "should detect that NetHTTPService must be used" do
+ @koala_io_params[0] = mock
+ @koala_io_params[0].stub!(:read)
+ Koala::UploadableIO.new(*@koala_io_params).requires_base_http_service.should be_true
+ end
end
describe "and no content type" do
it_should_behave_like "determining a mime type"
end
@@ -61,17 +82,11 @@
end
end
describe "when given a Rails 3 ActionDispatch::Http::UploadedFile" do
before(:each) do
- @tempfile = stub('Tempfile', :path => "foo")
- @uploaded_file = stub('ActionDispatch::Http::UploadedFile',
- :content_type => true,
- :tempfile => @tempfile
- )
-
- @tempfile.stub!(:respond_to?).with(:path).and_return(true)
+ @tempfile, @uploaded_file = rails_3_mocks
end
it "should get the content type via the content_type method" do
expected_content_type = stub('Content Type')
@uploaded_file.should_receive(:content_type).and_return(expected_content_type)
@@ -85,14 +100,11 @@
end
end
describe "when given a Sinatra file parameter hash" do
before(:each) do
- @file_hash = {
- :type => "type",
- :tempfile => "Tempfile"
- }
+ @file_hash = sinatra_mocks
end
it "should get the content type from the :type key" do
expected_content_type = stub('Content Type')
@file_hash[:type] = expected_content_type
@@ -128,14 +140,24 @@
before(:each) do
@upload_io = stub("UploadIO")
UploadIO.stub!(:new).with(anything, anything, anything).and_return(@upload_io)
end
- it "should call the constructor with the content type, file name, and a dummy file name" do
- UploadIO.should_receive(:new).with(BEACH_BALL_PATH, "content/type", anything).and_return(@upload_io)
- Koala::UploadableIO.new(BEACH_BALL_PATH, "content/type").to_upload_io.should == @upload_io
+ context "if no filename was provided" do
+ it "should call the constructor with the content type, file name, and a dummy file name" do
+ UploadIO.should_receive(:new).with(BEACH_BALL_PATH, "content/type", anything).and_return(@upload_io)
+ Koala::UploadableIO.new(BEACH_BALL_PATH, "content/type").to_upload_io.should == @upload_io
+ end
end
+
+ context "if a filename was provided" do
+ it "should call the constructor with the content type, file name, and the filename" do
+ filename = "file"
+ UploadIO.should_receive(:new).with(BEACH_BALL_PATH, "content/type", filename).and_return(@upload_io)
+ Koala::UploadableIO.new(BEACH_BALL_PATH, "content/type", filename).to_upload_io
+ end
+ end
end
describe "getting a file" do
it "should return the File if initialized with a file" do
f = File.new(BEACH_BALL_PATH)
@@ -144,8 +166,28 @@
it "should open up and return a file corresponding to the path if io_or_path is a path" do
result = stub("File")
File.should_receive(:open).with(BEACH_BALL_PATH).and_return(result)
Koala::UploadableIO.new(BEACH_BALL_PATH).to_file.should == result
+ end
+ end
+
+ describe "#binary_content?" do
+ it "returns true for Rails 3 file uploads" do
+ Koala::UploadableIO.binary_content?(rails_3_mocks.last).should be_true
+ end
+
+ it "returns true for Sinatra file uploads" do
+ Koala::UploadableIO.binary_content?(rails_3_mocks.last).should be_true
+ end
+
+ it "returns true for File objects" do
+ Koala::UploadableIO.binary_content?(File.open(BEACH_BALL_PATH)).should be_true
+ end
+
+ it "returns false for everything else" do
+ Koala::UploadableIO.binary_content?(StringIO.new).should be_false
+ Koala::UploadableIO.binary_content?(BEACH_BALL_PATH).should be_false
+ Koala::UploadableIO.binary_content?(nil).should be_false
end
end
end # describe UploadableIO
\ No newline at end of file