Skip to content

Commit

Permalink
Merge pull request #20 from drecom/feature/fix-fixtures-extensions
Browse files Browse the repository at this point in the history
Fix Fixtures patch and add specs
  • Loading branch information
Gussan committed Jan 25, 2015
2 parents 2c7599c + e706ddd commit 09a28cf
Show file tree
Hide file tree
Showing 4 changed files with 93 additions and 6 deletions.
27 changes: 21 additions & 6 deletions lib/active_record/turntable/active_record_ext/fixtures.rb
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,18 @@
# force TestFixtures to begin transaction with all shards.
#
require 'active_record/fixtures'

module ActiveRecord
class FixtureSet
extend ActiveRecord::Turntable::Util

def self.create_fixtures(fixtures_directory, fixture_set_names, class_names = {}, config = ActiveRecord::Base)
fixture_set_names = Array(fixture_set_names).map(&:to_s)
class_names = ClassCache.new class_names, config
class_names = if ar41_or_later?
ClassCache.new class_names, config
else
class_names = class_names.stringify_keys
end

# FIXME: Apparently JK uses this.
connection = block_given? ? yield : ActiveRecord::Base.connection
Expand All @@ -20,18 +27,26 @@ def self.create_fixtures(fixtures_directory, fixture_set_names, class_names = {}
fixtures_map = {}

fixture_sets = files_to_read.map do |fs_name|
klass = class_names[fs_name]
conn = klass ? klass.connection : connection
klass = if ar41_or_later?
class_names[fs_name]
else
class_names[fs_name] || default_fixture_model_name(fs_name)
end
conn = klass.is_a?(String) ? connection : klass.connection
fixtures_map[fs_name] = new( # ActiveRecord::FixtureSet.new
conn,
fs_name,
klass,
::File.join(fixtures_directory, fs_name))
end

update_all_loaded_fixtures fixtures_map
if ar42_or_later?
update_all_loaded_fixtures fixtures_map
else
all_loaded_fixtures.update(fixtures_map)
end

ActiveRecord::Turntable::Base.force_transaction_all_shards!(:requires_new => true) do
ActiveRecord::Base.force_transaction_all_shards!(:requires_new => true) do
fixture_sets.each do |fs|
conn = fs.model_class.respond_to?(:connection) ? fs.model_class.connection : connection
table_rows = fs.table_rows
Expand Down Expand Up @@ -63,7 +78,7 @@ def self.create_fixtures(fixtures_directory, fixture_set_names, class_names = {}
end

module TestFixtures
extend ActiveRecord::Turntable::Util
include ActiveRecord::Turntable::Util

def setup_fixtures(config = ActiveRecord::Base)
return unless !ActiveRecord::Base.configurations.blank?
Expand Down
27 changes: 27 additions & 0 deletions spec/active_record/turntable/active_record_ext/fixture_set_spec.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
require 'spec_helper'

require 'active_record'
require 'active_record/turntable/active_record_ext/fixtures'

describe ActiveRecord::FixtureSet do
before(:all) do
reload_turntable!(File.join(File.dirname(__FILE__), "../../../config/turntable.yml"))
end

before do
establish_connection_to(:test)
truncate_shard
end

let(:fixtures_root) { File.join(File.dirname(__FILE__), "../../../fixtures") }
let(:fixture_file) { File.join(fixtures_root, "cards.yml") }
let(:cards) { YAML.load(ERB.new(IO.read(fixture_file)).result) }

describe ".create_fixtures" do
subject { ActiveRecord::FixtureSet.create_fixtures(fixtures_root, "cards") }
it { is_expected.to be_instance_of(Array) }
it "creates card records" do
expect {subject}.to change {Card.count}.from(0).to(cards.size)
end
end
end
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
require 'spec_helper'

require 'active_record'
require 'active_record/turntable/active_record_ext/fixtures'

describe ActiveRecord::TestFixtures do
before(:all) do
reload_turntable!(File.join(File.dirname(__FILE__), "../../../config/turntable.yml"))
end

before do
establish_connection_to(:test)
truncate_shard
end

let(:fixtures_root) { File.join(File.dirname(__FILE__), "../../../fixtures") }
let(:fixture_file) { File.join(fixtures_root, "cards.yml") }
let(:test_fixture_class) { Class.new(ActiveSupport::TestCase) { include ActiveRecord::TestFixtures } }
let(:test_fixture) { test_fixture_class.new("test") }
let(:cards) { YAML.load(ERB.new(IO.read(fixture_file)).result) }

before do
test_fixture_class.fixture_path = fixtures_root
end

describe "#setup_fixtures" do
after do
test_fixture.teardown_fixtures
end

subject { test_fixture.setup_fixtures }
it { expect { subject }.not_to raise_error }
end
end
11 changes: 11 additions & 0 deletions spec/fixtures/cards.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
card_1:
id: 1
name: card_1
hp: 10
mp: 10

card_2:
id: 2
name: card_2
hp: 20
mp: 20

0 comments on commit 09a28cf

Please sign in to comment.