require 'spec_helper' describe TableCreator::Table do let(:row) { [ 'col1', 2, Money.new(3), Booking.new(42, '22TEST'), { data: '22TEST', link_to: '/bookings/42' } ] } let(:money_class) { Class.new do def initialize(dollars) @dollars = dollars end def format "$#{with_places}" end def to_s with_places end def with_places '%.2f' % @dollars end end } let(:booking_class) { Class.new do attr_reader :id, :reference def initialize(id, reference) @id = id @reference = reference end end } before do stub_const 'Money', money_class stub_const 'Booking', booking_class TableCreator.add_formatter :html, Money, proc { |money| money.format } TableCreator.add_formatter :html, Booking, proc { |booking| { link_to: "/bookings/#{booking.id}", data: booking.reference } } TableCreator.add_formatter :csv, Money, proc { |money| money.to_s } TableCreator.add_formatter :csv, Booking, :reference subject << { body: [row] } end it 'should generate csv' do expect(subject.to_csv).to eq 'col1,2,3.00,22TEST,22TEST' end it 'should generate html' do expect(subject.to_html).to eq( '<table>'\ '<tbody>'\ '<tr>'\ '<td class="text">col1</td>'\ '<td class="number">2</td>'\ '<td class="money">$3.00</td>'\ '<td class="booking"><a href="/bookings/42">22TEST</a></td>'\ '<td class="text"><a href="/bookings/42">22TEST</a></td>'\ '</tr>'\ '</tbody>'\ '</table>' ) end end