Issues with move_higher and move_lower

I made sure that my MessageBoards would acts_as_list for Forum:


class Forum < ActiveRecord::Base
#This is a superset of message boards
has_many :message_boards, :order => ‘position’, :dependent
=> :destroy

end

class MessageBoard < ActiveRecord::Base
#This is a subset of forums
belongs_to :forum

#This causes MessageBoard to act as a list
#it uses order as its index
acts_as_list :scope => :forum_id

end

But for some reason, the unit tests file indicates several failures:


#in forum_test.rb
def test_board_up
forum = Forum.new(:title => ‘basic’)
assert forum.valid?, “forum is invalid, expect more failures”
assert_equal forum.title, ‘basic’
board = []
board[0] = forum.message_boards.build(:title => ‘#1’, :description
=> ‘one’
)
board[2] = forum.message_boards.build(:title => ‘#3’, :description
=> ‘thre
e’)
board[1] = forum.message_boards.build(:title => ‘#2’, :description
=> ‘two’
)
forum.message_boards[2].move_lower
forum.save
board_temp = forum.message_boards
board_temp.each{|b| puts b.title}
for num in 0…2
assert_equal board_temp[num].title, board[num].title
assert_equal board_temp[num].description, board[num].description
end
forum.destroy
end

def test_board_down
forum = Forum.new(:title => ‘basic’)
assert forum.valid?, “forum is invalid, expect more failures”
assert_equal forum.title, ‘basic’
board = []
board[0] = forum.message_boards.build(:title => ‘#1’, :description
=> ‘one’
)
board[2] = forum.message_boards.build(:title => ‘#3’, :description
=> ‘thre
e’)
board[1] = forum.message_boards.build(:title => ‘#2’, :description
=> ‘two’
)
board[2].move_higher
forum.save
board_temp = forum.message_boards
board_temp.each{|b| puts b.title}
for num in 0…2
assert_equal board_temp[num].title, board[num].title
assert_equal board_temp[num].description, board[num].description
end
forum.destroy
end

Loaded suite forum_test
Started
.#1
#3
#2
F.#1
#3
#2
F…
Finished in 0.597854 seconds.

  1. Failure:
    test_board_down(ForumTest)
    [forum_test.rb:133:in test_board_down' forum_test.rb:132:ineach’
    forum_test.rb:132:in `test_board_down’]:
    <"#3"> expected but was
    <"#2">.

  2. Failure:
    test_board_up(ForumTest)
    [forum_test.rb:114:in test_board_up' forum_test.rb:113:ineach’
    forum_test.rb:113:in `test_board_up’]:
    <"#3"> expected but was
    <"#2">.

10 tests, 43 assertions, 2 failures, 0 errors

Why doesn’t move_higher and move_lower affect forum.message_boards in
any way?

I attempted to save forum, move up/down the board, and save the forum
again, but that doesn’t seem to work, either…

Sorry, I’m really desperate on this. Can someone help me out?

Does move_higher save it when it does it? Perhaps try calling save after
doing the move_higher.

On Jan 9, 2008 7:57 AM, Taro [email protected] wrote:

Sorry, I’m really desperate on this. Can someone help me out?


Ryan B.

Feel free to add me to MSN and/or GTalk as this email.

I’ve heard move_higher and move_lower doesn’t save. Which isn’t
exactly the problem with this test as I’ll explain later.

I’ve noticed a slight flaw in my test, so revised it to get a similar
results as before. As one might notice in the test code, forum.save
doesn’t seem to have any effect on saving changes of move_higher/
move_lower (or, move_higher/lower does nothing…):

def test_board_up
forum = Forum.new(:title => ‘basic’)
assert forum.valid?, “forum is invalid, expect more failures”
assert_equal forum.title, ‘basic’
board = []
#initialize three boards in this order: #1, #3, #2
#board array holds = [#1, #2, #3]
board[0] = forum.message_boards.build(:title => ‘#1’,
:description => ‘one’)
board[2] = forum.message_boards.build(:title => ‘#3’,
:description => ‘three’)
board[1] = forum.message_boards.build(:title => ‘#2’,
:description => ‘two’)
#save, just in case
forum.save

move the index #2 lower (so that it’s less than #3)

forum.message_boards[2].move_lower

and save.

forum.save
board_temp = forum.message_boards
board_temp.each{|b| puts "\ntest_board_up order #{b.title}"}
for num in 0..2
  assert_equal board_temp[num].title, board[num].title
  assert_equal board_temp[num].description, board[num].description
end
forum.destroy

end

def test_board_down
forum = Forum.new(:title => ‘basic’)
assert forum.valid?, “forum is invalid, expect more failures”
assert_equal forum.title, ‘basic’
board = []
#initialize three boards in this order: #1, #3, #2
#board array holds = [#1, #2, #3]
board[0] = forum.message_boards.build(:title => ‘#1’,
:description => ‘one’)
board[2] = forum.message_boards.build(:title => ‘#3’,
:description => ‘three’)
board[1] = forum.message_boards.build(:title => ‘#2’,
:description => ‘two’)
#save, just in case
forum.save

move the index #3 higher (so that it’s greater than #2)

forum.message_boards[1].move_higher

and save.

forum.save
board_temp = forum.message_boards
board_temp.each{|b| puts "\ntest_board_down order #{b.title}"}
for num in 0..2
  assert_equal board_temp[num].title, board[num].title
  assert_equal board_temp[num].description, board[num].description
end
forum.destroy

end

Loaded suite forum_test
Started
.
test_board_down order #1

test_board_down order #3

test_board_down order #2
F.
test_board_up order #1

test_board_up order #3

test_board_up order #2
F…
Finished in 0.615307 seconds.

  1. Failure:
    test_board_down(ForumTest)
    [forum_test.rb:152:in test_board_down' forum_test.rb:151:ineach’
    forum_test.rb:151:in `test_board_down’]:
    <"#3"> expected but was
    <"#2">.

  2. Failure:
    test_board_up(ForumTest)
    [forum_test.rb:125:in test_board_up' forum_test.rb:124:ineach’
    forum_test.rb:124:in `test_board_up’]:
    <"#3"> expected but was
    <"#2">.

10 tests, 43 assertions, 2 failures, 0 errors