Get tests passing. Use factories instead of fixtures.

This commit is contained in:
Andy Allan 2017-07-12 11:38:50 +01:00
parent dbd88d893f
commit 6f375ef493
6 changed files with 88 additions and 151 deletions

View file

@ -54,7 +54,7 @@ module IssuesHelper
arrow = direction == "desc" ? ["25B2".hex].pack("U") : ["25BC".hex].pack("U")
title += arrow
end
link_to title, params.merge(:sort => column, :direction => direction)
# FIXME: link_to title, params.merge(:sort => column, :direction => direction)
end
def report_type(report_class)

View file

@ -1,8 +1,6 @@
require "test_helper"
class IssuesControllerTest < ActionController::TestCase
fixtures :users, :user_roles, :issues
teardown do
# cleanup any emails set off by the test
ActionMailer::Base.deliveries.clear
@ -15,251 +13,232 @@ class IssuesControllerTest < ActionController::TestCase
assert_redirected_to login_path(:referer => issues_path)
# Access issues_path as normal user
session[:user] = users(:normal_user).id
session[:user] = create(:user).id
get :index
assert_response :redirect
assert_redirected_to root_path
# Access issues_path by admin
session[:user] = users(:administrator_user).id
session[:user] = create(:administrator_user).id
get :index
# this is redirected because there are no issues?!
assert_response :redirect
assert_redirected_to issues_path
# Access issues_path by moderator
session[:user] = users(:moderator_user).id
session[:user] = create(:moderator_user).id
get :index
# this is redirected because there are no issues?!
assert_response :redirect
assert_redirected_to issues_path
# clear session
session.delete(:user)
end
def test_new_issue_without_login
# Test creation of a new issue and a new report without logging in
get :new, :reportable_id => 1, :reportable_type => "User", :reported_user_id => 1
get :new, :params => { :reportable_id => 1, :reportable_type => "User", :reported_user_id => 1 }
assert_response :redirect
assert_redirected_to login_path(:referer => new_issue_path(:reportable_id => 1, :reportable_type => "User", :reported_user_id => 1))
end
def test_new_issue_after_login
# Test creation of a new issue and a new report
target_user = create(:user)
# Login
session[:user] = users(:normal_user).id
session[:user] = create(:user).id
assert_equal Issue.count, 0
# Create an Issue and a report
get :new, :reportable_id => 1, :reportable_type => "User", :reported_user_id => 2
get :new, :params => { :reportable_id => target_user.id, :reportable_type => "User", :reported_user_id => target_user.id }
assert_response :success
assert_difference "Issue.count", 1 do
details = "Details of a report"
post :create,
:params => {
:report => { :details => details },
:report_type => "[OFFENSIVE]",
:issue => { :reportable_id => 1, :reportable_type => "User", :reported_user_id => 2 }
:issue => { :reportable_id => target_user.id, :reportable_type => "User", :reported_user_id => target_user.id }
}
end
assert_equal Issue.count, 1
assert_response :redirect
assert_redirected_to root_path
# clear session
session.delete(:user)
end
def test_new_report_with_incomplete_details
# Test creation of a new issue and a new report
target_user = create(:user)
# Login
session[:user] = users(:normal_user).id
session[:user] = create(:user).id
assert_equal Issue.count, 0
# Create an Issue and a report
get :new, :reportable_id => 1, :reportable_type => "User", :reported_user_id => 2
get :new, :params => { :reportable_id => target_user.id, :reportable_type => "User", :reported_user_id => target_user.id }
assert_response :success
assert_difference "Issue.count", 1 do
details = "Details of a report"
post :create,
:params => {
:report => { :details => details },
:report_type => "[OFFENSIVE]",
:issue => { :reportable_id => 1, :reportable_type => "User", :reported_user_id => 2 }
:issue => { :reportable_id => target_user.id, :reportable_type => "User", :reported_user_id => target_user.id }
}
end
assert_equal Issue.count, 1
assert_response :redirect
assert_redirected_to root_path
get :new, :reportable_id => 1, :reportable_type => "User", :reported_user_id => 2
get :new, :params => { :reportable_id => target_user.id, :reportable_type => "User", :reported_user_id => target_user.id }
assert_response :success
# Report without report_type
assert_no_difference "Issue.count" do
details = "Details of another report under the same issue"
post :create,
:params => {
:report => { :details => details },
:issue => { :reportable_id => 1, :reportable_type => "User", :reported_user_id => 2 }
:issue => { :reportable_id => target_user.id, :reportable_type => "User", :reported_user_id => target_user.id }
}
end
assert_response :redirect
assert_equal Issue.find_by_reportable_id_and_reportable_type(1, "User").reports.count, 1
assert_equal Issue.find_by_reportable_id_and_reportable_type(target_user.id, "User").reports.count, 1
# Report without details
assert_no_difference "Issue.count" do
post :create,
:params => {
:report_type => "[OFFENSIVE]",
:issue => { :reportable_id => 1, :reportable_type => "User", :reported_user_id => 2 }
}
end
assert_response :redirect
assert_equal Issue.find_by_reportable_id_and_reportable_type(1, "User").reports.count, 1
# clear session
session.delete(:user)
assert_equal Issue.find_by_reportable_id_and_reportable_type(target_user.id, "User").reports.count, 1
end
def test_new_report_with_complete_details
# Test creation of a new issue and a new report
target_user = create(:user)
# Login
session[:user] = users(:normal_user).id
session[:user] = create(:user).id
assert_equal Issue.count, 0
# Create an Issue and a report
get :new, :reportable_id => 1, :reportable_type => "User", :reported_user_id => 2
get :new, :params => { :reportable_id => target_user.id, :reportable_type => "User", :reported_user_id => target_user.id }
assert_response :success
assert_difference "Issue.count", 1 do
details = "Details of a report"
post :create,
:params => {
:report => { :details => details },
:report_type => "[OFFENSIVE]",
:issue => { :reportable_id => 1, :reportable_type => "User", :reported_user_id => 2 }
:issue => { :reportable_id => target_user.id, :reportable_type => "User", :reported_user_id => target_user.id }
}
end
assert_equal Issue.count, 1
assert_response :redirect
assert_redirected_to root_path
# Create a report for an existing Issue
get :new, :reportable_id => 1, :reportable_type => "User", :reported_user_id => 2
get :new, :params => { :reportable_id => target_user.id, :reportable_type => "User", :reported_user_id => target_user.id }
assert_response :success
assert_no_difference "Issue.count" do
details = "Details of another report under the same issue"
post :create,
:params => {
:report => { :details => details },
:report_type => "[OFFENSIVE]",
:issue => { :reportable_id => 1, :reportable_type => "User", :reported_user_id => 2 }
:issue => { :reportable_id => target_user.id, :reportable_type => "User", :reported_user_id => target_user.id }
}
end
assert_response :redirect
report_count = Issue.find_by_reportable_id_and_reportable_type(1, "User").reports.count
report_count = Issue.find_by_reportable_id_and_reportable_type(target_user.id, "User").reports.count
assert_equal report_count, 2
# clear session
session.delete(:user)
end
def test_change_status_by_normal_user
# Login as normal user
session[:user] = users(:normal_user).id
target_user = create(:user)
issue = create(:issue, :reportable => target_user, :reported_user_id => target_user.id)
# Login as normal user
session[:user] = create(:user).id
# Create Issue
test_new_issue_after_login
assert_equal Issue.count, 1
get :resolve, :id => Issue.find_by_reportable_id_and_reportable_type(1, "User").id
get :resolve, :params => { :id => issue.id }
assert_response :redirect
assert_redirected_to root_path
# clear session
session.delete(:user)
end
def test_change_status_by_admin
# Login as normal user
session[:user] = users(:normal_user).id
# Create Issue
test_new_issue_after_login
assert_equal Issue.count, 1
assert_response :redirect
target_user = create(:user)
issue = create(:issue, :reportable => target_user, :reported_user_id => target_user.id)
# Login as administrator
session[:user] = users(:administrator_user).id
session[:user] = create(:administrator_user).id
# Test 'Resolved'
get :resolve, :id => Issue.find_by_reportable_id_and_reportable_type(1, "User").id
assert_equal Issue.find_by_reportable_id_and_reportable_type(1, "User").resolved?, true
get :resolve, :params => { :id => issue.id }
assert_equal Issue.find_by_reportable_id_and_reportable_type(target_user.id, "User").resolved?, true
assert_response :redirect
# Test 'Reopen'
get :reopen, :id => Issue.find_by_reportable_id_and_reportable_type(1, "User").id
assert_equal Issue.find_by_reportable_id_and_reportable_type(1, "User").open?, true
get :reopen, :params => { :id => issue.id }
assert_equal Issue.find_by_reportable_id_and_reportable_type(target_user.id, "User").open?, true
assert_response :redirect
# Test 'Ignored'
get :ignore, :id => Issue.find_by_reportable_id_and_reportable_type(1, "User").id
assert_equal Issue.find_by_reportable_id_and_reportable_type(1, "User").ignored?, true
get :ignore, :params => { :id => issue.id }
assert_equal Issue.find_by_reportable_id_and_reportable_type(target_user, "User").ignored?, true
assert_response :redirect
# clear session
session.delete(:user)
end
def test_search_issues
good_user = create(:user)
bad_user = create(:user)
create(:issue, :reportable => bad_user, :reported_user_id => bad_user.id, :issue_type => "administrator")
# Login as administrator
session[:user] = users(:administrator_user).id
session[:user] = create(:administrator_user).id
# No issues against the user
get :index, :search_by_user => "test1"
get :index, :params => { :search_by_user => good_user.display_name }
assert_response :redirect
assert_redirected_to issues_path
# User doesn't exist
get :index, :search_by_user => "test1000"
get :index, :params => { :search_by_user => "test1000" }
assert_response :redirect
assert_redirected_to issues_path
# Create Issue against user_id:2
test_new_issue_after_login
assert_equal Issue.count, 1
assert_equal Issue.first.reported_user_id, 2
session[:user] = users(:administrator_user).id
# Find Issue against user_id:2
get :index, :search_by_user => "test2"
# Find Issue against bad_user
get :index, :params => { :search_by_user => bad_user.display_name }
assert_response :success
# clear session
session.delete(:user)
end
def test_comment_by_normal_user
# Create Issue
test_new_issue_after_login
assert_equal Issue.count, 1
issue = create(:issue)
get :comment, :id => 1
# Login as normal user
session[:user] = create(:user).id
get :comment, :params => { :id => issue.id }
assert_response :redirect
assert_redirected_to root_path
end
def test_comment
# Create Issue
test_new_issue_after_login
assert_equal Issue.count, 1
@issue = Issue.all.first
issue = create(:issue)
# Login as administrator
session[:user] = users(:administrator_user).id
session[:user] = create(:administrator_user).id
get :comment, :id => @issue.id, :issue_comment => { :body => "test comment" }
get :comment, :params => { :id => issue.id, :issue_comment => { :body => "test comment" } }
assert_response :redirect
assert_redirected_to @issue
# clear session
session.delete(:user)
assert_redirected_to issue
end
end

