1
0
Fork 0
mirror of https://github.com/thoughtbot/factory_bot.git synced 2022-11-09 11:43:51 -05:00
thoughtbot--factory_bot/test/integration_test.rb
2008-06-01 10:46:50 -07:00

143 lines
3 KiB
Ruby

require(File.join(File.dirname(__FILE__), 'test_helper'))
class IntegrationTest < Test::Unit::TestCase
def setup
Factory.define :user do |f|
f.first_name 'Jimi'
f.last_name 'Hendrix'
f.admin false
f.email {|a| "#{a.first_name}.#{a.last_name}@example.com".downcase }
end
Factory.define :post do |f|
f.title 'Test Post'
f.author {|a| a.association(:user) }
end
Factory.define :admin, :class => User do |f|
f.first_name 'Ben'
f.last_name 'Stein'
f.admin true
f.email { Factory.next(:email) }
end
Factory.sequence :email do |n|
"somebody#{n}@example.com"
end
end
def teardown
Factory.send(:class_variable_get, "@@factories").clear
end
context "a generated attributes hash" do
setup do
@attrs = Factory.attributes_for(:user, :first_name => 'Bill')
end
should "assign all attributes" do
assert_equal [:admin, :email, :first_name, :last_name],
@attrs.keys.sort {|a, b| a.to_s <=> b.to_s }
end
should "correctly assign lazy, dependent attributes" do
assert_equal "bill.hendrix@example.com", @attrs[:email]
end
should "override attrbutes" do
assert_equal 'Bill', @attrs[:first_name]
end
should "not assign associations" do
assert_nil Factory.attributes_for(:post)[:author]
end
end
context "a built instance" do
setup do
@instance = Factory.build(:post)
end
should "not be saved" do
assert @instance.new_record?
end
should "assign associations" do
assert_kind_of User, @instance.author
end
should "not save associations" do
assert @instance.author.new_record?
end
end
context "a created instance" do
setup do
@instance = Factory.create(:post)
end
should "be saved" do
assert !@instance.new_record?
end
should "assign associations" do
assert_kind_of User, @instance.author
end
should "save associations" do
assert !@instance.author.new_record?
end
end
context "an instance generated by a factory with a custom class name" do
setup do
@instance = Factory.create(:admin)
end
should "use the correct class name" do
assert_kind_of User, @instance
end
should "use the correct factory definition" do
assert @instance.admin?
end
end
context "an attribute generated by a sequence" do
setup do
@email = Factory.attributes_for(:admin)[:email]
end
should "match the correct format" do
assert_match /^somebody\d+@example\.com$/, @email
end
context "after the attribute has already been generated once" do
setup do
@another_email = Factory.attributes_for(:admin)[:email]
end
should "match the correct format" do
assert_match /^somebody\d+@example\.com$/, @email
end
should "not be the same as the first generated value" do
assert_not_equal @email, @another_email
end
end
end
end