foreman/test/unit/csv_exporter_test.rb @ 9d43fc71
229195a5 | Tomer Brisker | require 'test_helper'
|
|
class CsvExporterTest < ActiveSupport::TestCase
|
|||
test 'return correct amount of lines' do
|
|||
result = CsvExporter.export(Host::Managed, [:id])
|
|||
assert_equal "Id\n", result.next
|
|||
9d43fc71 | Michael Moll | assert_equal result.count, Host::Managed.count + 1
|
|
20d817c8 | Tomer Brisker | assert_difference('CsvExporter.export(Host::Managed, [:id]).count') do
|
|
8c6bc83e | Marek Hulan | FactoryBot.create(:host)
|
|
20d817c8 | Tomer Brisker | end
|
|
229195a5 | Tomer Brisker | end
|
|
816463fe | Tomer Brisker | # Can't do this at the moment, since nil limit doesn't play well with will_paginate
|
|
# test 'ignore pagination' do
|
|||
# FactoryBot.create_list(:domain, 10)
|
|||
# result = CsvExporter.export(Domain.all.paginate(per_page: 5, page:1), [:id])
|
|||
# assert result.count > 5
|
|||
# end
|
|||
test 'ignore limit' do
|
|||
FactoryBot.create_list(:domain, 10)
|
|||
result = CsvExporter.export(Domain.all.limit(5), [:id])
|
|||
assert result.count > 5
|
|||
end
|
|||
229195a5 | Tomer Brisker | test 'handles empty results correctly' do
|
|
result = CsvExporter.export(Host::Managed.where(:name => 'no-such-host'), [:id, :name])
|
|||
assert_equal "Id,Name\n", result.next
|
|||
assert_equal 1, result.count
|
|||
assert_raises StopIteration do
|
|||
result.next
|
|||
end
|
|||
end
|
|||
test 'calls methods on records' do
|
|||
id = Domain.first.id
|
|||
Domain.any_instance.expects(:test_method).once.returns('success!')
|
|||
result = CsvExporter.export(Domain.where(:id => id), [:id, :test_method])
|
|||
assert_equal "Id,Test Method\n", result.next
|
|||
assert_equal "#{id},success!\n", result.next
|
|||
assert_raises StopIteration do
|
|||
result.next
|
|||
end
|
|||
end
|
|||
20d817c8 | Tomer Brisker | ||
test 'calls nested methods on records' do
|
|||
8c6bc83e | Marek Hulan | host = FactoryBot.create(:host)
|
|
20d817c8 | Tomer Brisker | result = CsvExporter.export(Host::Managed, [:name, 'location.name'])
|
|
assert_equal "Name,Location.Name\n", result.next
|
|||
assert_equal "#{host.name},#{host.location.name}\n", result.next
|
|||
assert_raises StopIteration do
|
|||
result.next
|
|||
end
|
|||
end
|
|||
a22bfc2d | Tomer Brisker | ||
test 'accepts custom column headers' do
|
|||
result = CsvExporter.export(Host::Managed, [:id], ['My Lovely Header'])
|
|||
assert_equal "My Lovely Header\n", result.next
|
|||
end
|
|||
test 'ensures correct number of headers' do
|
|||
assert_raises ArgumentError do
|
|||
CsvExporter.export(Host::Managed, [:id, :name], ['Not Enough Headers!'])
|
|||
end
|
|||
end
|
|||
229195a5 | Tomer Brisker | end
|