spec/csv_writer_spec.rb in cloudxls-rails-0.4.3 vs spec/csv_writer_spec.rb in cloudxls-rails-0.5.0

- old
+ new

@@ -1,14 +1,60 @@ require 'spec_helper' +describe CloudXLS::Util do + describe "titles_for_serialize_options" do + it "should work with a Post.all" do + expect( CloudXLS::Util.titles_for_serialize_options(Post.new, :only => "title") ).to eq(["title"]) + end + end +end + describe "CloudXLS::CSVWriter" do before do @writer = CloudXLS::CSVWriter end describe "with array" do - # spec'ed in cloudlxs-ruby gem + it "should not titleize" do + expect( @writer.text([['foo','bar'],[1,2]]) ).to eq("foo,bar\n1,2") + end + + it "should escape titles" do + expect( @writer.text([['bar"baz']]) ).to eq("\"bar\"\"baz\"") + end + + it "should escape rows" do + expect( @writer.text([['title'],['bar"baz']]) ).to eq("title\n\"bar\"\"baz\"") + end + + it "should write YYYY-MM-DD for Date" do + expect( @writer.text([[Date.new(2012,12,24)]]) ).to eq("2012-12-24") + end + + it "should write xmlschema for DateTime" do + # TODO: make UTC consistent + expect( DateTime.new(2012,12,24,18,30,5,'+0000').as_csv ).to eq("2012-12-24T18:30:05.000+0000") + expect( [DateTime.new(2012,12,24,18,30,5,'+0000')].as_csv ).to eq(["2012-12-24T18:30:05.000+0000"]) + expect( @writer.text([[DateTime.new(2012,12,24,18,30,5,'+0000')]]) ).to eq("2012-12-24T18:30:05.000+0000") + expect( @writer.text([[DateTime.new(2012,12,24,18,30,5,'+0000').to_time.utc]]) ).to eq("2012-12-24T18:30:05.000+0000") + end + + it "should write nothing for nil" do + expect( @writer.text([[nil,nil]]) ).to eq(",") + end + + it "should write \"\" for empty string" do + expect( @writer.text([["",""]]) ).to eq('"",""') + end + + it "should write integers" do + expect( @writer.text([[-1,0,1,1_000_000]]) ).to eq('-1,0,1,1000000') + end + + it "should write floats" do + expect( @writer.text([[-1.0,0.0,1.0,1_000_000.0,1.234567]]) ).to eq('-1.0,0.0,1.0,1000000.0,1.234567') + end end describe "#text with AR" do before do Post.delete_all @@ -20,31 +66,31 @@ :expired_at => DateTime.new(2013,12,25,12,30,30), :unix_timestamp => DateTime.new(2013,12,25,12,30,30), :published => false) end - it "given no records should just return titles" do + it "given no records returns empty string" do Post.delete_all - expect( @writer.text(Post.all, :columns => [:title, :visits]) ).to eq("Title,Visits") + expect( @writer.text(Post.all, :only => [:title, :visits]) ).to eq("") end it "should work with a Post.all" do - expect( @writer.text(Post.all, :columns => [:title, :visits]) ).to eq("Title,Visits\nhello world,12032") + expect( @writer.text(Post.all, :only => [:title, :visits]) ).to eq("Title,Visits\nhello world,12032") end it "should work with a Post.limit" do - expect( @writer.text(Post.limit(10), :columns => [:title, :visits]) ).to eq("Title,Visits\nhello world,12032") + expect( @writer.text(Post.limit(10), :only => [:title, :visits]) ).to eq("Title,Visits\nhello world,12032") end it "should work with a Post.all.to_a" do - expect( @writer.text(Post.all.to_a, :columns => [:title, :visits]) ).to eq("Title,Visits\nhello world,12032") + expect( @writer.text(Post.all.to_a, :only => [:title, :visits]) ).to eq("Title,Visits\nhello world,12032") end it "should write xmlschema for DateTime" do - expect( @writer.text(Post.all, :columns => [:expired_at]) ).to eq("Expired At\n2013-12-25T12:30:30.000+0000") + expect( @writer.text(Post.all, :only => [:expired_at]) ).to eq("Expired At\n2013-12-25T12:30:30.000+0000") end it "should write YYYY-MM-DD for Date" do - expect( @writer.text(Post.all, :columns => [:published_on]) ).to eq("Published On\n2013-12-24") + expect( @writer.text(Post.all, :only => [:published_on]) ).to eq("Published On\n2013-12-24") end end end \ No newline at end of file