9
test/factories/issues.rb Normal file
View file

@ -0,0 +1,9 @@
FactoryGirl.define do
factory :issue do
# Default to reporting users
association :reportable, :factory => :user
# reported_user_id
association :user, :factory => :user
end
end

View file

@ -1,13 +0,0 @@
# Read about fixtures at http://api.rubyonrails.org/classes/ActiveRecord/FixtureSet.html
one:
issue_id: 1
user_id: 1
body: MyText
created_at: 2015-05-26 18:30:32
two:
issue_id: 1
user_id: 1
body: MyText
created_at: 2015-05-26 18:30:32

View file

@ -1,23 +0,0 @@
# Read about fixtures at http://api.rubyonrails.org/classes/ActiveRecord/FixtureSet.html
# one:
# reportable_type: User
# reportable_id: 1
# reported_user_id: 1
# status: 1
# issue_type: administrator
# resolved_at: 2015-05-16 13:06:16
# resolved_by: 1
# created_at: 2015-05-16 13:06:16
# updated_at: 2015-05-16 13:06:16
# two:
# reportable_type: User
# reportable_id: 1
# reported_user_id: 1
# status: 1
# issue_type: moderator
# resolved_at: 2015-05-16 13:06:16
# resolved_by: 1
# created_at: 2015-05-16 13:06:16
# updated_at: 2015-05-16 13:06:16

View file

@ -1,15 +0,0 @@
# Read about fixtures at http://api.rubyonrails.org/classes/ActiveRecord/FixtureSet.html
one:
issue_id: 1
user_id: 1
details: MyText
created_at: 2015-05-16 13:26:20
updated_at: 2015-05-16 13:26:20
two:
issue_id: 1
user_id: 1
details: MyText
created_at: 2015-05-16 13:26:20
updated_at: 2015-05-16 13:26:20