Project

General

Profile

Download (2.13 KB) Statistics
| Branch: | Tag: | Revision:
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
assert_equal result.count, Host::Managed.count + 1
assert_difference('CsvExporter.export(Host::Managed, [:id]).count') do
FactoryBot.create(:host)
end
end

# 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

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

test 'calls nested methods on records' do
host = FactoryBot.create(:host)
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

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
end
(15-15/67)