require 'spec_helper'
describe ActiveAdmin::Views::AttributesTable do
include Arbre::HTML
let(:assigns){ {} }
describe "creating with the dsl" do
let(:helpers) { action_view }
let(:post) do
post = Post.new :title => "Hello World", :body => nil
post.stub!(:id){ 1 }
post.stub!(:new_record?){ false }
post
end
# Loop through a few different ways to make the same table
# and ensure that they produce the same results
{
"when attributes are passed in to the builder methods" => proc {
attributes_table_for post, :id, :title, :body
},
"when attributes are built using the block" => proc {
attributes_table_for post do
rows :id, :title, :body
end
},
"when each attribute is passed in by itself" => proc {
attributes_table_for post do
row :id
row :title
row :body
end
},
"when you create each row with a custom block" => proc {
attributes_table_for post do
row("Id") { post.id }
row("Title"){ post.title }
row("Body") { post.body }
end
}
}.each do |context_title, table_decleration|
context context_title do
let(:table) { instance_eval &table_decleration }
it "should render a div wrapper with the class '.attributes_table'" do
table.tag_name.should == 'div'
table.attr(:class).should include('attributes_table')
end
it "should add id and type class" do
table.class_names.should include("post")
table.id.should == "attributes_table_post_1"
end
it "should render 3 rows" do
table.find_by_tag("tr").size.should == 3
end
describe "rendering the rows" do
[
["Id" , "2"],
["Title" , "Hello World"],
["Body" , "Empty"]
].each_with_index do |set, i|
let(:title){ set[0] }
let(:content){ set[1] }
let(:current_row){ table.find_by_tag("tr")[i] }
describe "for #{set[0]}" do
it "should have the title '#{set[0]}'" do
current_row.find_by_tag("th").first.content.should == title
end
it "should have the content '#{set[1]}'" do
current_row.find_by_tag("td").first.content.chomp.strip.should == content
end
end
end
end # describe rendering rows
end
end # describe dsl styles
it "should allow html content inside the attributes table" do
table = attributes_table_for(post) do
row("ID"){ span(post.id, :class => 'id') }
end
table.find_by_tag("td").first.content.chomp.strip.should == "1"
end
it "should check if an association exists when an attribute has id in it" do
post.author = User.new(:username => "john_doe")
table = attributes_table_for post, :author_id
table.find_by_tag("td").first.content.should == "john_doe"
end
end
end