| 24 | | class ListTest < Test::Unit::TestCase |
|---|
| 25 | | fixtures :mixins |
|---|
| 26 | | |
|---|
| 27 | | def test_reordering |
|---|
| 28 | | assert_equal mixins(:list_1, :list_2, :list_3, :list_4), |
|---|
| 29 | | ListMixin.find(:all, :conditions => 'parent_id = 5', :order => 'pos') |
|---|
| 30 | | |
|---|
| 31 | | mixins(:list_2).move_lower |
|---|
| 32 | | |
|---|
| 33 | | assert_equal mixins(:list_1, :list_3, :list_2, :list_4), |
|---|
| 34 | | ListMixin.find(:all, :conditions => 'parent_id = 5', :order => 'pos') |
|---|
| 35 | | |
|---|
| 36 | | mixins(:list_2).move_higher |
|---|
| 37 | | |
|---|
| 38 | | assert_equal mixins(:list_1, :list_2, :list_3, :list_4), |
|---|
| 39 | | ListMixin.find(:all, :conditions => 'parent_id = 5', :order => 'pos') |
|---|
| 40 | | |
|---|
| 41 | | mixins(:list_1).move_to_bottom |
|---|
| 42 | | |
|---|
| 43 | | assert_equal mixins(:list_2, :list_3, :list_4, :list_1), |
|---|
| 44 | | ListMixin.find(:all, :conditions => 'parent_id = 5', :order => 'pos') |
|---|
| 45 | | |
|---|
| 46 | | mixins(:list_1).move_to_top |
|---|
| 47 | | |
|---|
| 48 | | assert_equal mixins(:list_1, :list_2, :list_3, :list_4), |
|---|
| 49 | | ListMixin.find(:all, :conditions => 'parent_id = 5', :order => 'pos') |
|---|
| 50 | | |
|---|
| 51 | | |
|---|
| 52 | | mixins(:list_2).move_to_bottom |
|---|
| 53 | | |
|---|
| 54 | | assert_equal mixins(:list_1, :list_3, :list_4, :list_2), |
|---|
| 55 | | ListMixin.find(:all, :conditions => 'parent_id = 5', :order => 'pos') |
|---|
| 56 | | |
|---|
| 57 | | mixins(:list_4).move_to_top |
|---|
| 58 | | |
|---|
| 59 | | assert_equal mixins(:list_4, :list_1, :list_3, :list_2), |
|---|
| 60 | | ListMixin.find(:all, :conditions => 'parent_id = 5', :order => 'pos') |
|---|
| 61 | | |
|---|
| 62 | | end |
|---|
| 63 | | |
|---|
| 64 | | def test_move_to_bottom_with_next_to_last_item |
|---|
| 65 | | assert_equal mixins(:list_1, :list_2, :list_3, :list_4), |
|---|
| 66 | | ListMixin.find(:all, :conditions => 'parent_id = 5', :order => 'pos') |
|---|
| 67 | | |
|---|
| 68 | | mixins(:list_3).move_to_bottom |
|---|
| 69 | | |
|---|
| 70 | | assert_equal mixins(:list_1, :list_2, :list_4, :list_3), |
|---|
| 71 | | ListMixin.find(:all, :conditions => 'parent_id = 5', :order => 'pos') |
|---|
| 72 | | end |
|---|
| 73 | | |
|---|
| 74 | | def test_next_prev |
|---|
| 75 | | assert_equal mixins(:list_2), mixins(:list_1).lower_item |
|---|
| 76 | | assert_nil mixins(:list_1).higher_item |
|---|
| 77 | | assert_equal mixins(:list_3), mixins(:list_4).higher_item |
|---|
| 78 | | assert_nil mixins(:list_4).lower_item |
|---|
| 79 | | end |
|---|
| 80 | | |
|---|
| 81 | | |
|---|
| 82 | | def test_injection |
|---|
| 83 | | item = ListMixin.new("parent_id"=>1) |
|---|
| 84 | | assert_equal "parent_id = 1", item.scope_condition |
|---|
| 85 | | assert_equal "pos", item.position_column |
|---|
| 86 | | end |
|---|
| 87 | | |
|---|
| 88 | | def test_insert |
|---|
| 89 | | new = ListMixin.create("parent_id"=>20) |
|---|
| 90 | | assert_equal 1, new.pos |
|---|
| 91 | | assert new.first? |
|---|
| 92 | | assert new.last? |
|---|
| 93 | | |
|---|
| 94 | | new = ListMixin.create("parent_id"=>20) |
|---|
| 95 | | assert_equal 2, new.pos |
|---|
| 96 | | assert !new.first? |
|---|
| 97 | | assert new.last? |
|---|
| 98 | | |
|---|
| 99 | | new = ListMixin.create("parent_id"=>20) |
|---|
| 100 | | assert_equal 3, new.pos |
|---|
| 101 | | assert !new.first? |
|---|
| 102 | | assert new.last? |
|---|
| 103 | | |
|---|
| 104 | | new = ListMixin.create("parent_id"=>0) |
|---|
| 105 | | assert_equal 1, new.pos |
|---|
| 106 | | assert new.first? |
|---|
| 107 | | assert new.last? |
|---|
| 108 | | end |
|---|
| 109 | | |
|---|
| 110 | | def test_insert_at |
|---|
| 111 | | new = ListMixin.create("parent_id" => 20) |
|---|
| 112 | | assert_equal 1, new.pos |
|---|
| 113 | | |
|---|
| 114 | | new = ListMixin.create("parent_id" => 20) |
|---|
| 115 | | assert_equal 2, new.pos |
|---|
| 116 | | |
|---|
| 117 | | new = ListMixin.create("parent_id" => 20) |
|---|
| 118 | | assert_equal 3, new.pos |
|---|
| 119 | | |
|---|
| 120 | | new4 = ListMixin.create("parent_id" => 20) |
|---|
| 121 | | assert_equal 4, new4.pos |
|---|
| 122 | | |
|---|
| 123 | | new4.insert_at(3) |
|---|
| 124 | | assert_equal 3, new4.pos |
|---|
| 125 | | |
|---|
| 126 | | new.reload |
|---|
| 127 | | assert_equal 4, new.pos |
|---|
| 128 | | |
|---|
| 129 | | new.insert_at(2) |
|---|
| 130 | | assert_equal 2, new.pos |
|---|
| 131 | | |
|---|
| 132 | | new4.reload |
|---|
| 133 | | assert_equal 4, new4.pos |
|---|
| 134 | | |
|---|
| 135 | | new5 = ListMixin.create("parent_id" => 20) |
|---|
| 136 | | assert_equal 5, new5.pos |
|---|
| 137 | | |
|---|
| 138 | | new5.insert_at(1) |
|---|
| 139 | | assert_equal 1, new5.pos |
|---|
| 140 | | |
|---|
| 141 | | new4.reload |
|---|
| 142 | | assert_equal 5, new4.pos |
|---|
| 143 | | end |
|---|
| 144 | | |
|---|
| 145 | | def test_delete_middle |
|---|
| 146 | | assert_equal mixins(:list_1, :list_2, :list_3, :list_4), |
|---|
| 147 | | ListMixin.find(:all, :conditions => 'parent_id = 5', :order => 'pos') |
|---|
| 148 | | |
|---|
| 149 | | mixins(:list_2).destroy |
|---|
| 150 | | |
|---|
| 151 | | assert_equal mixins(:list_1, :list_3, :list_4, :reload), |
|---|
| 152 | | ListMixin.find(:all, :conditions => 'parent_id = 5', :order => 'pos') |
|---|
| 153 | | |
|---|
| 154 | | assert_equal 1, mixins(:list_1).pos |
|---|
| 155 | | assert_equal 2, mixins(:list_3).pos |
|---|
| 156 | | assert_equal 3, mixins(:list_4).pos |
|---|
| 157 | | |
|---|
| 158 | | mixins(:list_1).destroy |
|---|
| 159 | | |
|---|
| 160 | | assert_equal mixins(:list_3, :list_4, :reload), |
|---|
| 161 | | ListMixin.find(:all, :conditions => 'parent_id = 5', :order => 'pos') |
|---|
| 162 | | |
|---|
| 163 | | assert_equal 1, mixins(:list_3).pos |
|---|
| 164 | | assert_equal 2, mixins(:list_4).pos |
|---|
| 165 | | |
|---|
| 166 | | end |
|---|
| 167 | | |
|---|
| 168 | | def test_with_string_based_scope |
|---|
| 169 | | new = ListWithStringScopeMixin.create("parent_id"=>500) |
|---|
| 170 | | assert_equal 1, new.pos |
|---|
| 171 | | assert new.first? |
|---|
| 172 | | assert new.last? |
|---|
| 173 | | end |
|---|
| 174 | | |
|---|
| 175 | | def test_nil_scope |
|---|
| 176 | | new1, new2, new3 = ListMixin.create, ListMixin.create, ListMixin.create |
|---|
| 177 | | new2.move_higher |
|---|
| 178 | | assert_equal [new2, new1, new3], ListMixin.find(:all, :conditions => 'parent_id IS NULL', :order => 'pos') |
|---|
| 179 | | end |
|---|
| 180 | | |
|---|
| 181 | | end |
|---|
| 342 | | class ListSubTest < Test::Unit::TestCase |
|---|
| 343 | | fixtures :mixins |
|---|
| 344 | | |
|---|
| 345 | | def test_reordering |
|---|
| 346 | | assert_equal mixins(:list_sub_1, :list_sub_2, :list_sub_3, :list_sub_4), |
|---|
| 347 | | ListMixin.find(:all, :conditions => 'parent_id = 5000', :order => 'pos') |
|---|
| 348 | | |
|---|
| 349 | | mixins(:list_sub_2).move_lower |
|---|
| 350 | | |
|---|
| 351 | | assert_equal mixins(:list_sub_1, :list_sub_3, :list_sub_2, :list_sub_4), |
|---|
| 352 | | ListMixin.find(:all, :conditions => 'parent_id = 5000', :order => 'pos') |
|---|
| 353 | | |
|---|
| 354 | | mixins(:list_sub_2).move_higher |
|---|
| 355 | | |
|---|
| 356 | | assert_equal mixins(:list_sub_1, :list_sub_2, :list_sub_3, :list_sub_4), |
|---|
| 357 | | ListMixin.find(:all, :conditions => 'parent_id = 5000', :order => 'pos') |
|---|
| 358 | | |
|---|
| 359 | | mixins(:list_sub_1).move_to_bottom |
|---|
| 360 | | |
|---|
| 361 | | assert_equal mixins(:list_sub_2, :list_sub_3, :list_sub_4, :list_sub_1), |
|---|
| 362 | | ListMixin.find(:all, :conditions => 'parent_id = 5000', :order => 'pos') |
|---|
| 363 | | |
|---|
| 364 | | mixins(:list_sub_1).move_to_top |
|---|
| 365 | | |
|---|
| 366 | | assert_equal mixins(:list_sub_1, :list_sub_2, :list_sub_3, :list_sub_4), |
|---|
| 367 | | ListMixin.find(:all, :conditions => 'parent_id = 5000', :order => 'pos') |
|---|
| 370 | | mixins(:list_sub_2).move_to_bottom |
|---|
| 371 | | |
|---|
| 372 | | assert_equal mixins(:list_sub_1, :list_sub_3, :list_sub_4, :list_sub_2), |
|---|
| 373 | | ListMixin.find(:all, :conditions => 'parent_id = 5000', :order => 'pos') |
|---|
| 374 | | |
|---|
| 375 | | mixins(:list_sub_4).move_to_top |
|---|
| 376 | | |
|---|
| 377 | | assert_equal mixins(:list_sub_4, :list_sub_1, :list_sub_3, :list_sub_2), |
|---|
| 378 | | ListMixin.find(:all, :conditions => 'parent_id = 5000', :order => 'pos') |
|---|
| 379 | | |
|---|
| 380 | | end |
|---|
| 381 | | |
|---|
| 382 | | def test_move_to_bottom_with_next_to_last_item |
|---|
| 383 | | assert_equal mixins(:list_sub_1, :list_sub_2, :list_sub_3, :list_sub_4), |
|---|
| 384 | | ListMixin.find(:all, :conditions => 'parent_id = 5000', :order => 'pos') |
|---|
| 385 | | |
|---|
| 386 | | mixins(:list_sub_3).move_to_bottom |
|---|
| 387 | | |
|---|
| 388 | | assert_equal mixins(:list_sub_1, :list_sub_2, :list_sub_4, :list_sub_3), |
|---|
| 389 | | ListMixin.find(:all, :conditions => 'parent_id = 5000', :order => 'pos') |
|---|
| 390 | | end |
|---|
| 391 | | |
|---|
| 392 | | def test_next_prev |
|---|
| 393 | | assert_equal mixins(:list_sub_2), mixins(:list_sub_1).lower_item |
|---|
| 394 | | assert_nil mixins(:list_sub_1).higher_item |
|---|
| 395 | | assert_equal mixins(:list_sub_3), mixins(:list_sub_4).higher_item |
|---|
| 396 | | assert_nil mixins(:list_sub_4).lower_item |
|---|
| 397 | | end |
|---|
| 398 | | |
|---|
| 399 | | |
|---|
| 400 | | def test_injection |
|---|
| 401 | | item = ListMixin.new("parent_id"=>1) |
|---|
| 402 | | assert_equal "parent_id = 1", item.scope_condition |
|---|
| 403 | | assert_equal "pos", item.position_column |
|---|
| 404 | | end |
|---|
| 405 | | |
|---|
| 406 | | |
|---|
| 407 | | def test_insert_at |
|---|
| 408 | | new = ListMixin.create("parent_id" => 20) |
|---|
| 409 | | assert_equal 1, new.pos |
|---|
| 410 | | |
|---|
| 411 | | new = ListMixinSub1.create("parent_id" => 20) |
|---|
| 412 | | assert_equal 2, new.pos |
|---|
| 413 | | |
|---|
| 414 | | new = ListMixinSub2.create("parent_id" => 20) |
|---|
| 415 | | assert_equal 3, new.pos |
|---|
| 416 | | |
|---|
| 417 | | new4 = ListMixin.create("parent_id" => 20) |
|---|
| 418 | | assert_equal 4, new4.pos |
|---|
| 419 | | |
|---|
| 420 | | new4.insert_at(3) |
|---|
| 421 | | assert_equal 3, new4.pos |
|---|
| 422 | | |
|---|
| 423 | | new.reload |
|---|
| 424 | | assert_equal 4, new.pos |
|---|
| 425 | | |
|---|
| 426 | | new.insert_at(2) |
|---|
| 427 | | assert_equal 2, new.pos |
|---|
| 428 | | |
|---|
| 429 | | new4.reload |
|---|
| 430 | | assert_equal 4, new4.pos |
|---|
| 431 | | |
|---|
| 432 | | new5 = ListMixinSub1.create("parent_id" => 20) |
|---|
| 433 | | assert_equal 5, new5.pos |
|---|
| 434 | | |
|---|
| 435 | | new5.insert_at(1) |
|---|
| 436 | | assert_equal 1, new5.pos |
|---|
| 437 | | |
|---|
| 438 | | new4.reload |
|---|
| 439 | | assert_equal 5, new4.pos |
|---|
| 440 | | end |
|---|
| 441 | | |
|---|
| 442 | | def test_delete_middle |
|---|
| 443 | | assert_equal mixins(:list_sub_1, :list_sub_2, :list_sub_3, :list_sub_4), |
|---|
| 444 | | ListMixin.find(:all, :conditions => 'parent_id = 5000', :order => 'pos') |
|---|
| 445 | | |
|---|
| 446 | | mixins(:list_sub_2).destroy |
|---|
| 447 | | |
|---|
| 448 | | assert_equal mixins(:list_sub_1, :list_sub_3, :list_sub_4, :reload), |
|---|
| 449 | | ListMixin.find(:all, :conditions => 'parent_id = 5000', :order => 'pos') |
|---|
| 450 | | |
|---|
| 451 | | assert_equal 1, mixins(:list_sub_1).pos |
|---|
| 452 | | assert_equal 2, mixins(:list_sub_3).pos |
|---|
| 453 | | assert_equal 3, mixins(:list_sub_4).pos |
|---|
| 454 | | |
|---|
| 455 | | mixins(:list_sub_1).destroy |
|---|
| 456 | | |
|---|
| 457 | | assert_equal mixins(:list_sub_3, :list_sub_4, :reload), |
|---|
| 458 | | ListMixin.find(:all, :conditions => 'parent_id = 5000', :order => 'pos') |
|---|
| 459 | | |
|---|
| 460 | | assert_equal 1, mixins(:list_sub_3).pos |
|---|
| 461 | | assert_equal 2, mixins(:list_sub_4).pos |
|---|
| 462 | | |
|---|
| 463 | | end |
|---|
| 464 | | |
|---|
| 465 | | end |
|---|
| 466 | | |
|---|