3 class IssuesControllerTest < ActionController::TestCase
 
   4   fixtures :users,:user_roles
 
   6   def test_new_issue_without_login
 
   7     # Test creation of a new issue and a new report without logging in
 
   8     get :new, {reportable_id: 1, reportable_type: "DiaryEntry", reported_user_id: 1}
 
   9     assert_response :redirect
 
  10     assert_redirected_to login_path(:referer => new_issue_path(:reportable_id=>1, :reportable_type=>"DiaryEntry",:reported_user_id=> 1))
 
  13   def test_new_issue_after_login
 
  14     # Test creation of a new issue and a new report
 
  17     session[:user] = users(:normal_user).id
 
  19     get :new, {reportable_id: 1, reportable_type: "DiaryEntry", reported_user_id: 1}
 
  20     assert_response :success
 
  21     assert_difference "Issue.count",1 do 
 
  22       details = "Details of a report"
 
  23       post :create, { :report => { :details => details},
 
  24                       :issue => { reportable_id: 1, reportable_type: "DiaryEntry", reported_user_id: 1} }
 
  26     assert_response :redirect
 
  30     # Test creation of a new report for an existing issue
 
  33     session[:user] = users(:normal_user).id
 
  35     get :new, {reportable_id: 1, reportable_type: "DiaryEntry", reported_user_id: 1}
 
  36     assert_response :success
 
  37     assert_difference "Issue.count",1 do 
 
  38       details = "Details of a report"
 
  39       post :create, { :report => { :details => details},
 
  40                       :issue => { reportable_id: 1, reportable_type: "DiaryEntry", reported_user_id: 1} }
 
  42     assert_response :redirect
 
  44     get :new, {reportable_id: 1, reportable_type: "DiaryEntry", reported_user_id: 1}
 
  45     assert_response :success
 
  46     assert_no_difference "Issue.count" do
 
  47       details = "Details of another report under the same issue"
 
  48       post :create, { :report => { :details => details},
 
  49                       :issue => { reportable_id: 1, reportable_type: "DiaryEntry", reported_user_id: 1} }
 
  51     assert_response :redirect
 
  52     assert_equal Issue.find_by_reportable_id_and_reportable_type(1,"DiaryEntry").reports.count,2
 
  55   def test_change_status_by_normal_user
 
  56     # Login as normal user
 
  57     session[:user] = users(:normal_user).id
 
  61     get :new, {reportable_id: 1, reportable_type: "DiaryEntry", reported_user_id: 1}
 
  62     assert_response :success
 
  63     assert_difference "Issue.count",1 do 
 
  64       details = "Details of a report"
 
  65       post :create, { :report => { :details => details},
 
  66                       :issue => { reportable_id: 1, reportable_type: "DiaryEntry", reported_user_id: 1} }
 
  68     assert_response :redirect
 
  70     get :resolve, id: Issue.find_by_reportable_id_and_reportable_type(1,"DiaryEntry").id
 
  71     assert_response :redirect
 
  72     assert_redirected_to root_path
 
  75   def test_change_status_by_admin
 
  76     # Login as normal user
 
  77     session[:user] = users(:normal_user).id
 
  81     get :new, {reportable_id: 1, reportable_type: "DiaryEntry", reported_user_id: 1}
 
  82     assert_response :success
 
  83     assert_difference "Issue.count",1 do 
 
  84       details = "Details of a report"
 
  85       post :create, { :report => { :details => details},
 
  86                       :issue => { reportable_id: 1, reportable_type: "DiaryEntry", reported_user_id: 1} }
 
  88     assert_response :redirect
 
  90     # Login as administrator
 
  91     session[:user] = users(:administrator_user).id
 
  94     get :resolve, id: Issue.find_by_reportable_id_and_reportable_type(1,"DiaryEntry").id
 
  95     assert_equal Issue.find_by_reportable_id_and_reportable_type(1,"DiaryEntry").resolved?, true
 
  96     assert_response :redirect
 
  99     get :reopen, id: Issue.find_by_reportable_id_and_reportable_type(1,"DiaryEntry").id
 
 100     assert_equal Issue.find_by_reportable_id_and_reportable_type(1,"DiaryEntry").open?, true
 
 101     assert_response :redirect
 
 104     get :ignore, id: Issue.find_by_reportable_id_and_reportable_type(1,"DiaryEntry").id
 
 105     assert_equal Issue.find_by_reportable_id_and_reportable_type(1,"DiaryEntry").ignored?, true
 
 106     assert_response :redirect