Commit af279ce7 authored by Brandon Labuschagne's avatar Brandon Labuschagne
Browse files

Add limit of 128 characters to users name

Truncate existing users names which exceed 128 characters
Include test for truncating users names
parent 8488178a75dc
......@@ -159,7 +159,7 @@ def update_tracked_fields!(request)
# Validations
#
# Note: devise :validatable above adds validations for :email and :password
validates :name, presence: true
validates :name, presence: true, length: { maximum: 128 }
validates :email, confirmation: true
validates :notification_email, presence: true
validates :notification_email, devise_email: true, if: ->(user) { user.notification_email != user.email }
......
---
title: Set user.name limit to 128 characters
merge_request: 26146
author:
type: changed
# rubocop:disable Migration/UpdateLargeTable
class TruncateUserFullname < ActiveRecord::Migration[5.0]
include Gitlab::Database::MigrationHelpers
DOWNTIME = false
disable_ddl_transaction!
def up
truncated_name = Arel.sql('SUBSTRING(name from 1 for 128)')
where_clause = Arel.sql("LENGTH(name) > 128")
update_column_in_batches(:users, :name, truncated_name) do |table, query|
query.where(where_clause)
end
end
def down
# noop
end
end
require 'spec_helper'
require Rails.root.join('db', 'migrate', '20190325080727_truncate_user_fullname.rb')
describe TruncateUserFullname, :migration do
let(:users) { table(:users) }
let(:user_short) { create_user(name: 'abc', email: 'test_short@example.com') }
let(:user_long) { create_user(name: 'a' * 200 + 'z', email: 'test_long@example.com') }
def create_user(params)
users.create!(params.merge(projects_limit: 0))
end
it 'truncates user full name to the first 128 characters' do
expect { migrate! }.to change { user_long.reload.name }.to('a' * 128)
end
it 'does not truncate short names' do
expect { migrate! }.not_to change { user_short.reload.name.length }
end
end
......@@ -98,6 +98,11 @@
end
describe 'validations' do
describe 'name' do
it { is_expected.to validate_presence_of(:name) }
it { is_expected.to validate_length_of(:name).is_at_most(128) }
end
describe 'username' do
it 'validates presence' do
expect(subject).to validate_presence_of(:username)
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment