diff --git a/app/models/account.rb b/app/models/account.rb index fefc40869f..7321cff3db 100644 --- a/app/models/account.rb +++ b/app/models/account.rb @@ -107,14 +107,14 @@ class Account < ApplicationRecord validates_with UniqueUsernameValidator, if: -> { will_save_change_to_username? } # Remote user validations, also applies to internal actors - validates :username, format: { with: USERNAME_ONLY_RE }, if: -> { (remote? || actor_type == 'Application') && will_save_change_to_username? } + validates :username, format: { with: USERNAME_ONLY_RE }, if: -> { (remote? || actor_type_application?) && will_save_change_to_username? } # Remote user validations validates :uri, presence: true, unless: :local?, on: :create # Local user validations - validates :username, format: { with: /\A[a-z0-9_]+\z/i }, length: { maximum: USERNAME_LENGTH_LIMIT }, if: -> { local? && will_save_change_to_username? && actor_type != 'Application' } - validates_with UnreservedUsernameValidator, if: -> { local? && will_save_change_to_username? && actor_type != 'Application' } + validates :username, format: { with: /\A[a-z0-9_]+\z/i }, length: { maximum: USERNAME_LENGTH_LIMIT }, if: -> { local? && will_save_change_to_username? && !actor_type_application? } + validates_with UnreservedUsernameValidator, if: -> { local? && will_save_change_to_username? && !actor_type_application? } validates :display_name, length: { maximum: DISPLAY_NAME_LENGTH_LIMIT }, if: -> { local? && will_save_change_to_display_name? } validates :note, note_length: { maximum: NOTE_LENGTH_LIMIT }, if: -> { local? && will_save_change_to_note? } validates :fields, length: { maximum: DEFAULT_FIELDS_SIZE }, if: -> { local? && will_save_change_to_fields? } @@ -208,6 +208,10 @@ class Account < ApplicationRecord self.actor_type = ActiveModel::Type::Boolean.new.cast(val) ? 'Service' : 'Person' end + def actor_type_application? + actor_type == 'Application' + end + def group? actor_type == 'Group' end diff --git a/spec/models/account_spec.rb b/spec/models/account_spec.rb index f70690ddb6..3e9b36652f 100644 --- a/spec/models/account_spec.rb +++ b/spec/models/account_spec.rb @@ -80,6 +80,20 @@ RSpec.describe Account do end end + describe '#actor_type_application?' do + context 'when the actor is not of type application' do + subject { Fabricate.build :account, actor_type: 'Person' } + + it { is_expected.to_not be_actor_type_application } + end + + context 'when the actor is of type application' do + subject { Fabricate.build :account, actor_type: 'Application' } + + it { is_expected.to be_actor_type_application } + end + end + describe 'Local domain user methods' do subject { Fabricate(:account, domain: nil, username: 'alice') }