summaryrefslogtreecommitdiff
path: root/vendor/plugins/globalize2/test/model
diff options
context:
space:
mode:
authorhukl <contact@smyck.org>2010-01-14 22:21:43 +0100
committerhukl <contact@smyck.org>2010-01-14 22:21:43 +0100
commit57d1382013c85a7b11ac8ce5e683f6006b12b328 (patch)
tree19646c4fa5952fa1cf0a2c874952affa346373f1 /vendor/plugins/globalize2/test/model
parent1b86bf5f2e35d1820bfa32d979bcc2d9ff9a9a8e (diff)
Updated globalize2 to latest version. Modified existing code accoringly
Diffstat (limited to 'vendor/plugins/globalize2/test/model')
-rw-r--r--vendor/plugins/globalize2/test/model/active_record/migration_test.rb125
-rw-r--r--vendor/plugins/globalize2/test/model/active_record/sti_translated_test.rb75
-rw-r--r--vendor/plugins/globalize2/test/model/active_record/translated_test.rb478
3 files changed, 0 insertions, 678 deletions
diff --git a/vendor/plugins/globalize2/test/model/active_record/migration_test.rb b/vendor/plugins/globalize2/test/model/active_record/migration_test.rb
deleted file mode 100644
index eb6533d..0000000
--- a/vendor/plugins/globalize2/test/model/active_record/migration_test.rb
+++ /dev/null
@@ -1,125 +0,0 @@
1require File.join( File.dirname(__FILE__), '..', '..', 'test_helper' )
2require 'active_record'
3require 'globalize/model/active_record'
4
5# Hook up model translation
6ActiveRecord::Base.send(:include, Globalize::Model::ActiveRecord::Translated)
7
8# Load Post model
9require File.join( File.dirname(__FILE__), '..', '..', 'data', 'models' )
10
11class MigrationTest < ActiveSupport::TestCase
12 def setup
13 reset_db! File.expand_path(File.join(File.dirname(__FILE__), '..', '..', 'data', 'no_globalize_schema.rb'))
14 end
15
16 test 'globalize table added' do
17 assert !Post.connection.table_exists?( :post_translations )
18 assert !Post.connection.index_exists?( :post_translations, :post_id )
19 Post.create_translation_table! :subject => :string, :content => :text
20 assert Post.connection.table_exists?( :post_translations )
21 assert Post.connection.index_exists?( :post_translations, :post_id )
22 columns = Post.connection.columns( :post_translations )
23 assert locale = columns.detect {|c| c.name == 'locale' }
24 assert_equal :string, locale.type
25 assert subject = columns.detect {|c| c.name == 'subject' }
26 assert_equal :string, subject.type
27 assert content = columns.detect {|c| c.name == 'content' }
28 assert_equal :text, content.type
29 assert post_id = columns.detect {|c| c.name == 'post_id' }
30 assert_equal :integer, post_id.type
31 assert created_at = columns.detect {|c| c.name == 'created_at' }
32 assert_equal :datetime, created_at.type
33 assert updated_at = columns.detect {|c| c.name == 'updated_at' }
34 assert_equal :datetime, updated_at.type
35 end
36
37 test 'globalize table dropped' do
38 assert !Post.connection.table_exists?( :post_translations )
39 assert !Post.connection.index_exists?( :post_translations, :post_id )
40 Post.create_translation_table! :subject => :string, :content => :text
41 assert Post.connection.table_exists?( :post_translations )
42 assert Post.connection.index_exists?( :post_translations, :post_id )
43 Post.drop_translation_table!
44 assert !Post.connection.table_exists?( :post_translations )
45 assert !Post.connection.index_exists?( :post_translations, :post_id )
46 end
47
48 test 'exception on missing field inputs' do
49 assert_raise Globalize::Model::MigrationMissingTranslatedField do
50 Post.create_translation_table! :content => :text
51 end
52 end
53
54 test 'exception on bad input type' do
55 assert_raise Globalize::Model::BadMigrationFieldType do
56 Post.create_translation_table! :subject => :string, :content => :integer
57 end
58 end
59
60 test "exception on bad input type isn't raised for untranslated fields" do
61 assert_nothing_raised do
62 Post.create_translation_table! :subject => :string, :content => :string, :views_count => :integer
63 end
64 end
65
66 test 'create_translation_table! should not be called on non-translated models' do
67 assert_raise NoMethodError do
68 Blog.create_translation_table! :name => :string
69 end
70 end
71
72 test 'drop_translation_table! should not be called on non-translated models' do
73 assert_raise NoMethodError do
74 Blog.drop_translation_table!
75 end
76 end
77
78 test "translation_index_name returns a readable index name when it's not longer than 50 characters" do
79 assert_equal 'index_post_translations_on_post_id', Post.send(:translation_index_name)
80 end
81
82 test "translation_index_name returns a hashed index name when it's longer than 50 characters" do
83 class UltraLongModelNameWithoutProper < ActiveRecord::Base
84 translates :foo
85 end
86 expected = 'index_44eba0f057e01a590ffccd0b8a3b5c78979539cd'
87 actual = UltraLongModelNameWithoutProper.send(:translation_index_name)
88
89 assert_equal expected, actual
90 end
91
92 test 'globalize table added when table has long name' do
93 UltraLongModelNameWithoutProper.create_translation_table!(
94 :subject => :string, :content => :text
95 )
96
97 assert UltraLongModelNameWithoutProper.connection.table_exists?(
98 :ultra_long_model_name_without_proper_translations
99 )
100 assert UltraLongModelNameWithoutProper.connection.index_exists?(
101 :ultra_long_model_name_without_proper_translations,
102 :name => UltraLongModelNameWithoutProper.send(
103 :translation_index_name
104 )
105 )
106 end
107
108 test 'globalize table dropped when table has long name' do
109 UltraLongModelNameWithoutProper.create_translation_table!(
110 :subject => :string, :content => :text
111 )
112
113 UltraLongModelNameWithoutProper.drop_translation_table!
114
115 assert !UltraLongModelNameWithoutProper.connection.table_exists?(
116 :ultra_long_model_name_without_proper_translations
117 )
118
119 assert !UltraLongModelNameWithoutProper.connection.index_exists?(
120 :ultra_long_model_name_without_proper_translations,
121 :ultra_long_model_name_without_proper_id
122 )
123 end
124
125end \ No newline at end of file
diff --git a/vendor/plugins/globalize2/test/model/active_record/sti_translated_test.rb b/vendor/plugins/globalize2/test/model/active_record/sti_translated_test.rb
deleted file mode 100644
index 6980ba0..0000000
--- a/vendor/plugins/globalize2/test/model/active_record/sti_translated_test.rb
+++ /dev/null
@@ -1,75 +0,0 @@
1require File.join( File.dirname(__FILE__), '..', '..', 'test_helper' )
2require 'active_record'
3require 'globalize/model/active_record'
4
5# Hook up model translation
6ActiveRecord::Base.send(:include, Globalize::Model::ActiveRecord::Translated)
7
8# Load Post model
9require File.join( File.dirname(__FILE__), '..', '..', 'data', 'models' )
10
11class StiTranslatedTest < ActiveSupport::TestCase
12 def setup
13 I18n.locale = :'en-US'
14 I18n.fallbacks.clear
15 reset_db! File.expand_path(File.join(File.dirname(__FILE__), '..', '..', 'data', 'schema.rb'))
16 end
17
18 def teardown
19 I18n.fallbacks.clear
20 end
21
22 test "works with simple dynamic finders" do
23 foo = Child.create :content => 'foo'
24 Child.create :content => 'bar'
25 child = Child.find_by_content('foo')
26 assert_equal foo, child
27 end
28
29 test 'change attribute on globalized model' do
30 child = Child.create :content => 'foo'
31 assert_equal [], child.changed
32 child.content = 'bar'
33 assert_equal [ 'content' ], child.changed
34 child.content = 'baz'
35 assert_member 'content', child.changed
36 end
37
38 test 'change attribute on globalized model after locale switching' do
39 child = Child.create :content => 'foo'
40 assert_equal [], child.changed
41 child.content = 'bar'
42 I18n.locale = :de
43 assert_equal [ 'content' ], child.changed
44 end
45
46 test 'fallbacks with lots of locale switching' do
47 I18n.fallbacks.map :'de-DE' => [ :'en-US' ]
48 child = Child.create :content => 'foo'
49
50 I18n.locale = :'de-DE'
51 assert_equal 'foo', child.content
52
53 I18n.locale = :'en-US'
54 child.update_attribute :content, 'bar'
55
56 I18n.locale = :'de-DE'
57 assert_equal 'bar', child.content
58 end
59
60 test "saves all locales, even after locale switching" do
61 child = Child.new :content => 'foo'
62 I18n.locale = 'de-DE'
63 child.content = 'bar'
64 I18n.locale = 'he-IL'
65 child.content = 'baz'
66 child.save
67 I18n.locale = 'en-US'
68 child = Child.first
69 assert_equal 'foo', child.content
70 I18n.locale = 'de-DE'
71 assert_equal 'bar', child.content
72 I18n.locale = 'he-IL'
73 assert_equal 'baz', child.content
74 end
75end \ No newline at end of file
diff --git a/vendor/plugins/globalize2/test/model/active_record/translated_test.rb b/vendor/plugins/globalize2/test/model/active_record/translated_test.rb
deleted file mode 100644
index f54894e..0000000
--- a/vendor/plugins/globalize2/test/model/active_record/translated_test.rb
+++ /dev/null
@@ -1,478 +0,0 @@
1require File.join( File.dirname(__FILE__), '..', '..', 'test_helper' )
2require 'active_record'
3require 'globalize/model/active_record'
4
5# Hook up model translation
6ActiveRecord::Base.send(:include, Globalize::Model::ActiveRecord::Translated)
7
8# Load Post model
9require File.join( File.dirname(__FILE__), '..', '..', 'data', 'models' )
10
11class TranslatedTest < ActiveSupport::TestCase
12 def setup
13 I18n.locale = :'en-US'
14 I18n.fallbacks.clear
15 reset_db! File.expand_path(File.join(File.dirname(__FILE__), '..', '..', 'data', 'schema.rb'))
16 ActiveRecord::Base.locale = nil
17 end
18
19 def teardown
20 I18n.fallbacks.clear
21 end
22
23 test "modifiying translated fields" do
24 post = Post.create :subject => 'foo'
25 assert_equal 'foo', post.subject
26 post.subject = 'bar'
27 assert_equal 'bar', post.subject
28 end
29
30 test "modifiying translated fields while switching locales" do
31 post = Post.create :subject => 'foo'
32 assert_equal 'foo', post.subject
33 I18n.locale = :'de-DE'
34 post.subject = 'bar'
35 assert_equal 'bar', post.subject
36 I18n.locale = :'en-US'
37 assert_equal 'foo', post.subject
38 I18n.locale = :'de-DE'
39 post.subject = 'bar'
40 end
41
42 test "has post_translations" do
43 post = Post.create
44 assert_nothing_raised { post.globalize_translations }
45 end
46
47 test "has German post_translations" do
48 I18n.locale = :de
49 post = Post.create :subject => 'foo'
50 assert_equal 1, post.globalize_translations.size
51 I18n.locale = :en
52 assert_equal 1, post.globalize_translations.size
53 end
54
55 test "returns the value passed to :subject" do
56 post = Post.new
57 assert_equal 'foo', (post.subject = 'foo')
58 end
59
60 test "translates subject and content into en-US" do
61 post = Post.create :subject => 'foo', :content => 'bar'
62 assert_equal 'foo', post.subject
63 assert_equal 'bar', post.content
64 assert post.save
65 post.reload
66 assert_equal 'foo', post.subject
67 assert_equal 'bar', post.content
68 end
69
70 test "finds a German post" do
71 post = Post.create :subject => 'foo (en)', :content => 'bar'
72 I18n.locale = 'de-DE'
73 post = Post.first
74 post.subject = 'baz (de)'
75 post.save
76 assert_equal 'baz (de)', Post.first.subject
77 I18n.locale = :'en-US'
78 assert_equal 'foo (en)', Post.first.subject
79 end
80
81 test "saves an English post and loads test correctly" do
82 assert_nil Post.first
83 post = Post.create :subject => 'foo', :content => 'bar'
84 assert post.save
85 post = Post.first
86 assert_equal 'foo', post.subject
87 assert_equal 'bar', post.content
88 end
89
90 test "updates an attribute" do
91 post = Post.create :subject => 'foo', :content => 'bar'
92 post.update_attribute :subject, 'baz'
93 assert_equal 'baz', Post.first.subject
94 end
95
96 test "update_attributes failure" do
97 post = Post.create :subject => 'foo', :content => 'bar'
98 assert !post.update_attributes( { :subject => '' } )
99 assert_nil post.reload.attributes['subject']
100 assert_equal 'foo', post.subject
101 end
102
103 test "validates presence of :subject" do
104 post = Post.new
105 assert !post.save
106
107 post = Post.new :subject => 'foo'
108 assert post.save
109 end
110
111 test "returns the value for the correct locale, after locale switching" do
112 post = Post.create :subject => 'foo'
113 I18n.locale = 'de-DE'
114 post.subject = 'bar'
115 post.save
116 I18n.locale = 'en-US'
117 post = Post.first
118 assert_equal 'foo', post.subject
119 I18n.locale = 'de-DE'
120 assert_equal 'bar', post.subject
121 end
122
123 test "keeping one field in new locale when other field is changed" do
124 I18n.fallbacks.map 'de-DE' => [ 'en-US' ]
125 post = Post.create :subject => 'foo'
126 I18n.locale = 'de-DE'
127 post.content = 'bar'
128 assert_equal 'foo', post.subject
129 end
130
131 test "modifying non-required field in a new locale" do
132 I18n.fallbacks.map 'de-DE' => [ 'en-US' ]
133 post = Post.create :subject => 'foo'
134 I18n.locale = 'de-DE'
135 post.content = 'bar'
136 assert post.save
137 end
138
139 test "returns the value for the correct locale, after locale switching, without saving" do
140 post = Post.create :subject => 'foo'
141 I18n.locale = 'de-DE'
142 post.subject = 'bar'
143 I18n.locale = 'en-US'
144 assert_equal 'foo', post.subject
145 I18n.locale = 'de-DE'
146 assert_equal 'bar', post.subject
147 end
148
149 test "saves all locales, even after locale switching" do
150 post = Post.new :subject => 'foo'
151 I18n.locale = 'de-DE'
152 post.subject = 'bar'
153 I18n.locale = 'he-IL'
154 post.subject = 'baz'
155 post.save
156 I18n.locale = 'en-US'
157 post = Post.first
158 assert_equal 'foo', post.subject
159 I18n.locale = 'de-DE'
160 assert_equal 'bar', post.subject
161 I18n.locale = 'he-IL'
162 assert_equal 'baz', post.subject
163 end
164
165 test "resolves a simple fallback" do
166 I18n.locale = 'de-DE'
167 post = Post.create :subject => 'foo'
168 I18n.locale = 'de'
169 post.subject = 'baz'
170 post.content = 'bar'
171 post.save
172 I18n.locale = 'de-DE'
173 assert_equal 'foo', post.subject
174 assert_equal 'bar', post.content
175 end
176
177 test "resolves a simple fallback without reloading" do
178 I18n.locale = 'de-DE'
179 post = Post.new :subject => 'foo'
180 I18n.locale = 'de'
181 post.subject = 'baz'
182 post.content = 'bar'
183 I18n.locale = 'de-DE'
184 assert_equal 'foo', post.subject
185 assert_equal 'bar', post.content
186 end
187
188 test "resolves a complex fallback without reloading" do
189 I18n.fallbacks.map 'de' => %w(en he)
190 I18n.locale = 'de'
191 post = Post.new
192 I18n.locale = 'en'
193 post.subject = 'foo'
194 I18n.locale = 'he'
195 post.subject = 'baz'
196 post.content = 'bar'
197 I18n.locale = 'de'
198 assert_equal 'foo', post.subject
199 assert_equal 'bar', post.content
200 end
201
202 test "returns nil if no translations are found" do
203 post = Post.new :subject => 'foo'
204 assert_equal 'foo', post.subject
205 assert_nil post.content
206 end
207
208 test "returns nil if no translations are found; reloaded" do
209 post = Post.create :subject => 'foo'
210 post = Post.first
211 assert_equal 'foo', post.subject
212 assert_nil post.content
213 end
214
215 test "works with associations" do
216 blog = Blog.create
217 post1 = blog.posts.create :subject => 'foo'
218 I18n.locale = 'de-DE'
219 post2 = blog.posts.create :subject => 'bar'
220 assert_equal 2, blog.posts.size
221 I18n.locale = 'en-US'
222 assert_equal 'foo', blog.posts.first.subject
223 assert_nil blog.posts.last.subject
224 I18n.locale = 'de-DE'
225 assert_equal 'bar', blog.posts.last.subject
226 end
227
228 test "works with simple dynamic finders" do
229 foo = Post.create :subject => 'foo'
230 Post.create :subject => 'bar'
231 post = Post.find_by_subject('foo')
232 assert_equal foo, post
233 end
234
235 test 'change attribute on globalized model' do
236 post = Post.create :subject => 'foo', :content => 'bar'
237 assert_equal [], post.changed
238 post.subject = 'baz'
239 assert_equal [ 'subject' ], post.changed
240 post.content = 'quux'
241 assert_member 'subject', post.changed
242 assert_member 'content', post.changed
243 end
244
245 test 'change attribute on globalized model after locale switching' do
246 post = Post.create :subject => 'foo', :content => 'bar'
247 assert_equal [], post.changed
248 post.subject = 'baz'
249 I18n.locale = :de
250 assert_equal [ 'subject' ], post.changed
251 end
252
253 test 'fallbacks with lots of locale switching' do
254 I18n.fallbacks.map :'de-DE' => [ :'en-US' ]
255 post = Post.create :subject => 'foo'
256
257 I18n.locale = :'de-DE'
258 assert_equal 'foo', post.subject
259
260 I18n.locale = :'en-US'
261 post.update_attribute :subject, 'bar'
262
263 I18n.locale = :'de-DE'
264 assert_equal 'bar', post.subject
265 end
266
267 test 'reload' do
268 post = Post.create :subject => 'foo', :content => 'bar'
269 post.subject = 'baz'
270 assert_equal 'foo', post.reload.subject
271 end
272
273 test 'complex writing and stashing' do
274 post = Post.create :subject => 'foo', :content => 'bar'
275 post.subject = nil
276 assert_nil post.subject
277 assert !post.valid?
278 end
279
280 test 'translated class locale setting' do
281 assert ActiveRecord::Base.respond_to?(:locale)
282 assert_equal :'en-US', I18n.locale
283 assert_equal :'en-US', ActiveRecord::Base.locale
284 I18n.locale = :de
285 assert_equal :de, I18n.locale
286 assert_equal :de, ActiveRecord::Base.locale
287 ActiveRecord::Base.locale = :es
288 assert_equal :de, I18n.locale
289 assert_equal :es, ActiveRecord::Base.locale
290 I18n.locale = :fr
291 assert_equal :fr, I18n.locale
292 assert_equal :es, ActiveRecord::Base.locale
293 end
294
295 test "untranslated class responds to locale" do
296 assert Blog.respond_to?(:locale)
297 end
298
299 test "to ensure locales in different classes are the same" do
300 ActiveRecord::Base.locale = :de
301 assert_equal :de, ActiveRecord::Base.locale
302 assert_equal :de, Parent.locale
303 Parent.locale = :es
304 assert_equal :es, ActiveRecord::Base.locale
305 assert_equal :es, Parent.locale
306 end
307
308 test "attribute saving goes by content locale and not global locale" do
309 ActiveRecord::Base.locale = :de
310 assert_equal :'en-US', I18n.locale
311 Post.create :subject => 'foo'
312 assert_equal :de, Post.first.globalize_translations.first.locale
313 end
314
315 test "attribute loading goes by content locale and not global locale" do
316 post = Post.create :subject => 'foo'
317 assert_equal :'en-US', ActiveRecord::Base.locale
318 ActiveRecord::Base.locale = :de
319 assert_equal :'en-US', I18n.locale
320 post.update_attribute :subject, 'foo [de]'
321 assert_equal 'foo [de]', Post.first.subject
322 ActiveRecord::Base.locale = :'en-US'
323 assert_equal 'foo', Post.first.subject
324 end
325
326 test "access content locale before setting" do
327 Globalize::Model::ActiveRecord::Translated::ActMethods.class_eval "remove_class_variable(:@@locale)"
328 assert_nothing_raised { ActiveRecord::Base.locale }
329 end
330
331 test "translated_locales" do
332 Post.locale = :de
333 post = Post.create :subject => 'foo'
334 Post.locale = :es
335 post.update_attribute :subject, 'bar'
336 Post.locale = :fr
337 post.update_attribute :subject, 'baz'
338 assert_equal [ :de, :es, :fr ], post.translated_locales
339 assert_equal [ :de, :es, :fr ], Post.first.translated_locales
340 end
341
342 test "including globalize_translations" do
343 I18n.locale = :de
344 Post.create :subject => "Foo1", :content => "Bar1"
345 Post.create :subject => "Foo2", :content => "Bar2"
346
347 class << Post
348 def tranlsations_included
349 self.all(:include => :globalize_translations)
350 end
351 end
352
353 default = Post.all.map {|x| [x.subject, x.content]}
354 with_include = Post.tranlsations_included.map {|x| [x.subject, x.content]}
355 assert_equal default, with_include
356 end
357
358 test "setting multiple translations at once with options hash" do
359 Post.locale = :de
360 post = Post.create :subject => "foo1", :content => "foo1"
361 Post.locale = :en
362 post.update_attributes( :subject => "bar1", :content => "bar1" )
363
364 options = { :de => {:subject => "foo2", :content => "foo2"},
365 :en => {:subject => "bar2", :content => "bar2"} }
366 post.set_translations options
367 post.reload
368
369 assert ["bar2", "bar2"], [post.subject, post.content]
370 Post.locale = :de
371 assert ["foo2", "foo2"], [post.subject, post.content]
372 end
373
374 test "setting only one translation with set_translations" do
375 Post.locale = :de
376 post = Post.create :subject => "foo1", :content => "foo1"
377 Post.locale = :en
378 post.update_attributes( :subject => "bar1", :content => "bar1" )
379
380 options = { :en => {:subject => "bar2", :content => "bar2"} }
381 post.set_translations options
382 post.reload
383
384 assert ["bar2", "bar2"], [post.subject, post.content]
385 Post.locale = :de
386 assert ["foo1", "foo1"], [post.subject, post.content]
387 end
388
389 test "setting only selected attributes with set_translations" do
390 Post.locale = :de
391 post = Post.create :subject => "foo1", :content => "foo1"
392 Post.locale = :en
393 post.update_attributes( :subject => "bar1", :content => "bar1" )
394
395 options = { :de => {:content => "foo2"}, :en => {:subject => "bar2"} }
396 post.set_translations options
397 post.reload
398
399 assert ["bar2", "bar1"], [post.subject, post.content]
400 Post.locale = :de
401 assert ["foo1", "foo2"], [post.subject, post.content]
402 end
403
404 test "setting invalid attributes raises ArgumentError" do
405 Post.locale = :de
406 post = Post.create :subject => "foo1", :content => "foo1"
407 Post.locale = :en
408 post.update_attributes( :subject => "bar1", :content => "bar1" )
409
410 options = { :de => {:fake => "foo2"} }
411 exception = assert_raise(ActiveRecord::UnknownAttributeError) do
412 post.set_translations options
413 end
414 assert_equal "unknown attribute: fake", exception.message
415 end
416
417 test "reload accepting find options" do
418 p = Post.create :subject => "Foo", :content => "Bar"
419 assert p.reload(:readonly => true, :lock => true)
420 assert_raise(ArgumentError) { p.reload(:foo => :bar) }
421 end
422
423 test "dependent destroy of translation" do
424 p = Post.create :subject => "Foo", :content => "Bar"
425 assert_equal 1, PostTranslation.count
426 p.destroy
427 assert_equal 0, PostTranslation.count
428 end
429
430 test "translating subclass of untranslated comment model" do
431 translated_comment = TranslatedComment.create(:post => @post)
432 assert_nothing_raised { translated_comment.globalize_translations }
433 end
434
435 test "modifiying translated comments works as expected" do
436 I18n.locale = :en
437 translated_comment = TranslatedComment.create(:post => @post, :content => 'foo')
438 assert_equal 'foo', translated_comment.content
439
440 I18n.locale = :de
441 translated_comment.content = 'bar'
442 assert translated_comment.save
443 assert_equal 'bar', translated_comment.content
444
445 I18n.locale = :en
446 assert_equal 'foo', translated_comment.content
447
448 assert_equal 2, translated_comment.globalize_translations.size
449 end
450
451 test "can create a proxy class for a namespaced model" do
452 module Foo
453 module Bar
454 class Baz < ActiveRecord::Base
455 translates :bumm
456 end
457 end
458 end
459 end
460
461 test "attribute translated before type cast" do
462 Post.locale = :en
463 post = Post.create :subject => 'foo', :content => 'bar'
464 Post.locale = :de
465 post.update_attribute :subject, "German foo"
466 assert_equal 'German foo', post.subject_before_type_cast
467 Post.locale = :en
468 assert_equal 'foo', post.subject_before_type_cast
469 end
470end
471
472# TODO should validate_presence_of take fallbacks into account? maybe we need
473# an extra validation call, or more options for validate_presence_of.
474# TODO error checking for fields that exist in main table, don't exist in
475# proxy table, aren't strings or text
476#
477# TODO allow finding by translated attributes in conditions?
478# TODO generate advanced dynamic finders?