spec/lib/presenter_spec.rb in table_cloth-0.2.2 vs spec/lib/presenter_spec.rb in table_cloth-0.2.3
- old
+ new
@@ -1,52 +1,63 @@
require 'spec_helper'
describe TableCloth::Presenter do
+ subject { TableCloth::Presenter.new(objects, dummy_table, view_context) }
let(:dummy_table) { Class.new(DummyTable) }
- let(:dummy_model) do
- DummyModel.new.tap do |d|
- d.id = 1
- d.email = 'robert@example.com'
- d.name = 'robert'
- end
- end
+ let(:dummy_model) { FactoryGirl.build(:dummy_model) }
- let(:objects) do
- 3.times.map do |n|
- num = n+1
- DummyModel.new.tap do |d|
- d.id = num # Wat
- d.email = "robert#{num}@example.com"
- d.name = "robert#{num}"
- end
- end
- end
+ let(:objects) { 3.times.map { FactoryGirl.build(:dummy_model) } }
let(:view_context) { ActionView::Base.new }
subject { TableCloth::Presenter.new(objects, dummy_table, view_context) }
+
+ context ".column_names" do
+ let(:table_instance) { dummy_table.new(objects, view_context) }
+ before(:each) { table_instance.stub admin?: false, awesome?: true }
+
+ it 'returns all names' do
+ dummy_table.column :name, :email
+ subject.column_names.should =~ ["Id", "Name", "Email"]
+ end
+
+ it 'includes actions when given' do
+ dummy_table.actions { action { } }
+ subject.column_names.should include 'Actions'
+ end
+
+ it 'include actions when only partial are available' do
+ dummy_table.actions do
+ action(if: :admin?) { '/' }
+ action(if: :awesome?) { '/' }
+ end
+ subject.column_names.should include 'Actions'
+ end
+
+ it 'uses a name given to it' do
+ dummy_table.column :email, label: 'Email Address'
+ subject.column_names.should include 'Email Address'
+ end
+ end
+
it 'returns all values for a row' do
- subject.row_values(dummy_model).should == [1, 'robert', 'robert@example.com']
+ subject.row_values(dummy_model).should == [dummy_model.id, dummy_model.name, dummy_model.email]
end
it 'returns an edit link in the actions column' do
dummy_table.actions do
action {|object, view| link_to 'Edit', '/model/1/edit' }
end
- presenter = TableCloth::Presenter.new(objects, dummy_table, view_context)
- actions_value = presenter.row_values(dummy_model).last
+ actions_value = subject.row_values(dummy_model).last
column = Nokogiri::HTML(actions_value)
column.at_xpath('//a')[:href].should == '/model/1/edit'
column.at_xpath('//a').text.should == 'Edit'
end
it 'generates the values for all of the rows' do
- subject.rows.should == [
- [1, 'robert1', 'robert1@example.com'],
- [2, 'robert2', 'robert2@example.com'],
- [3, 'robert3', 'robert3@example.com']
- ]
+ expected = objects.map {|o| [o.id, o.name, o.email] }
+ expect(subject.rows).to eq(expected)
end
context 'tags' do
it '.wrapper_tag includes config for a tag in block form' do
TableCloth::Configuration.table.should_receive(:to_hash).and_return(class: "stuff")
\ No newline at end of file