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