##// END OF EJS Templates
add missing fixtures to test/functional/wiki_controller_test.rb...
add missing fixtures to test/functional/wiki_controller_test.rb Tests fail randomly. <pre> 1) Error: WikiControllerTest#test_show_with_sidebar: ActionView::Template::Error: undefined method `name' for nil:NilClass app/helpers/application_helper.rb:797:in `block in parse_redmine_links' app/helpers/application_helper.rb:757:in `gsub!' app/helpers/application_helper.rb:757:in `parse_redmine_links' app/helpers/application_helper.rb:601:in `block (2 levels) in textilizable' app/helpers/application_helper.rb:600:in `each' app/helpers/application_helper.rb:600:in `block in textilizable' app/helpers/application_helper.rb:621:in `parse_non_pre_blocks' app/helpers/application_helper.rb:599:in `textilizable' app/views/wiki/_content.html.erb:2:in `_app_views_wiki__content_html_erb___3773333740575742579_33736820' app/views/wiki/show.html.erb:44:in `_app_views_wiki_show_html_erb__965327089377623997_33504680' app/controllers/wiki_controller.rb:97:in `show' test/functional/wiki_controller_test.rb:119:in `test_show_with_sidebar' </pre> It can be reproduced by following change. <pre> class WikiControllerTest < ActionController::TestCase fixtures :projects, :users, :roles, :members, :member_roles, :enabled_modules, :wikis, :wiki_pages, :wiki_contents, - :wiki_content_versions, :attachments + :wiki_content_versions, :attachments, + :issues #, :issue_statuses </pre> git-svn-id: http://svn.redmine.org/redmine/trunk@13590 e93f8b46-1217-0410-a6f0-8f06a7374b81

File last commit:

r13202:bdd3ccf8e52c
r13208:f2ddfcda9aec
Show More
principal.rb
154 lines | 4.9 KiB | text/x-ruby | RubyLexer
# Redmine - project management software
# Copyright (C) 2006-2014 Jean-Philippe Lang
#
# 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.
#
# 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.
#
# 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.
class Principal < ActiveRecord::Base
self.table_name = "#{table_name_prefix}users#{table_name_suffix}"
# Account statuses
STATUS_ANONYMOUS = 0
STATUS_ACTIVE = 1
STATUS_REGISTERED = 2
STATUS_LOCKED = 3
has_many :members, :foreign_key => 'user_id', :dependent => :destroy
has_many :memberships,
lambda {preload(:project, :roles).
joins(:project).
where("#{Project.table_name}.status<>#{Project::STATUS_ARCHIVED}").
order("#{Project.table_name}.name")},
:class_name => 'Member',
:foreign_key => 'user_id'
has_many :projects, :through => :memberships
has_many :issue_categories, :foreign_key => 'assigned_to_id', :dependent => :nullify
# Groups and active users
scope :active, lambda { where(:status => STATUS_ACTIVE) }
scope :visible, lambda {|*args|
user = args.first || User.current
if user.admin?
all
else
view_all_active = false
if user.memberships.to_a.any?
view_all_active = user.memberships.any? {|m| m.roles.any? {|r| r.users_visibility == 'all'}}
else
view_all_active = user.builtin_role.users_visibility == 'all'
end
if view_all_active
active
else
# self and members of visible projects
active.where("#{table_name}.id = ? OR #{table_name}.id IN (SELECT user_id FROM #{Member.table_name} WHERE project_id IN (?))",
user.id, user.visible_project_ids
)
end
end
}
scope :like, lambda {|q|
q = q.to_s
if q.blank?
where({})
else
pattern = "%#{q}%"
sql = %w(login firstname lastname mail).map {|column| "LOWER(#{table_name}.#{column}) LIKE LOWER(:p)"}.join(" OR ")
params = {:p => pattern}
if q =~ /^(.+)\s+(.+)$/
a, b = "#{$1}%", "#{$2}%"
sql << " OR (LOWER(#{table_name}.firstname) LIKE LOWER(:a) AND LOWER(#{table_name}.lastname) LIKE LOWER(:b))"
sql << " OR (LOWER(#{table_name}.firstname) LIKE LOWER(:b) AND LOWER(#{table_name}.lastname) LIKE LOWER(:a))"
params.merge!(:a => a, :b => b)
end
where(sql, params)
end
}
# Principals that are members of a collection of projects
scope :member_of, lambda {|projects|
projects = [projects] if projects.is_a?(Project)
if projects.blank?
where("1=0")
else
ids = projects.map(&:id)
active.where("#{Principal.table_name}.id IN (SELECT DISTINCT user_id FROM #{Member.table_name} WHERE project_id IN (?))", ids)
end
}
# Principals that are not members of projects
scope :not_member_of, lambda {|projects|
projects = [projects] unless projects.is_a?(Array)
if projects.empty?
where("1=0")
else
ids = projects.map(&:id)
where("#{Principal.table_name}.id NOT IN (SELECT DISTINCT user_id FROM #{Member.table_name} WHERE project_id IN (?))", ids)
end
}
scope :sorted, lambda { order(*Principal.fields_for_order_statement)}
before_create :set_default_empty_values
def name(formatter = nil)
to_s
end
def visible?(user=User.current)
Principal.visible(user).where(:id => id).first == self
end
# Return true if the principal is a member of project
def member_of?(project)
projects.to_a.include?(project)
end
def <=>(principal)
if principal.nil?
-1
elsif self.class.name == principal.class.name
self.to_s.downcase <=> principal.to_s.downcase
else
# groups after users
principal.class.name <=> self.class.name
end
end
# Returns an array of fields names than can be used to make an order statement for principals.
# Users are sorted before Groups.
# Examples:
def self.fields_for_order_statement(table=nil)
table ||= table_name
columns = ['type DESC'] + (User.name_formatter[:order] - ['id']) + ['lastname', 'id']
columns.uniq.map {|field| "#{table}.#{field}"}
end
protected
# Make sure we don't try to insert NULL values (see #4632)
def set_default_empty_values
self.login ||= ''
self.hashed_password ||= ''
self.firstname ||= ''
self.lastname ||= ''
self.mail ||= ''
true
end
end
require_dependency "user"
require_dependency "group"