@@ -111,6 +111,26 @@ def self.exists?(conditions)
111
111
has_permalink :title
112
112
end
113
113
114
+ class PermalinkChangeableMockModel < BaseModel
115
+ def self . exists? ( conditions )
116
+ if conditions [ 1 ] == 'foo'
117
+ true
118
+ else
119
+ false
120
+ end
121
+ end
122
+
123
+ has_permalink :title
124
+
125
+ def permalink_changed?
126
+ @permalink_changed
127
+ end
128
+
129
+ def permalink_will_change!
130
+ @permalink_changed = true
131
+ end
132
+ end
133
+
114
134
class CommonMockModel < BaseModel
115
135
def self . exists? ( conditions )
116
136
false # oh noes
@@ -147,21 +167,21 @@ def permalink
147
167
end
148
168
end
149
169
150
- class ChangedModel < BaseModel
170
+ class ChangedWithoutUpdateModel < BaseModel
151
171
has_permalink :title
152
172
def title_changed? ; true ; end
153
173
end
154
174
155
- class NoChangeModel < BaseModel
156
- has_permalink :title
157
- def title_changed? ; false ; end
158
- end
159
-
160
175
class ChangedWithUpdateModel < BaseModel
161
176
has_permalink :title , :update => true
162
177
def title_changed? ; true ; end
163
178
end
164
179
180
+ class NoChangeModel < BaseModel
181
+ has_permalink :title , :update => true
182
+ def title_changed? ; false ; end
183
+ end
184
+
165
185
class IfProcConditionModel < BaseModel
166
186
has_permalink :title , :if => Proc . new { |obj | false }
167
187
end
@@ -239,13 +259,26 @@ def test_multiple_attribute_permalink
239
259
end
240
260
end
241
261
end
242
-
262
+
243
263
def test_should_create_unique_permalink
264
+ @m = MockModel . new
265
+ @m . title = 'foo'
266
+ @m . validate
267
+ assert_equal 'foo-2' , @m . permalink
268
+
269
+ @m . title = 'bar'
270
+ @m . permalink = nil
271
+ @m . validate
272
+ assert_equal 'bar-3' , @m . permalink
273
+ end
274
+
275
+ def test_should_create_unique_permalink_when_assigned_directly
244
276
@m = MockModel . new
245
277
@m . permalink = 'foo'
246
278
@m . validate
247
279
assert_equal 'foo-2' , @m . permalink
248
280
281
+ # should always check itself for uniqueness when not respond_to?(:permalink_changed?)
249
282
@m . permalink = 'bar'
250
283
@m . validate
251
284
assert_equal 'bar-3' , @m . permalink
@@ -265,6 +298,21 @@ def test_should_not_check_itself_for_unique_permalink
265
298
@m . validate
266
299
assert_equal 'bar-2' , @m . permalink
267
300
end
301
+
302
+ def test_should_check_itself_for_unique_permalink_if_permalink_field_changed
303
+ @m = PermalinkChangeableMockModel . new
304
+ @m . permalink_will_change!
305
+ @m . permalink = 'foo'
306
+ @m . validate
307
+ assert_equal 'foo-2' , @m . permalink
308
+ end
309
+
310
+ def test_should_not_check_itself_for_unique_permalink_if_permalink_field_not_changed
311
+ @m = PermalinkChangeableMockModel . new
312
+ @m . permalink = 'foo'
313
+ @m . validate
314
+ assert_equal 'foo' , @m . permalink
315
+ end
268
316
269
317
def test_should_create_unique_scoped_permalink
270
318
@m = ScopedModel . new
@@ -361,11 +409,12 @@ def test_should_not_update_permalink_unless_field_changed
361
409
assert_equal 'unchanged' , @m . read_attribute ( :permalink )
362
410
end
363
411
364
- def test_should_update_permalink_if_field_changed
365
- @m = OverrideModel . new
412
+ def test_should_not_update_permalink_without_update_set_even_if_field_changed
413
+ @m = ChangedWithoutUpdateModel . new
366
414
@m . title = 'the permalink'
415
+ @m . permalink = 'unchanged'
367
416
@m . validate
368
- assert_equal 'the-permalink ' , @m . read_attribute ( :permalink )
417
+ assert_equal 'unchanged ' , @m . read_attribute ( :permalink )
369
418
end
370
419
371
420
def test_should_update_permalink_if_changed_method_does_not_exist
@@ -391,7 +440,7 @@ def test_should_update_permalink_if_the_existing_permalink_is_blank
391
440
assert_equal 'the-permalink' , @m . read_attribute ( :permalink )
392
441
end
393
442
394
- def test_should_update_permalink_if_the_title_is_nil
443
+ def test_should_assign_a_random_permalink_if_the_title_is_nil
395
444
@m = NoChangeModel . new
396
445
@m . title = nil
397
446
@m . validate
@@ -400,7 +449,7 @@ def test_should_update_permalink_if_the_title_is_nil
400
449
end
401
450
402
451
def test_should_update_permalink_the_first_time_the_title_is_set
403
- @m = ChangedModel . new
452
+ @m = ChangedWithoutUpdateModel . new
404
453
@m . title = "old title"
405
454
@m . validate
406
455
assert_equal "old-title" , @m . read_attribute ( :permalink )
@@ -410,8 +459,8 @@ def test_should_update_permalink_the_first_time_the_title_is_set
410
459
end
411
460
412
461
def test_should_not_update_permalink_if_already_set_even_if_title_changed
413
- @m = ChangedModel . new
414
- @m . permalink = "old- permalink"
462
+ @m = ChangedWithoutUpdateModel . new
463
+ @m . permalink = "old permalink"
415
464
@m . title = "new title"
416
465
@m . validate
417
466
assert_equal "old-permalink" , @m . read_attribute ( :permalink )
0 commit comments