require 'test_helper' class ReportTest < ActiveSupport::TestCase should ensure_inclusion_of(:type).in_array(MintReporter.config.reports) should have_attached_file(:csv) context "with a basic report" do setup { @report = BasicReport.create } should "default to the pending state" do assert_equal "pending", @report.state end should "add a task to the default queue after commit" do flexmock(@report).should_receive(:generate_csv).once @report.save @report.run_callbacks(:commit) end should "enqueue CSV generation task" do flexmock(CSVGenerationWorker).should_receive(:perform_async). with(@report.id).once @report.generate_csv end should "generate a csv" do records = [ OpenStruct.new(:one => 'one', :two => 'two'), OpenStruct.new(:one => 'a', :two => 'b') ] flexmock(records).should_receive(:where). with(:created_at => @report.from_date..@report.to_date). and_return(records) flexmock(records).should_receive(:order).once.and_return(records) flexmock(@report).should_receive(:records).once.and_return(records) flexmock(@report).should_receive(:csv=).once @report.generate_csv! end end context "with a blank report" do setup { @report = FactoryGirl.create(:report, :blank) } should "raise an error on asking for csv column names" do e = assert_raises(MintReporter::Undefined) do @report.csv_column_names end assert_equal "Subclasses of Report must implement csv_column_names", e.message end should "raise an error on asking for csv row" do e = assert_raises(MintReporter::Undefined) do @report.csv_row(nil) end assert_equal "Subclasses of Report must implement csv_row", e.message end should "raise an error on asking for records" do e = assert_raises(MintReporter::Undefined) do @report.records end assert_equal "Subclasses of Report must implement records", e.message end end end