Add more tests for self-destruct mode (#30374)
This commit is contained in:
		
							parent
							
								
									def6b686ff
								
							
						
					
					
						commit
						de4815afda
					
				
							
								
								
									
										70
									
								
								spec/helpers/self_destruct_helper_spec.rb
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										70
									
								
								spec/helpers/self_destruct_helper_spec.rb
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,70 @@ | |||||||
|  | # frozen_string_literal: true | ||||||
|  | 
 | ||||||
|  | require 'rails_helper' | ||||||
|  | 
 | ||||||
|  | RSpec.describe SelfDestructHelper do | ||||||
|  |   describe 'self_destruct?' do | ||||||
|  |     context 'when SELF_DESTRUCT is unset' do | ||||||
|  |       it 'returns false' do | ||||||
|  |         expect(helper.self_destruct?).to be false | ||||||
|  |       end | ||||||
|  |     end | ||||||
|  | 
 | ||||||
|  |     context 'when SELF_DESTRUCT is set to an invalid value' do | ||||||
|  |       around do |example| | ||||||
|  |         ClimateControl.modify SELF_DESTRUCT: 'true' do | ||||||
|  |           example.run | ||||||
|  |         end | ||||||
|  |       end | ||||||
|  | 
 | ||||||
|  |       it 'returns false' do | ||||||
|  |         expect(helper.self_destruct?).to be false | ||||||
|  |       end | ||||||
|  |     end | ||||||
|  | 
 | ||||||
|  |     context 'when SELF_DESTRUCT is set to value signed for the wrong purpose' do | ||||||
|  |       around do |example| | ||||||
|  |         ClimateControl.modify( | ||||||
|  |           SELF_DESTRUCT: Rails.application.message_verifier('foo').generate('example.com'), | ||||||
|  |           LOCAL_DOMAIN: 'example.com' | ||||||
|  |         ) do | ||||||
|  |           example.run | ||||||
|  |         end | ||||||
|  |       end | ||||||
|  | 
 | ||||||
|  |       it 'returns false' do | ||||||
|  |         expect(helper.self_destruct?).to be false | ||||||
|  |       end | ||||||
|  |     end | ||||||
|  | 
 | ||||||
|  |     context 'when SELF_DESTRUCT is set to value signed for the wrong domain' do | ||||||
|  |       around do |example| | ||||||
|  |         ClimateControl.modify( | ||||||
|  |           SELF_DESTRUCT: Rails.application.message_verifier('self-destruct').generate('foo.com'), | ||||||
|  |           LOCAL_DOMAIN: 'example.com' | ||||||
|  |         ) do | ||||||
|  |           example.run | ||||||
|  |         end | ||||||
|  |       end | ||||||
|  | 
 | ||||||
|  |       it 'returns false' do | ||||||
|  |         expect(helper.self_destruct?).to be false | ||||||
|  |       end | ||||||
|  |     end | ||||||
|  | 
 | ||||||
|  |     context 'when SELF_DESTRUCT is set to a correctly-signed value' do | ||||||
|  |       around do |example| | ||||||
|  |         ClimateControl.modify( | ||||||
|  |           SELF_DESTRUCT: Rails.application.message_verifier('self-destruct').generate('example.com'), | ||||||
|  |           LOCAL_DOMAIN: 'example.com' | ||||||
|  |         ) do | ||||||
|  |           example.run | ||||||
|  |         end | ||||||
|  |       end | ||||||
|  | 
 | ||||||
|  |       it 'returns true' do | ||||||
|  |         expect(helper.self_destruct?).to be true | ||||||
|  |       end | ||||||
|  |     end | ||||||
|  |   end | ||||||
|  | end | ||||||
							
								
								
									
										92
									
								
								spec/requests/self_destruct_spec.rb
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										92
									
								
								spec/requests/self_destruct_spec.rb
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,92 @@ | |||||||
|  | # frozen_string_literal: true | ||||||
|  | 
 | ||||||
|  | require 'rails_helper' | ||||||
|  | 
 | ||||||
|  | describe 'Self-destruct mode' do | ||||||
|  |   before do | ||||||
|  |     allow(SelfDestructHelper).to receive(:self_destruct?).and_return(true) | ||||||
|  |   end | ||||||
|  | 
 | ||||||
|  |   shared_examples 'generic logged out request' do |path| | ||||||
|  |     it 'returns 410 gone and mentions self-destruct' do | ||||||
|  |       get path, headers: { 'Accept' => 'text/html' } | ||||||
|  | 
 | ||||||
|  |       expect(response).to have_http_status(410) | ||||||
|  |       expect(response.body).to include(I18n.t('self_destruct.title')) | ||||||
|  |     end | ||||||
|  |   end | ||||||
|  | 
 | ||||||
|  |   shared_examples 'accessible logged-in endpoint' do |path| | ||||||
|  |     it 'returns 200 ok' do | ||||||
|  |       get path | ||||||
|  | 
 | ||||||
|  |       expect(response).to have_http_status(200) | ||||||
|  |     end | ||||||
|  |   end | ||||||
|  | 
 | ||||||
|  |   shared_examples 'ActivityPub request' do |path| | ||||||
|  |     context 'without signature' do | ||||||
|  |       it 'returns 410 gone' do | ||||||
|  |         get path, headers: { | ||||||
|  |           'Accept' => 'application/activity+json, application/ld+json; profile="https://www.w3.org/ns/activitystreams"', | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         expect(response).to have_http_status(410) | ||||||
|  |       end | ||||||
|  |     end | ||||||
|  | 
 | ||||||
|  |     context 'with invalid signature' do | ||||||
|  |       it 'returns 410 gone' do | ||||||
|  |         get path, headers: { | ||||||
|  |           'Accept' => 'application/activity+json, application/ld+json; profile="https://www.w3.org/ns/activitystreams"', | ||||||
|  |           'Signature' => 'keyId="https://remote.domain/users/bob#main-key",algorithm="rsa-sha256",headers="date host (request-target)",signature="bar"', | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         expect(response).to have_http_status(410) | ||||||
|  |       end | ||||||
|  |     end | ||||||
|  |   end | ||||||
|  | 
 | ||||||
|  |   context 'when requesting various unavailable endpoints' do | ||||||
|  |     it_behaves_like 'generic logged out request', '/' | ||||||
|  |     it_behaves_like 'generic logged out request', '/about' | ||||||
|  |     it_behaves_like 'generic logged out request', '/public' | ||||||
|  |   end | ||||||
|  | 
 | ||||||
|  |   context 'when requesting a suspended account' do | ||||||
|  |     let(:suspended) { Fabricate(:account, username: 'suspended') } | ||||||
|  | 
 | ||||||
|  |     before do | ||||||
|  |       suspended.suspend! | ||||||
|  |     end | ||||||
|  | 
 | ||||||
|  |     it_behaves_like 'generic logged out request', '/@suspended' | ||||||
|  |     it_behaves_like 'ActivityPub request', '/users/suspended' | ||||||
|  |     it_behaves_like 'ActivityPub request', '/users/suspended/followers' | ||||||
|  |     it_behaves_like 'ActivityPub request', '/users/suspended/outbox' | ||||||
|  |   end | ||||||
|  | 
 | ||||||
|  |   context 'when requesting a non-suspended account' do | ||||||
|  |     before do | ||||||
|  |       Fabricate(:account, username: 'bob') | ||||||
|  |     end | ||||||
|  | 
 | ||||||
|  |     it_behaves_like 'generic logged out request', '/@bob' | ||||||
|  |     it_behaves_like 'ActivityPub request', '/users/bob' | ||||||
|  |     it_behaves_like 'ActivityPub request', '/users/bob/followers' | ||||||
|  |     it_behaves_like 'ActivityPub request', '/users/bob/outbox' | ||||||
|  |   end | ||||||
|  | 
 | ||||||
|  |   context 'when accessing still-enabled endpoints when logged in' do | ||||||
|  |     let(:user) { Fabricate(:user) } | ||||||
|  | 
 | ||||||
|  |     before do | ||||||
|  |       sign_in(user) | ||||||
|  |     end | ||||||
|  | 
 | ||||||
|  |     it_behaves_like 'accessible logged-in endpoint', '/auth/edit' | ||||||
|  |     it_behaves_like 'accessible logged-in endpoint', '/settings/export' | ||||||
|  |     it_behaves_like 'accessible logged-in endpoint', '/settings/login_activities' | ||||||
|  |     it_behaves_like 'accessible logged-in endpoint', '/settings/exports/follows.csv' | ||||||
|  |   end | ||||||
|  | end | ||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user