messages_controller_test.rb
219 lines
| 7.0 KiB
| text/x-ruby
|
RubyLexer
|
r6473 | # Redmine - project management software | ||
|
r14856 | # Copyright (C) 2006-2016 Jean-Philippe Lang | ||
|
r913 | # | ||
# This program is free software; you can redistribute it and/or | ||||
# modify it under the terms of the GNU General Public License | ||||
# as published by the Free Software Foundation; either version 2 | ||||
# of the License, or (at your option) any later version. | ||||
|
r6473 | # | ||
|
r913 | # This program is distributed in the hope that it will be useful, | ||
# but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||||
# GNU General Public License for more details. | ||||
|
r6473 | # | ||
|
r913 | # You should have received a copy of the GNU General Public License | ||
# along with this program; if not, write to the Free Software | ||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. | ||||
|
r4395 | require File.expand_path('../../test_helper', __FILE__) | ||
|
r913 | |||
|
r15279 | class MessagesControllerTest < Redmine::ControllerTest | ||
|
r14906 | fixtures :projects, :users, :email_addresses, :user_preferences, :members, :member_roles, :roles, :boards, :messages, :enabled_modules | ||
|
r6473 | |||
|
r913 | def setup | ||
User.current = nil | ||||
end | ||||
|
r6473 | |||
|
r913 | def test_show | ||
get :show, :board_id => 1, :id => 1 | ||||
assert_response :success | ||||
|
r15333 | |||
assert_select 'h2', :text => 'First post' | ||||
|
r913 | end | ||
|
r7842 | |||
def test_show_should_contain_reply_field_tags_for_quoting | ||||
@request.session[:user_id] = 2 | ||||
get :show, :board_id => 1, :id => 1 | ||||
assert_response :success | ||||
# tags required by MessagesController#quote | ||||
|
r13242 | assert_select 'input#message_subject' | ||
assert_select 'textarea#message_content' | ||||
assert_select 'div#reply' | ||||
|
r7842 | end | ||
|
r6473 | |||
|
r3259 | def test_show_with_pagination | ||
message = Message.find(1) | ||||
assert_difference 'Message.count', 30 do | ||||
|
r6473 | 30.times do | ||
|
r12348 | message.children << Message.new(:subject => 'Reply', | ||
:content => 'Reply body', | ||||
:author_id => 2, | ||||
:board_id => 1) | ||||
|
r3259 | end | ||
end | ||||
|
r15333 | reply_ids = message.children.map(&:id).sort | ||
get :show, :board_id => 1, :id => 1, :r => reply_ids.last | ||||
|
r3259 | assert_response :success | ||
|
r15333 | |||
assert_select 'a[href=?]', "/boards/1/topics/1?r=#{reply_ids.last}#message-#{reply_ids.last}" | ||||
assert_select 'a[href=?]', "/boards/1/topics/1?r=#{reply_ids.first}#message-#{reply_ids.first}", 0 | ||||
|
r3259 | end | ||
|
r6473 | |||
|
r1771 | def test_show_with_reply_permission | ||
@request.session[:user_id] = 2 | ||||
get :show, :board_id => 1, :id => 1 | ||||
assert_response :success | ||||
|
r15333 | |||
|
r13242 | assert_select 'div#reply textarea#message_content' | ||
|
r1771 | end | ||
|
r6473 | |||
|
r974 | def test_show_message_not_found | ||
get :show, :board_id => 1, :id => 99999 | ||||
assert_response 404 | ||||
end | ||||
|
r6473 | |||
|
r11216 | def test_show_message_from_invalid_board_should_respond_with_404 | ||
get :show, :board_id => 999, :id => 1 | ||||
assert_response 404 | ||||
end | ||||
|
r974 | def test_get_new | ||
@request.session[:user_id] = 2 | ||||
get :new, :board_id => 1 | ||||
assert_response :success | ||||
|
r15333 | |||
assert_select 'input[name=?]', 'message[subject]' | ||||
|
r974 | end | ||
|
r10758 | |||
def test_get_new_with_invalid_board | ||||
@request.session[:user_id] = 2 | ||||
get :new, :board_id => 99 | ||||
assert_response 404 | ||||
end | ||||
|
r6473 | |||
|
r974 | def test_post_new | ||
@request.session[:user_id] = 2 | ||||
|
r1353 | ActionMailer::Base.deliveries.clear | ||
|
r6473 | |||
|
r9766 | with_settings :notified_events => %w(message_posted) do | ||
post :new, :board_id => 1, | ||||
|
r974 | :message => { :subject => 'Test created message', | ||
:content => 'Message body'} | ||||
|
r9766 | end | ||
|
r974 | message = Message.find_by_subject('Test created message') | ||
assert_not_nil message | ||||
|
r4293 | assert_redirected_to "/boards/1/topics/#{message.to_param}" | ||
|
r974 | assert_equal 'Message body', message.content | ||
assert_equal 2, message.author_id | ||||
assert_equal 1, message.board_id | ||||
|
r1353 | |||
mail = ActionMailer::Base.deliveries.last | ||||
|
r8871 | assert_not_nil mail | ||
|
r2301 | assert_equal "[#{message.board.project.name} - #{message.board.name} - msg#{message.root.id}] Test created message", mail.subject | ||
|
r8966 | assert_mail_body_match 'Message body', mail | ||
|
r1353 | # author | ||
assert mail.bcc.include?('jsmith@somenet.foo') | ||||
# project member | ||||
assert mail.bcc.include?('dlopper@somenet.foo') | ||||
|
r974 | end | ||
|
r6473 | |||
|
r974 | def test_get_edit | ||
@request.session[:user_id] = 2 | ||||
get :edit, :board_id => 1, :id => 1 | ||||
assert_response :success | ||||
|
r15333 | |||
assert_select 'input[name=?][value=?]', 'message[subject]', 'First post' | ||||
|
r974 | end | ||
|
r6473 | |||
|
r974 | def test_post_edit | ||
@request.session[:user_id] = 2 | ||||
post :edit, :board_id => 1, :id => 1, | ||||
:message => { :subject => 'New subject', | ||||
:content => 'New body'} | ||||
|
r4293 | assert_redirected_to '/boards/1/topics/1' | ||
|
r974 | message = Message.find(1) | ||
assert_equal 'New subject', message.subject | ||||
assert_equal 'New body', message.content | ||||
end | ||||
|
r6473 | |||
|
r9216 | def test_post_edit_sticky_and_locked | ||
@request.session[:user_id] = 2 | ||||
post :edit, :board_id => 1, :id => 1, | ||||
:message => { :subject => 'New subject', | ||||
:content => 'New body', | ||||
:locked => '1', | ||||
:sticky => '1'} | ||||
assert_redirected_to '/boards/1/topics/1' | ||||
message = Message.find(1) | ||||
assert_equal true, message.sticky? | ||||
assert_equal true, message.locked? | ||||
end | ||||
def test_post_edit_should_allow_to_change_board | ||||
@request.session[:user_id] = 2 | ||||
post :edit, :board_id => 1, :id => 1, | ||||
:message => { :subject => 'New subject', | ||||
:content => 'New body', | ||||
:board_id => 2} | ||||
assert_redirected_to '/boards/2/topics/1' | ||||
message = Message.find(1) | ||||
assert_equal Board.find(2), message.board | ||||
end | ||||
|
r913 | def test_reply | ||
@request.session[:user_id] = 2 | ||||
post :reply, :board_id => 1, :id => 1, :reply => { :content => 'This is a test reply', :subject => 'Test reply' } | ||||
|
r10701 | reply = Message.order('id DESC').first | ||
|
r4293 | assert_redirected_to "/boards/1/topics/1?r=#{reply.id}" | ||
|
r913 | assert Message.find_by_subject('Test reply') | ||
end | ||||
|
r6473 | |||
|
r974 | def test_destroy_topic | ||
@request.session[:user_id] = 2 | ||||
|
r9048 | assert_difference 'Message.count', -3 do | ||
post :destroy, :board_id => 1, :id => 1 | ||||
end | ||||
|
r4293 | assert_redirected_to '/projects/ecookbook/boards/1' | ||
|
r974 | assert_nil Message.find_by_id(1) | ||
end | ||||
|
r6473 | |||
|
r9048 | def test_destroy_reply | ||
@request.session[:user_id] = 2 | ||||
assert_difference 'Message.count', -1 do | ||||
post :destroy, :board_id => 1, :id => 2 | ||||
end | ||||
assert_redirected_to '/boards/1/topics/1?r=2' | ||||
assert_nil Message.find_by_id(2) | ||||
end | ||||
|
r1771 | def test_quote | ||
@request.session[:user_id] = 2 | ||||
xhr :get, :quote, :board_id => 1, :id => 3 | ||||
assert_response :success | ||||
|
r9870 | assert_equal 'text/javascript', response.content_type | ||
|
r15333 | |||
|
r9870 | assert_include 'RE: First post', response.body | ||
assert_include '> An other reply', response.body | ||||
|
r1771 | end | ||
|
r9048 | |||
def test_preview_new | ||||
@request.session[:user_id] = 2 | ||||
post :preview, | ||||
:board_id => 1, | ||||
:message => {:subject => "", :content => "Previewed text"} | ||||
assert_response :success | ||||
|
r15333 | assert_include 'Previewed text', response.body | ||
|
r9048 | end | ||
def test_preview_edit | ||||
@request.session[:user_id] = 2 | ||||
post :preview, | ||||
:id => 4, | ||||
:board_id => 1, | ||||
:message => {:subject => "", :content => "Previewed text"} | ||||
assert_response :success | ||||
|
r15333 | assert_include 'Previewed text', response.body | ||
|
r9048 | end | ||
|
r913 | end | ||