From 1f86d37bccee5727d717f11c6801cad7c0461e65 Mon Sep 17 00:00:00 2001 From: Jonathan Démoutiez Date: Wed, 24 Dec 2008 14:47:20 +0100 Subject: [PATCH] Loading fixtures for a module's model --- activerecord/lib/active_record/fixtures.rb | 18 ++++++++++++++++++ activerecord/test/cases/fixtures_test.rb | 14 ++++++++++++++ .../test/fixtures/rails_commerce_categories.yml | 2 ++ .../test/fixtures/rails_commerce_products.yml | 4 ++++ .../test/models/rails_commerce/category.rb | 6 ++++++ activerecord/test/models/rails_commerce/product.rb | 6 ++++++ activerecord/test/schema/schema.rb | 10 ++++++++++ 7 files changed, 60 insertions(+), 0 deletions(-) create mode 100644 activerecord/test/fixtures/rails_commerce_categories.yml create mode 100644 activerecord/test/fixtures/rails_commerce_products.yml create mode 100644 activerecord/test/models/rails_commerce/category.rb create mode 100644 activerecord/test/models/rails_commerce/product.rb diff --git a/activerecord/lib/active_record/fixtures.rb b/activerecord/lib/active_record/fixtures.rb index 129306d..6dd88aa 100644 --- a/activerecord/lib/active_record/fixtures.rb +++ b/activerecord/lib/active_record/fixtures.rb @@ -551,6 +551,24 @@ class Fixtures < (RUBY_VERSION < '1.9' ? YAML::Omap : Hash) (ActiveRecord::Base.pluralize_table_names ? @table_name.singularize.camelize : @table_name.camelize) @table_name = "#{ActiveRecord::Base.table_name_prefix}#{@table_name}#{ActiveRecord::Base.table_name_suffix}" @table_name = class_name.table_name if class_name.respond_to?(:table_name) + + unless model_class + class_split = (ActiveRecord::Base.pluralize_table_names ? @table_name.singularize : @table_name).split('_') + last = class_split.pop + while !class_split.empty? + class_name_tmp = class_split.join('_').camelize + '::' + last.camelize + begin + @model_class = class_name_tmp.constantize + @table_name = @model_class.table_name + @class_name = class_name_tmp + break + rescue + end + + last = class_split.pop + '_' + last + end + end + @connection = class_name.connection if class_name.respond_to?(:connection) read_fixture_files end diff --git a/activerecord/test/cases/fixtures_test.rb b/activerecord/test/cases/fixtures_test.rb index ed2915b..812d6ce 100644 --- a/activerecord/test/cases/fixtures_test.rb +++ b/activerecord/test/cases/fixtures_test.rb @@ -16,6 +16,8 @@ require 'models/treasure' require 'models/matey' require 'models/ship' require 'models/book' +require 'models/rails_commerce/category' +require 'models/rails_commerce/product' class FixturesTest < ActiveRecord::TestCase self.use_instantiated_fixtures = true @@ -190,6 +192,18 @@ class FixturesTest < ActiveRecord::TestCase data.freeze assert_equal data, @flowers.data end + + def test_module_model_fixtures + create_fixtures("rails_commerce_products", "rails_commerce_categories") + + my_first_category = RailsCommerce::Category.find(:first) + assert_equal "Product category 1", my_first_category.name + + my_first_product = RailsCommerce::Product.find(:first) + assert_equal "My first product", my_first_product.name + + assert_equal my_first_product.category.name, 'Product category 1' + end end if Account.connection.respond_to?(:reset_pk_sequence!) diff --git a/activerecord/test/fixtures/rails_commerce_categories.yml b/activerecord/test/fixtures/rails_commerce_categories.yml new file mode 100644 index 0000000..cd32ab7 --- /dev/null +++ b/activerecord/test/fixtures/rails_commerce_categories.yml @@ -0,0 +1,2 @@ +category_001: + name: Product category 1 diff --git a/activerecord/test/fixtures/rails_commerce_products.yml b/activerecord/test/fixtures/rails_commerce_products.yml new file mode 100644 index 0000000..75fc490 --- /dev/null +++ b/activerecord/test/fixtures/rails_commerce_products.yml @@ -0,0 +1,4 @@ +product_001: + id: 1 + name: "My first product" + category: category_001 diff --git a/activerecord/test/models/rails_commerce/category.rb b/activerecord/test/models/rails_commerce/category.rb new file mode 100644 index 0000000..7c3c334 --- /dev/null +++ b/activerecord/test/models/rails_commerce/category.rb @@ -0,0 +1,6 @@ +module RailsCommerce + class Category < ActiveRecord::Base + set_table_name 'rails_commerce_categories' + has_many :products + end +end diff --git a/activerecord/test/models/rails_commerce/product.rb b/activerecord/test/models/rails_commerce/product.rb new file mode 100644 index 0000000..02182bf --- /dev/null +++ b/activerecord/test/models/rails_commerce/product.rb @@ -0,0 +1,6 @@ +module RailsCommerce + class Product < ActiveRecord::Base + set_table_name 'rails_commerce_products' + belongs_to :category + end +end diff --git a/activerecord/test/schema/schema.rb b/activerecord/test/schema/schema.rb index fbacc69..c83d8d0 100644 --- a/activerecord/test/schema/schema.rb +++ b/activerecord/test/schema/schema.rb @@ -334,6 +334,16 @@ ActiveRecord::Schema.define do t.string :type end + create_table :rails_commerce_categories, :force => true do |t| + t.integer :id + t.string :name + end + + create_table :rails_commerce_products, :force => true do |t| + t.integer :id, :category_id + t.string :name + end + create_table :readers, :force => true do |t| t.integer :post_id, :null => false t.integer :person_id, :null => false -- 1.5.5.3