Mercurial > hg > soundsoftware-site
comparison .svn/pristine/26/26b129aaf0142d0284cf85c4dcc060c09b8d918d.svn-base @ 909:cbb26bc654de redmine-1.3
Update to Redmine 1.3-stable branch (Redmine SVN rev 8964)
author | Chris Cannam |
---|---|
date | Fri, 24 Feb 2012 19:09:32 +0000 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
908:c6c2cbd0afee | 909:cbb26bc654de |
---|---|
1 require File.join(File.dirname(__FILE__), 'abstract_unit') | |
2 require File.join(File.dirname(__FILE__), 'fixtures/page') | |
3 require File.join(File.dirname(__FILE__), 'fixtures/widget') | |
4 | |
5 class VersionedTest < Test::Unit::TestCase | |
6 fixtures :pages, :page_versions, :locked_pages, :locked_pages_revisions, :authors, :landmarks, :landmark_versions | |
7 set_fixture_class :page_versions => Page::Version | |
8 | |
9 def test_saves_versioned_copy | |
10 p = Page.create! :title => 'first title', :body => 'first body' | |
11 assert !p.new_record? | |
12 assert_equal 1, p.versions.size | |
13 assert_equal 1, p.version | |
14 assert_instance_of Page.versioned_class, p.versions.first | |
15 end | |
16 | |
17 def test_saves_without_revision | |
18 p = pages(:welcome) | |
19 old_versions = p.versions.count | |
20 | |
21 p.save_without_revision | |
22 | |
23 p.without_revision do | |
24 p.update_attributes :title => 'changed' | |
25 end | |
26 | |
27 assert_equal old_versions, p.versions.count | |
28 end | |
29 | |
30 def test_rollback_with_version_number | |
31 p = pages(:welcome) | |
32 assert_equal 24, p.version | |
33 assert_equal 'Welcome to the weblog', p.title | |
34 | |
35 assert p.revert_to!(p.versions.first.version), "Couldn't revert to 23" | |
36 assert_equal 23, p.version | |
37 assert_equal 'Welcome to the weblg', p.title | |
38 end | |
39 | |
40 def test_versioned_class_name | |
41 assert_equal 'Version', Page.versioned_class_name | |
42 assert_equal 'LockedPageRevision', LockedPage.versioned_class_name | |
43 end | |
44 | |
45 def test_versioned_class | |
46 assert_equal Page::Version, Page.versioned_class | |
47 assert_equal LockedPage::LockedPageRevision, LockedPage.versioned_class | |
48 end | |
49 | |
50 def test_special_methods | |
51 assert_nothing_raised { pages(:welcome).feeling_good? } | |
52 assert_nothing_raised { pages(:welcome).versions.first.feeling_good? } | |
53 assert_nothing_raised { locked_pages(:welcome).hello_world } | |
54 assert_nothing_raised { locked_pages(:welcome).versions.first.hello_world } | |
55 end | |
56 | |
57 def test_rollback_with_version_class | |
58 p = pages(:welcome) | |
59 assert_equal 24, p.version | |
60 assert_equal 'Welcome to the weblog', p.title | |
61 | |
62 assert p.revert_to!(p.versions.first), "Couldn't revert to 23" | |
63 assert_equal 23, p.version | |
64 assert_equal 'Welcome to the weblg', p.title | |
65 end | |
66 | |
67 def test_rollback_fails_with_invalid_revision | |
68 p = locked_pages(:welcome) | |
69 assert !p.revert_to!(locked_pages(:thinking)) | |
70 end | |
71 | |
72 def test_saves_versioned_copy_with_options | |
73 p = LockedPage.create! :title => 'first title' | |
74 assert !p.new_record? | |
75 assert_equal 1, p.versions.size | |
76 assert_instance_of LockedPage.versioned_class, p.versions.first | |
77 end | |
78 | |
79 def test_rollback_with_version_number_with_options | |
80 p = locked_pages(:welcome) | |
81 assert_equal 'Welcome to the weblog', p.title | |
82 assert_equal 'LockedPage', p.versions.first.version_type | |
83 | |
84 assert p.revert_to!(p.versions.first.version), "Couldn't revert to 23" | |
85 assert_equal 'Welcome to the weblg', p.title | |
86 assert_equal 'LockedPage', p.versions.first.version_type | |
87 end | |
88 | |
89 def test_rollback_with_version_class_with_options | |
90 p = locked_pages(:welcome) | |
91 assert_equal 'Welcome to the weblog', p.title | |
92 assert_equal 'LockedPage', p.versions.first.version_type | |
93 | |
94 assert p.revert_to!(p.versions.first), "Couldn't revert to 1" | |
95 assert_equal 'Welcome to the weblg', p.title | |
96 assert_equal 'LockedPage', p.versions.first.version_type | |
97 end | |
98 | |
99 def test_saves_versioned_copy_with_sti | |
100 p = SpecialLockedPage.create! :title => 'first title' | |
101 assert !p.new_record? | |
102 assert_equal 1, p.versions.size | |
103 assert_instance_of LockedPage.versioned_class, p.versions.first | |
104 assert_equal 'SpecialLockedPage', p.versions.first.version_type | |
105 end | |
106 | |
107 def test_rollback_with_version_number_with_sti | |
108 p = locked_pages(:thinking) | |
109 assert_equal 'So I was thinking', p.title | |
110 | |
111 assert p.revert_to!(p.versions.first.version), "Couldn't revert to 1" | |
112 assert_equal 'So I was thinking!!!', p.title | |
113 assert_equal 'SpecialLockedPage', p.versions.first.version_type | |
114 end | |
115 | |
116 def test_lock_version_works_with_versioning | |
117 p = locked_pages(:thinking) | |
118 p2 = LockedPage.find(p.id) | |
119 | |
120 p.title = 'fresh title' | |
121 p.save | |
122 assert_equal 2, p.versions.size # limit! | |
123 | |
124 assert_raises(ActiveRecord::StaleObjectError) do | |
125 p2.title = 'stale title' | |
126 p2.save | |
127 end | |
128 end | |
129 | |
130 def test_version_if_condition | |
131 p = Page.create! :title => "title" | |
132 assert_equal 1, p.version | |
133 | |
134 Page.feeling_good = false | |
135 p.save | |
136 assert_equal 1, p.version | |
137 Page.feeling_good = true | |
138 end | |
139 | |
140 def test_version_if_condition2 | |
141 # set new if condition | |
142 Page.class_eval do | |
143 def new_feeling_good() title[0..0] == 'a'; end | |
144 alias_method :old_feeling_good, :feeling_good? | |
145 alias_method :feeling_good?, :new_feeling_good | |
146 end | |
147 | |
148 p = Page.create! :title => "title" | |
149 assert_equal 1, p.version # version does not increment | |
150 assert_equal 1, p.versions(true).size | |
151 | |
152 p.update_attributes(:title => 'new title') | |
153 assert_equal 1, p.version # version does not increment | |
154 assert_equal 1, p.versions(true).size | |
155 | |
156 p.update_attributes(:title => 'a title') | |
157 assert_equal 2, p.version | |
158 assert_equal 2, p.versions(true).size | |
159 | |
160 # reset original if condition | |
161 Page.class_eval { alias_method :feeling_good?, :old_feeling_good } | |
162 end | |
163 | |
164 def test_version_if_condition_with_block | |
165 # set new if condition | |
166 old_condition = Page.version_condition | |
167 Page.version_condition = Proc.new { |page| page.title[0..0] == 'b' } | |
168 | |
169 p = Page.create! :title => "title" | |
170 assert_equal 1, p.version # version does not increment | |
171 assert_equal 1, p.versions(true).size | |
172 | |
173 p.update_attributes(:title => 'a title') | |
174 assert_equal 1, p.version # version does not increment | |
175 assert_equal 1, p.versions(true).size | |
176 | |
177 p.update_attributes(:title => 'b title') | |
178 assert_equal 2, p.version | |
179 assert_equal 2, p.versions(true).size | |
180 | |
181 # reset original if condition | |
182 Page.version_condition = old_condition | |
183 end | |
184 | |
185 def test_version_no_limit | |
186 p = Page.create! :title => "title", :body => 'first body' | |
187 p.save | |
188 p.save | |
189 5.times do |i| | |
190 assert_page_title p, i | |
191 end | |
192 end | |
193 | |
194 def test_version_max_limit | |
195 p = LockedPage.create! :title => "title" | |
196 p.update_attributes(:title => "title1") | |
197 p.update_attributes(:title => "title2") | |
198 5.times do |i| | |
199 assert_page_title p, i, :lock_version | |
200 assert p.versions(true).size <= 2, "locked version can only store 2 versions" | |
201 end | |
202 end | |
203 | |
204 def test_track_altered_attributes_default_value | |
205 assert !Page.track_altered_attributes | |
206 assert LockedPage.track_altered_attributes | |
207 assert SpecialLockedPage.track_altered_attributes | |
208 end | |
209 | |
210 def test_version_order | |
211 assert_equal 23, pages(:welcome).versions.first.version | |
212 assert_equal 24, pages(:welcome).versions.last.version | |
213 end | |
214 | |
215 def test_track_altered_attributes | |
216 p = LockedPage.create! :title => "title" | |
217 assert_equal 1, p.lock_version | |
218 assert_equal 1, p.versions(true).size | |
219 | |
220 p.title = 'title' | |
221 assert !p.save_version? | |
222 p.save | |
223 assert_equal 2, p.lock_version # still increments version because of optimistic locking | |
224 assert_equal 1, p.versions(true).size | |
225 | |
226 p.title = 'updated title' | |
227 assert p.save_version? | |
228 p.save | |
229 assert_equal 3, p.lock_version | |
230 assert_equal 1, p.versions(true).size # version 1 deleted | |
231 | |
232 p.title = 'updated title!' | |
233 assert p.save_version? | |
234 p.save | |
235 assert_equal 4, p.lock_version | |
236 assert_equal 2, p.versions(true).size # version 1 deleted | |
237 end | |
238 | |
239 def assert_page_title(p, i, version_field = :version) | |
240 p.title = "title#{i}" | |
241 p.save | |
242 assert_equal "title#{i}", p.title | |
243 assert_equal (i+4), p.send(version_field) | |
244 end | |
245 | |
246 def test_find_versions | |
247 assert_equal 2, locked_pages(:welcome).versions.size | |
248 assert_equal 1, locked_pages(:welcome).versions.find(:all, :conditions => ['title LIKE ?', '%weblog%']).length | |
249 assert_equal 2, locked_pages(:welcome).versions.find(:all, :conditions => ['title LIKE ?', '%web%']).length | |
250 assert_equal 0, locked_pages(:thinking).versions.find(:all, :conditions => ['title LIKE ?', '%web%']).length | |
251 assert_equal 2, locked_pages(:welcome).versions.length | |
252 end | |
253 | |
254 def test_find_version | |
255 assert_equal page_versions(:welcome_1), Page.find_version(pages(:welcome).id, 23) | |
256 assert_equal page_versions(:welcome_2), Page.find_version(pages(:welcome).id, 24) | |
257 assert_equal pages(:welcome), Page.find_version(pages(:welcome).id) | |
258 | |
259 assert_equal page_versions(:welcome_1), pages(:welcome).find_version(23) | |
260 assert_equal page_versions(:welcome_2), pages(:welcome).find_version(24) | |
261 assert_equal pages(:welcome), pages(:welcome).find_version | |
262 | |
263 assert_raise(ActiveRecord::RecordNotFound) { Page.find_version(pages(:welcome).id, 1) } | |
264 assert_raise(ActiveRecord::RecordNotFound) { Page.find_version(0, 23) } | |
265 end | |
266 | |
267 def test_with_sequence | |
268 assert_equal 'widgets_seq', Widget.versioned_class.sequence_name | |
269 3.times { Widget.create! :name => 'new widget' } | |
270 assert_equal 3, Widget.count | |
271 assert_equal 3, Widget.versioned_class.count | |
272 end | |
273 | |
274 def test_has_many_through | |
275 assert_equal [authors(:caged), authors(:mly)], pages(:welcome).authors | |
276 end | |
277 | |
278 def test_has_many_through_with_custom_association | |
279 assert_equal [authors(:caged), authors(:mly)], pages(:welcome).revisors | |
280 end | |
281 | |
282 def test_referential_integrity | |
283 pages(:welcome).destroy | |
284 assert_equal 0, Page.count | |
285 assert_equal 0, Page::Version.count | |
286 end | |
287 | |
288 def test_association_options | |
289 association = Page.reflect_on_association(:versions) | |
290 options = association.options | |
291 assert_equal :delete_all, options[:dependent] | |
292 assert_equal 'version', options[:order] | |
293 | |
294 association = Widget.reflect_on_association(:versions) | |
295 options = association.options | |
296 assert_equal :nullify, options[:dependent] | |
297 assert_equal 'version desc', options[:order] | |
298 assert_equal 'widget_id', options[:foreign_key] | |
299 | |
300 widget = Widget.create! :name => 'new widget' | |
301 assert_equal 1, Widget.count | |
302 assert_equal 1, Widget.versioned_class.count | |
303 widget.destroy | |
304 assert_equal 0, Widget.count | |
305 assert_equal 1, Widget.versioned_class.count | |
306 end | |
307 | |
308 def test_versioned_records_should_belong_to_parent | |
309 page = pages(:welcome) | |
310 page_version = page.versions.last | |
311 assert_equal page, page_version.page | |
312 end | |
313 | |
314 def test_unaltered_attributes | |
315 landmarks(:washington).attributes = landmarks(:washington).attributes.except("id") | |
316 assert !landmarks(:washington).changed? | |
317 end | |
318 | |
319 def test_unchanged_string_attributes | |
320 landmarks(:washington).attributes = landmarks(:washington).attributes.except("id").inject({}) { |params, (key, value)| params.update(key => value.to_s) } | |
321 assert !landmarks(:washington).changed? | |
322 end | |
323 | |
324 def test_should_find_earliest_version | |
325 assert_equal page_versions(:welcome_1), pages(:welcome).versions.earliest | |
326 end | |
327 | |
328 def test_should_find_latest_version | |
329 assert_equal page_versions(:welcome_2), pages(:welcome).versions.latest | |
330 end | |
331 | |
332 def test_should_find_previous_version | |
333 assert_equal page_versions(:welcome_1), page_versions(:welcome_2).previous | |
334 assert_equal page_versions(:welcome_1), pages(:welcome).versions.before(page_versions(:welcome_2)) | |
335 end | |
336 | |
337 def test_should_find_next_version | |
338 assert_equal page_versions(:welcome_2), page_versions(:welcome_1).next | |
339 assert_equal page_versions(:welcome_2), pages(:welcome).versions.after(page_versions(:welcome_1)) | |
340 end | |
341 | |
342 def test_should_find_version_count | |
343 assert_equal 24, pages(:welcome).versions_count | |
344 assert_equal 24, page_versions(:welcome_1).versions_count | |
345 assert_equal 24, page_versions(:welcome_2).versions_count | |
346 end | |
347 end |