From d6cb5ba05300823cb72bb4bef4d4efa90b5a756b Mon Sep 17 00:00:00 2001 From: Claire Date: Fri, 28 Aug 2026 11:49:30 +0000 Subject: [PATCH] Add some spec coverage (#40306) --- spec/lib/private_address_check_spec.rb | 14 ++----- .../process_collection_service_spec.rb | 40 +++++++++++++++++++ .../email_address_validator_spec.rb | 31 ++++++++++++++ 3 files changed, 75 insertions(+), 10 deletions(-) create mode 100644 spec/validators/email_address_validator_spec.rb diff --git a/spec/lib/private_address_check_spec.rb b/spec/lib/private_address_check_spec.rb index ee9f9295d50..100e8d89bc8 100644 --- a/spec/lib/private_address_check_spec.rb +++ b/spec/lib/private_address_check_spec.rb @@ -4,17 +4,11 @@ require 'rails_helper' RSpec.describe PrivateAddressCheck do describe 'private_address?' do + let(:private_ips) { %w(192.168.1.7 0.0.0.0 127.0.0.1 ::ffff:0.0.0.1 ::127.0.0.1 ::ffff:127.0.0.1 ::ffff:10.0.0.1 ::ffff:169.254.169.254 ::) } + it 'returns true for private addresses' do - # rubocop:disable RSpec/ExpectActual - expect( - [ - '192.168.1.7', - '0.0.0.0', - '127.0.0.1', - '::ffff:0.0.0.1', - ] - ).to all satisfy('return true') { |addr| described_class.private_address?(IPAddr.new(addr)) } - # rubocop:enable RSpec/ExpectActual + expect(private_ips) + .to all satisfy('return true') { |addr| described_class.private_address?(IPAddr.new(addr)) } end end end diff --git a/spec/services/activitypub/process_collection_service_spec.rb b/spec/services/activitypub/process_collection_service_spec.rb index 74df0f91063..8c1931bba99 100644 --- a/spec/services/activitypub/process_collection_service_spec.rb +++ b/spec/services/activitypub/process_collection_service_spec.rb @@ -109,6 +109,46 @@ RSpec.describe ActivityPub::ProcessCollectionService do expect(ActivityPub::Activity).to_not have_received(:factory) end + context 'when receiving a status with an unsupported JSON-LD keyword' do + let(:payload) do + { + '@context': 'https://www.w3.org/ns/activitystreams', + id: 'foo', + type: 'Announce', + actor: ActivityPub::TagManager.instance.uri_for(actor), + '@reverse': { + object: { + type: 'Undo', + id: 'bar', + actor: ActivityPub::TagManager.instance.uri_for(actor), + }, + }, + object: { + id: 'bar', + type: 'Note', + content: 'Lorem ipsum', + }, + signature: { + type: 'RsaSignature2017', + creator: "#{ActivityPub::TagManager.instance.uri_for(actor)}#foo", + created: '2022-03-09T21:57:25Z', + signatureValue: 'foo', + }, + } + end + + it 'does not process payload' do + signature_double = instance_double(ActivityPub::LinkedDataSignature, verify_actor!: nil) + allow(ActivityPub::LinkedDataSignature).to receive(:new).and_return(signature_double) + allow(ActivityPub::Activity).to receive(:factory) + + subject.call(json, forwarder) + + expect(signature_double).to_not have_received(:verify_actor!) + expect(ActivityPub::Activity).to_not have_received(:factory) + end + end + context 'when receiving a fabricated status' do let!(:actor) do Fabricate(:account, diff --git a/spec/validators/email_address_validator_spec.rb b/spec/validators/email_address_validator_spec.rb new file mode 100644 index 00000000000..c92bf4aaa24 --- /dev/null +++ b/spec/validators/email_address_validator_spec.rb @@ -0,0 +1,31 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe EmailAddressValidator do + context 'with no options' do + let(:record_class) do + Class.new do + include ActiveModel::Model + + def self.name = 'Record' + + attr_accessor :email + + validates :email, email_address: true + end + end + + it 'considers a valid email address as such' do + expect(record_class.new(email: 'foo@example.com')).to be_valid + end + + it 'considers an invalid email address as such' do + expect(record_class.new(email: 'foo @ example.com')).to_not be_valid + end + + it 'considers an email address with a % as invalid' do + expect(record_class.new(email: 'foo@example.com%foo.example.com')).to_not be_valid + end + end +end