Feature #4507 ยป 0001-Make-firstname-lastname-field-order-follow-Users-dis.patch
| app/models/user.rb | ||
|---|---|---|
| 266 | 266 |
USER_FORMATS[formatter || Setting.user_format] || USER_FORMATS[:firstname_lastname] |
| 267 | 267 |
end |
| 268 | 268 | |
| 269 |
# Returns true if the selected user format puts lastname before firstname. |
|
| 270 |
def self.lastname_before_firstname?(formatter = nil) |
|
| 271 |
order = name_formatter(formatter)[:order] |
|
| 272 |
return false unless order.include?('firstname') && order.include?('lastname')
|
|
| 273 | ||
| 274 |
order.index('lastname') < order.index('firstname')
|
|
| 275 |
end |
|
| 276 | ||
| 269 | 277 |
# Returns an array of fields names than can be used to make an order statement for users |
| 270 | 278 |
# according to how user names are displayed |
| 271 | 279 |
# Examples: |
| app/models/user_query.rb | ||
|---|---|---|
| 113 | 113 |
end |
| 114 | 114 | |
| 115 | 115 |
def default_columns_names |
| 116 |
@default_columns_names ||= [:login, :firstname, :lastname, :mail, :admin, :created_on, :last_login_on] |
|
| 116 |
@default_columns_names ||= |
|
| 117 |
if !User.lastname_before_firstname? |
|
| 118 |
[:login, :firstname, :lastname, :mail, :admin, :created_on, :last_login_on] |
|
| 119 |
else |
|
| 120 |
[:login, :lastname, :firstname, :mail, :admin, :created_on, :last_login_on] |
|
| 121 |
end |
|
| 117 | 122 |
end |
| 118 | 123 | |
| 119 | 124 |
def default_sort_criteria |
| app/views/account/register.html.erb | ||
|---|---|---|
| 16 | 16 |
<p><%= f.password_field :password_confirmation, :size => 25, :required => true %></p> |
| 17 | 17 |
<% end %> |
| 18 | 18 | |
| 19 |
<% if User.lastname_before_firstname? %> |
|
| 20 |
<p><%= f.text_field :lastname, :required => true %></p> |
|
| 21 |
<p><%= f.text_field :firstname, :required => true %></p> |
|
| 22 |
<% else %> |
|
| 19 | 23 |
<p><%= f.text_field :firstname, :required => true %></p> |
| 20 | 24 |
<p><%= f.text_field :lastname, :required => true %></p> |
| 25 |
<% end %> |
|
| 21 | 26 |
<p><%= f.text_field :mail, :required => true %></p> |
| 22 | 27 |
<%= labelled_fields_for :pref, @user.pref do |pref_fields| %> |
| 23 | 28 |
<p><%= pref_fields.check_box :hide_mail %></p> |
| app/views/my/account.html.erb | ||
|---|---|---|
| 21 | 21 |
<div class="splitcontentleft"> |
| 22 | 22 |
<fieldset class="box tabular"> |
| 23 | 23 |
<legend><%=l(:label_information_plural)%></legend> |
| 24 |
<p><%= f.text_field :firstname, :required => true %></p> |
|
| 25 |
<p><%= f.text_field :lastname, :required => true %></p> |
|
| 24 |
<% if User.lastname_before_firstname? %> |
|
| 25 |
<p><%= f.text_field :lastname, :required => true %></p> |
|
| 26 |
<p><%= f.text_field :firstname, :required => true %></p> |
|
| 27 |
<% else %> |
|
| 28 |
<p><%= f.text_field :firstname, :required => true %></p> |
|
| 29 |
<p><%= f.text_field :lastname, :required => true %></p> |
|
| 30 |
<% end %> |
|
| 26 | 31 |
<p><%= f.text_field :mail, :required => true %></p> |
| 27 | 32 |
<% unless @user.force_default_language? %> |
| 28 | 33 |
<p><%= f.select :language, lang_options_for_select %></p> |
| app/views/users/_form.html.erb | ||
|---|---|---|
| 7 | 7 |
<fieldset class="box tabular"> |
| 8 | 8 |
<legend><%=l(:label_information_plural)%></legend> |
| 9 | 9 |
<p><%= f.text_field :login, :required => true, :size => 25 %></p> |
| 10 |
<p><%= f.text_field :firstname, :required => true %></p> |
|
| 11 |
<p><%= f.text_field :lastname, :required => true %></p> |
|
| 10 |
<% if User.lastname_before_firstname? %> |
|
| 11 |
<p><%= f.text_field :lastname, :required => true %></p> |
|
| 12 |
<p><%= f.text_field :firstname, :required => true %></p> |
|
| 13 |
<% else %> |
|
| 14 |
<p><%= f.text_field :firstname, :required => true %></p> |
|
| 15 |
<p><%= f.text_field :lastname, :required => true %></p> |
|
| 16 |
<% end %> |
|
| 12 | 17 |
<p><%= f.text_field :mail, :required => true %></p> |
| 13 | 18 |
<% unless @user.force_default_language? %> |
| 14 | 19 |
<p><%= f.select :language, lang_options_for_select %></p> |
| test/functional/account_controller_test.rb | ||
|---|---|---|
| 296 | 296 |
end |
| 297 | 297 |
end |
| 298 | 298 | |
| 299 |
def test_get_register_should_show_lastname_before_firstname_when_user_format_requires_it |
|
| 300 |
with_settings :self_registration => '3', :user_format => 'lastname_firstname' do |
|
| 301 |
get :register |
|
| 302 |
assert_response :success |
|
| 303 | ||
| 304 |
assert_operator @response.body.index('id="user_lastname"'), :<, @response.body.index('id="user_firstname"')
|
|
| 305 |
end |
|
| 306 |
end |
|
| 307 | ||
| 299 | 308 |
def test_get_register_should_detect_user_language |
| 300 | 309 |
with_settings :self_registration => '3' do |
| 301 | 310 |
@request.env['HTTP_ACCEPT_LANGUAGE'] = 'fr,fr-fr;q=0.8,en-us;q=0.5,en;q=0.3' |
| test/functional/my_controller_test.rb | ||
|---|---|---|
| 398 | 398 |
assert_select 'select[name=?]', 'user[language]' |
| 399 | 399 |
end |
| 400 | 400 | |
| 401 |
def test_my_account_should_show_lastname_before_firstname_when_user_format_requires_it |
|
| 402 |
with_settings :user_format => 'lastname_firstname' do |
|
| 403 |
get :account |
|
| 404 |
assert_response :success |
|
| 405 | ||
| 406 |
assert_operator @response.body.index('id="user_lastname"'), :<, @response.body.index('id="user_firstname"')
|
|
| 407 |
end |
|
| 408 |
end |
|
| 409 | ||
| 401 | 410 |
def test_my_account_should_toggle_webhook_link_with_setting |
| 402 | 411 |
User.find(2).roles.first.add_permission!(:use_webhooks) |
| 403 | 412 | |
| test/functional/users_controller_test.rb | ||
|---|---|---|
| 37 | 37 |
assert_select "tr#user-#{locked.id}", 0
|
| 38 | 38 |
end |
| 39 | 39 | |
| 40 |
def test_index_default_columns_should_show_lastname_before_firstname_when_user_format_requires_it |
|
| 41 |
with_settings user_format: 'lastname_firstname' do |
|
| 42 |
get :index |
|
| 43 |
assert_response :success |
|
| 44 | ||
| 45 |
lastname_header = @response.body.match(/<th[^>]*class="[^"]*\blastname\b[^"]*"[^>]*>/) |
|
| 46 |
firstname_header = @response.body.match(/<th[^>]*class="[^"]*\bfirstname\b[^"]*"[^>]*>/) |
|
| 47 | ||
| 48 |
assert_not_nil lastname_header |
|
| 49 |
assert_not_nil firstname_header |
|
| 50 |
assert_operator lastname_header.begin(0), :<, firstname_header.begin(0) |
|
| 51 |
end |
|
| 52 |
end |
|
| 53 | ||
| 40 | 54 |
def test_index_with_status_filter |
| 41 | 55 |
get :index, params: { set_filter: 1, f: ['status'], op: {status: '='}, v: {status: [3]} }
|
| 42 | 56 |
assert_response :success |
| ... | ... | |
| 444 | 458 |
assert_select 'label[for=?]>span.required', 'user_password', 1 |
| 445 | 459 |
end |
| 446 | 460 | |
| 461 |
def test_new_should_show_lastname_before_firstname_when_user_format_requires_it |
|
| 462 |
with_settings :user_format => 'lastname_firstname' do |
|
| 463 |
get :new |
|
| 464 |
assert_response :success |
|
| 465 | ||
| 466 |
assert_operator @response.body.index('id="user_lastname"'), :<, @response.body.index('id="user_firstname"')
|
|
| 467 |
end |
|
| 468 |
end |
|
| 469 | ||
| 447 | 470 |
def test_create |
| 448 | 471 |
assert_difference 'User.count' do |
| 449 | 472 |
assert_difference 'ActionMailer::Base.deliveries.size' do |
| test/unit/user_query_test.rb | ||
|---|---|---|
| 19 | 19 |
require_relative '../test_helper' |
| 20 | 20 | |
| 21 | 21 |
class UserQueryTest < ActiveSupport::TestCase |
| 22 |
def test_default_columns_names_should_show_lastname_before_firstname_when_user_format_requires_it |
|
| 23 |
with_settings user_format: 'lastname_firstname' do |
|
| 24 |
assert_equal [:login, :lastname, :firstname, :mail, :admin, :created_on, :last_login_on], |
|
| 25 |
UserQuery.new.default_columns_names |
|
| 26 |
end |
|
| 27 |
end |
|
| 28 | ||
| 29 |
def test_default_columns_names_should_show_firstname_before_lastname_when_user_format_is_default |
|
| 30 |
with_settings user_format: 'firstname_lastname' do |
|
| 31 |
assert_equal [:login, :firstname, :lastname, :mail, :admin, :created_on, :last_login_on], |
|
| 32 |
UserQuery.new.default_columns_names |
|
| 33 |
end |
|
| 34 |
end |
|
| 35 | ||
| 22 | 36 |
def test_available_columns_should_include_user_custom_fields |
| 23 | 37 |
query = UserQuery.new |
| 24 | 38 |
assert_include :cf_4, query.available_columns.map(&:name) |
| test/unit/user_test.rb | ||
|---|---|---|
| 691 | 691 |
end |
| 692 | 692 |
end |
| 693 | 693 | |
| 694 |
def test_lastname_before_firstname_should_return_true_with_lastname_firstname_format |
|
| 695 |
assert User.lastname_before_firstname?(:lastname_firstname) |
|
| 696 |
end |
|
| 697 | ||
| 698 |
def test_lastname_before_firstname_should_return_false_with_firstname_lastname_format |
|
| 699 |
assert_not User.lastname_before_firstname?(:firstname_lastname) |
|
| 700 |
end |
|
| 701 | ||
| 702 |
def test_lastname_before_firstname_should_return_false_with_format_without_both_name_parts |
|
| 703 |
assert_not User.lastname_before_firstname?(:username) |
|
| 704 |
assert_not User.lastname_before_firstname?(:lastname) |
|
| 705 |
end |
|
| 706 | ||
| 694 | 707 |
test ".try_to_login with good credentials should return the user" do |
| 695 | 708 |
user = User.try_to_login("admin", "admin")
|
| 696 | 709 |
assert_kind_of User, user |