~cytrogen/masto-fe

c40d5e5a8fb02f2c603a23a1b0130b3f86a15710 — Matt Jankowski 3 years ago 2f606ba
Misc coverage improvements for validators (#23928)

M app/validators/ed25519_key_validator.rb => app/validators/ed25519_key_validator.rb +1 -1
@@ 6,7 6,7 @@ class Ed25519KeyValidator < ActiveModel::EachValidator

    key = Base64.decode64(value)

    record.errors[attribute] << I18n.t('crypto.errors.invalid_key') unless verified?(key)
    record.errors.add(attribute, I18n.t('crypto.errors.invalid_key')) unless verified?(key)
  end

  private

M app/validators/ed25519_signature_validator.rb => app/validators/ed25519_signature_validator.rb +1 -1
@@ 8,7 8,7 @@ class Ed25519SignatureValidator < ActiveModel::EachValidator
    signature  = Base64.decode64(value)
    message    = option_to_value(record, :message)

    record.errors[attribute] << I18n.t('crypto.errors.invalid_signature') unless verified?(verify_key, signature, message)
    record.errors.add(attribute, I18n.t('crypto.errors.invalid_signature')) unless verified?(verify_key, signature, message)
  end

  private

M spec/models/import_spec.rb => spec/models/import_spec.rb +5 -0
@@ 23,6 23,11 @@ RSpec.describe Import, type: :model do
      expect(import).to model_have_error_on_field(:data)
    end

    it 'is invalid with malformed data' do
      import = Import.create(account: account, type: type, data: StringIO.new('\"test'))
      expect(import).to model_have_error_on_field(:data)
    end

    it 'is invalid with too many rows in data' do
      import = Import.create(account: account, type: type, data: StringIO.new("foo@bar.com\n" * (ImportService::ROWS_PROCESSING_LIMIT + 10)))
      expect(import).to model_have_error_on_field(:data)

M spec/models/one_time_key_spec.rb => spec/models/one_time_key_spec.rb +18 -1
@@ 2,5 2,22 @@

require 'rails_helper'

RSpec.describe OneTimeKey, type: :model do
describe OneTimeKey do
  describe 'validations' do
    context 'with an invalid signature' do
      let(:one_time_key) { Fabricate.build(:one_time_key, signature: 'wrong!') }

      it 'is invalid' do
        expect(one_time_key).to_not be_valid
      end
    end

    context 'with an invalid key' do
      let(:one_time_key) { Fabricate.build(:one_time_key, key: 'wrong!') }

      it 'is invalid' do
        expect(one_time_key).to_not be_valid
      end
    end
  end
end

M spec/validators/email_mx_validator_spec.rb => spec/validators/email_mx_validator_spec.rb +16 -0
@@ 41,6 41,22 @@ describe EmailMxValidator do
      expect(user.errors).to_not have_received(:add)
    end

    it 'adds an error if the TagManager fails to normalize domain' do
      double = instance_double(TagManager)
      allow(TagManager).to receive(:instance).and_return(double)
      allow(double).to receive(:normalize_domain).with('example.com').and_raise(Addressable::URI::InvalidURIError)

      user = double(email: 'foo@example.com', errors: double(add: nil))
      subject.validate(user)
      expect(user.errors).to have_received(:add)
    end

    it 'adds an error if the domain email portion is blank' do
      user = double(email: 'foo@', errors: double(add: nil))
      subject.validate(user)
      expect(user.errors).to have_received(:add)
    end

    it 'adds an error if the email domain name contains empty labels' do
      resolver = double