diff --git a/test/integration_test.rb b/test/integration_test.rb new file mode 100644 index 0000000..f6b5d10 --- /dev/null +++ b/test/integration_test.rb @@ -0,0 +1,107 @@ +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 {|a| "#{a.first_name}.#{a.last_name}@example.com".downcase } + 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 + + 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 built 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 + +end diff --git a/test/test_helper.rb b/test/test_helper.rb index eac8e64..a5f51d3 100644 --- a/test/test_helper.rb +++ b/test/test_helper.rb @@ -15,9 +15,10 @@ ActiveRecord::Base.establish_connection( class CreateSchema < ActiveRecord::Migration def self.up create_table :users, :force => true do |t| - t.string :first_name - t.string :last_name - t.string :email + t.string :first_name + t.string :last_name + t.string :email + t.boolean :admin, :default => false end create_table :posts, :force => true do |t|