Commit ebfe19e8 authored by Brandon Labuschagne's avatar Brandon Labuschagne

Add limit of 128 characters to users name

Truncate existing users names which exceed 128 characters
Include test for truncating users names
parent b54228ad
......@@ -159,7 +159,7 @@ class User < ApplicationRecord
# 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 @@ describe User do
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