annotate test/unit/message_test.rb @ 1082:997f6d7738f7 bug_531

In repo controller entry action, show the page for the file even if it's binary (so user still has access to history etc links). This makes it possible to use the entry action as the default when a file is clicked on
author Chris Cannam <chris.cannam@soundsoftware.ac.uk>
date Thu, 22 Nov 2012 18:04:17 +0000
parents cbb26bc654de
children 433d4f72a19b
rev   line source
Chris@0 1 # Redmine - project management software
Chris@909 2 # Copyright (C) 2006-2011 Jean-Philippe Lang
Chris@0 3 #
Chris@0 4 # This program is free software; you can redistribute it and/or
Chris@0 5 # modify it under the terms of the GNU General Public License
Chris@0 6 # as published by the Free Software Foundation; either version 2
Chris@0 7 # of the License, or (at your option) any later version.
Chris@909 8 #
Chris@0 9 # This program is distributed in the hope that it will be useful,
Chris@0 10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
Chris@0 11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
Chris@0 12 # GNU General Public License for more details.
Chris@909 13 #
Chris@0 14 # You should have received a copy of the GNU General Public License
Chris@0 15 # along with this program; if not, write to the Free Software
Chris@0 16 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
Chris@0 17
Chris@119 18 require File.expand_path('../../test_helper', __FILE__)
Chris@0 19
Chris@0 20 class MessageTest < ActiveSupport::TestCase
Chris@0 21 fixtures :projects, :roles, :members, :member_roles, :boards, :messages, :users, :watchers
Chris@0 22
Chris@0 23 def setup
Chris@0 24 @board = Board.find(1)
Chris@0 25 @user = User.find(1)
Chris@0 26 end
Chris@909 27
Chris@0 28 def test_create
Chris@0 29 topics_count = @board.topics_count
Chris@0 30 messages_count = @board.messages_count
Chris@909 31
Chris@909 32 message = Message.new(:board => @board, :subject => 'Test message',
Chris@909 33 :content => 'Test message content',
Chris@909 34 :author => @user)
Chris@0 35 assert message.save
Chris@0 36 @board.reload
Chris@0 37 # topics count incremented
Chris@0 38 assert_equal topics_count+1, @board[:topics_count]
Chris@0 39 # messages count incremented
Chris@0 40 assert_equal messages_count+1, @board[:messages_count]
Chris@0 41 assert_equal message, @board.last_message
Chris@0 42 # author should be watching the message
Chris@0 43 assert message.watched_by?(@user)
Chris@0 44 end
Chris@909 45
Chris@0 46 def test_reply
Chris@0 47 topics_count = @board.topics_count
Chris@0 48 messages_count = @board.messages_count
Chris@0 49 @message = Message.find(1)
Chris@0 50 replies_count = @message.replies_count
Chris@909 51
Chris@0 52 reply_author = User.find(2)
Chris@909 53 reply = Message.new(:board => @board, :subject => 'Test reply',
Chris@909 54 :content => 'Test reply content',
Chris@909 55 :parent => @message, :author => reply_author)
Chris@0 56 assert reply.save
Chris@0 57 @board.reload
Chris@0 58 # same topics count
Chris@0 59 assert_equal topics_count, @board[:topics_count]
Chris@0 60 # messages count incremented
Chris@0 61 assert_equal messages_count+1, @board[:messages_count]
Chris@0 62 assert_equal reply, @board.last_message
Chris@0 63 @message.reload
Chris@0 64 # replies count incremented
Chris@0 65 assert_equal replies_count+1, @message[:replies_count]
Chris@0 66 assert_equal reply, @message.last_reply
Chris@0 67 # author should be watching the message
Chris@0 68 assert @message.watched_by?(reply_author)
Chris@0 69 end
Chris@909 70
Chris@909 71 def test_cannot_reply_to_locked_topic
Chris@909 72 topics_count = @board.topics_count
Chris@909 73 messages_count = @board.messages_count
Chris@909 74 @message = Message.find(1)
Chris@909 75 replies_count = @message.replies_count
Chris@909 76 assert_equal false, @message.locked
Chris@909 77 @message.locked = true
Chris@909 78 assert @message.save
Chris@909 79 assert_equal true, @message.locked
Chris@909 80
Chris@909 81 reply_author = User.find(2)
Chris@909 82 reply = Message.new(:board => @board, :subject => 'Test reply',
Chris@909 83 :content => 'Test reply content',
Chris@909 84 :parent => @message, :author => reply_author)
Chris@909 85 reply.save
Chris@909 86 assert_equal 1, reply.errors.count
Chris@909 87 end
Chris@909 88
Chris@0 89 def test_moving_message_should_update_counters
Chris@0 90 @message = Message.find(1)
Chris@0 91 assert_no_difference 'Message.count' do
Chris@0 92 # Previous board
Chris@0 93 assert_difference 'Board.find(1).topics_count', -1 do
Chris@0 94 assert_difference 'Board.find(1).messages_count', -(1 + @message.replies_count) do
Chris@0 95 # New board
Chris@0 96 assert_difference 'Board.find(2).topics_count' do
Chris@0 97 assert_difference 'Board.find(2).messages_count', (1 + @message.replies_count) do
Chris@0 98 @message.update_attributes(:board_id => 2)
Chris@0 99 end
Chris@0 100 end
Chris@0 101 end
Chris@0 102 end
Chris@0 103 end
Chris@0 104 end
Chris@909 105
Chris@0 106 def test_destroy_topic
Chris@0 107 message = Message.find(1)
Chris@0 108 board = message.board
Chris@909 109 topics_count, messages_count = board.topics_count, board.messages_count
Chris@909 110
Chris@0 111 assert_difference('Watcher.count', -1) do
Chris@0 112 assert message.destroy
Chris@0 113 end
Chris@0 114 board.reload
Chris@909 115
Chris@0 116 # Replies deleted
Chris@0 117 assert Message.find_all_by_parent_id(1).empty?
Chris@0 118 # Checks counters
Chris@0 119 assert_equal topics_count - 1, board.topics_count
Chris@0 120 assert_equal messages_count - 3, board.messages_count
Chris@0 121 # Watchers removed
Chris@0 122 end
Chris@909 123
Chris@0 124 def test_destroy_reply
Chris@0 125 message = Message.find(5)
Chris@0 126 board = message.board
Chris@909 127 topics_count, messages_count = board.topics_count, board.messages_count
Chris@0 128 assert message.destroy
Chris@0 129 board.reload
Chris@0 130
Chris@0 131 # Checks counters
Chris@0 132 assert_equal topics_count, board.topics_count
Chris@0 133 assert_equal messages_count - 1, board.messages_count
Chris@0 134 end
Chris@909 135
Chris@0 136 def test_editable_by
Chris@0 137 message = Message.find(6)
Chris@0 138 author = message.author
Chris@0 139 assert message.editable_by?(author)
Chris@909 140
Chris@0 141 author.roles_for_project(message.project).first.remove_permission!(:edit_own_messages)
Chris@0 142 assert !message.reload.editable_by?(author.reload)
Chris@0 143 end
Chris@909 144
Chris@0 145 def test_destroyable_by
Chris@0 146 message = Message.find(6)
Chris@0 147 author = message.author
Chris@0 148 assert message.destroyable_by?(author)
Chris@909 149
Chris@0 150 author.roles_for_project(message.project).first.remove_permission!(:delete_own_messages)
Chris@0 151 assert !message.reload.destroyable_by?(author.reload)
Chris@0 152 end
Chris@909 153
Chris@0 154 def test_set_sticky
Chris@0 155 message = Message.new
Chris@0 156 assert_equal 0, message.sticky
Chris@0 157 message.sticky = nil
Chris@0 158 assert_equal 0, message.sticky
Chris@0 159 message.sticky = false
Chris@0 160 assert_equal 0, message.sticky
Chris@0 161 message.sticky = true
Chris@0 162 assert_equal 1, message.sticky
Chris@0 163 message.sticky = '0'
Chris@0 164 assert_equal 0, message.sticky
Chris@0 165 message.sticky = '1'
Chris@0 166 assert_equal 1, message.sticky
Chris@0 167 end
Chris@0 168 end