1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
|
require 'cases/helper'
require 'tempfile'
module ActiveRecord
class FixtureSet
class FileTest < ActiveRecord::TestCase
def test_open
fh = File.open(::File.join(FIXTURES_ROOT, "accounts.yml"))
assert_equal 6, fh.to_a.length
end
def test_open_with_block
called = false
File.open(::File.join(FIXTURES_ROOT, "accounts.yml")) do |fh|
called = true
assert_equal 6, fh.to_a.length
end
assert called, 'block called'
end
def test_names
File.open(::File.join(FIXTURES_ROOT, "accounts.yml")) do |fh|
assert_equal ["signals37",
"unknown",
"rails_core_account",
"last_account",
"rails_core_account_2",
"odegy_account"].sort, fh.to_a.map(&:first).sort
end
end
def test_values
File.open(::File.join(FIXTURES_ROOT, "accounts.yml")) do |fh|
assert_equal [1,2,3,4,5,6].sort, fh.to_a.map(&:last).map { |x|
x['id']
}.sort
end
end
def test_erb_processing
File.open(::File.join(FIXTURES_ROOT, "developers.yml")) do |fh|
devs = Array.new(8) { |i| "dev_#{i + 3}" }
assert_equal [], devs - fh.to_a.map(&:first)
end
end
def test_empty_file
tmp_yaml ['empty', 'yml'], '' do |t|
assert_equal [], File.open(t.path) { |fh| fh.to_a }
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
def test_render_context_helper
ActiveRecord::FixtureSet.context_class.class_eval do
def fixture_helper
"Fixture helper"
end
end
yaml = "one:\n name: <%= fixture_helper %>\n"
tmp_yaml ['curious', 'yml'], yaml do |t|
golden =
[["one", {"name" => "Fixture helper"}]]
assert_equal golden, File.open(t.path) { |fh| fh.to_a }
end
ActiveRecord::FixtureSet.context_class.class_eval do
remove_method :fixture_helper
end
end
def test_render_context_lookup_scope
yaml = <<END
one:
ActiveRecord: <%= defined? ActiveRecord %>
ActiveRecord_FixtureSet: <%= defined? ActiveRecord::FixtureSet %>
FixtureSet: <%= defined? FixtureSet %>
ActiveRecord_FixtureSet_File: <%= defined? ActiveRecord::FixtureSet::File %>
File: <%= File.name %>
END
golden = [['one', {
'ActiveRecord' => 'constant',
'ActiveRecord_FixtureSet' => 'constant',
'FixtureSet' => nil,
'ActiveRecord_FixtureSet_File' => 'constant',
'File' => 'File'
}]]
tmp_yaml ['curious', 'yml'], yaml do |t|
assert_equal golden, File.open(t.path) { |fh| fh.to_a }
end
end
# Make sure that each fixture gets its own rendering context so that
# fixtures are independent.
def test_independent_render_contexts
yaml1 = "<% def leaked_method; 'leak'; end %>\n"
yaml2 = "one:\n name: <%= leaked_method %>\n"
tmp_yaml ['leaky', 'yml'], yaml1 do |t1|
tmp_yaml ['curious', 'yml'], yaml2 do |t2|
File.open(t1.path) { |fh| fh.to_a }
assert_raises(NameError) do
File.open(t2.path) { |fh| fh.to_a }
end
end
end
end
def test_removes_fixture_config_row
File.open(::File.join(FIXTURES_ROOT, 'other_posts.yml')) do |fh|
assert_equal(['second_welcome'], fh.each.map { |name, _| name })
end
end
def test_extracts_model_class_from_config_row
File.open(::File.join(FIXTURES_ROOT, 'other_posts.yml')) do |fh|
assert_equal 'Post', fh.model_class
end
end
private
def tmp_yaml(name, contents)
t = Tempfile.new name
t.binmode
t.write contents
t.close
yield t
ensure
t.close true
end
end
end
end
|