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