1
0
Fork 0
mirror of https://github.com/rails/rails.git synced 2022-11-09 12:12:34 -05:00

fixture file will validate fixture format

This commit is contained in:
Aaron Patterson 2011-05-10 10:42:03 -07:00
parent 5278af3d8e
commit 081b36c6ce
2 changed files with 26 additions and 1 deletions

View file

@ -34,12 +34,19 @@ module ActiveRecord
return @rows if @rows
data = YAML.load(render(IO.read(@file)))
@rows = data ? data.to_a : []
@rows = data ? validate(data).to_a : []
end
def render(content)
ERB.new(content).result
end
# Validate our unmarshalled data.
def validate(data)
raise Fixture::FormatError, 'fixture is not a hash' unless Hash === data
raise Fixture::FormatError unless data.all? { |name, row| Hash === row }
data
end
end
end
end

View file

@ -48,6 +48,24 @@ module ActiveRecord
end
end
# A valid YAML file is not necessarily a value Fixture file. Make sure
# an exception is raised if the format is not valid Fixture format.
def test_wrong_fixture_format_string
tmp_yaml ['empty', 'yml'], 'qwerty' do |t|
assert_raises(ActiveRecord::Fixture::FormatError) do
File.open(t.path) { |fh| fh.to_a }
end
end
end
def test_wrong_fixture_format_nested
tmp_yaml ['empty', 'yml'], 'one: two' do |t|
assert_raises(ActiveRecord::Fixture::FormatError) do
File.open(t.path) { |fh| fh.to_a }
end
end
end
private
def tmp_yaml(name, contents)
t = Tempfile.new name