Fix handling of featured tag removal (#34887)
This commit is contained in:
		
					parent
					
						
							
								d47199dd4b
							
						
					
				
			
			
				commit
				
					
						00b56932de
					
				
			
		
					 2 changed files with 50 additions and 17 deletions
				
			
		|  | @ -26,6 +26,8 @@ class FeaturedTag < ApplicationRecord | |||
| 
 | ||||
|   normalizes :name, with: ->(name) { name.strip.delete_prefix('#') } | ||||
| 
 | ||||
|   scope :by_name, ->(name) { joins(:tag).where(tag: { name: HashtagNormalizer.new.normalize(name) }) } | ||||
| 
 | ||||
|   before_validation :set_tag | ||||
| 
 | ||||
|   before_create :reset_data | ||||
|  |  | |||
|  | @ -4,29 +4,60 @@ require 'rails_helper' | |||
| 
 | ||||
| RSpec.describe ActivityPub::Activity::Remove do | ||||
|   let(:sender) { Fabricate(:account, featured_collection_url: 'https://example.com/featured') } | ||||
|   let(:status) { Fabricate(:status, account: sender) } | ||||
| 
 | ||||
|   let(:json) do | ||||
|     { | ||||
|       '@context': 'https://www.w3.org/ns/activitystreams', | ||||
|       id: 'foo', | ||||
|       type: 'Add', | ||||
|       actor: ActivityPub::TagManager.instance.uri_for(sender), | ||||
|       object: ActivityPub::TagManager.instance.uri_for(status), | ||||
|       target: sender.featured_collection_url, | ||||
|     }.with_indifferent_access | ||||
|   end | ||||
| 
 | ||||
|   describe '#perform' do | ||||
|     subject { described_class.new(json, sender) } | ||||
| 
 | ||||
|     before do | ||||
|       StatusPin.create!(account: sender, status: status) | ||||
|       subject.perform | ||||
|     context 'when removing a pinned status' do | ||||
|       let(:status) { Fabricate(:status, account: sender) } | ||||
| 
 | ||||
|       let(:json) do | ||||
|         { | ||||
|           '@context': 'https://www.w3.org/ns/activitystreams', | ||||
|           id: 'foo', | ||||
|           type: 'Remove', | ||||
|           actor: ActivityPub::TagManager.instance.uri_for(sender), | ||||
|           object: ActivityPub::TagManager.instance.uri_for(status), | ||||
|           target: sender.featured_collection_url, | ||||
|         }.deep_stringify_keys | ||||
|       end | ||||
| 
 | ||||
|       before do | ||||
|         StatusPin.create!(account: sender, status: status) | ||||
|       end | ||||
| 
 | ||||
|       it 'removes a pin' do | ||||
|         expect { subject.perform } | ||||
|           .to change { sender.pinned?(status) }.to(false) | ||||
|       end | ||||
|     end | ||||
| 
 | ||||
|     it 'removes a pin' do | ||||
|       expect(sender.pinned?(status)).to be false | ||||
|     context 'when removing a featured tag' do | ||||
|       let(:tag) { Fabricate(:tag) } | ||||
| 
 | ||||
|       let(:json) do | ||||
|         { | ||||
|           '@context': 'https://www.w3.org/ns/activitystreams', | ||||
|           id: 'foo', | ||||
|           type: 'Remove', | ||||
|           actor: ActivityPub::TagManager.instance.uri_for(sender), | ||||
|           object: { | ||||
|             type: 'Hashtag', | ||||
|             name: "##{tag.display_name}", | ||||
|             href: "https://example.com/tags/#{tag.name}", | ||||
|           }, | ||||
|           target: sender.featured_collection_url, | ||||
|         }.deep_stringify_keys | ||||
|       end | ||||
| 
 | ||||
|       before do | ||||
|         sender.featured_tags.find_or_create_by!(tag: tag) | ||||
|       end | ||||
| 
 | ||||
|       it 'removes a pin' do | ||||
|         expect { subject.perform } | ||||
|           .to change { sender.featured_tags.exists?(tag: tag) }.to(false) | ||||
|       end | ||||
|     end | ||||
|   end | ||||
| end | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue