Add conversation model, <ostatus:conversation /> (#3016)
* Add <ostatus:conversation /> tag to Atom input/output Only uses ref attribute (not href) because href would be the alternate link that's always included also. Creates new conversation for every non-reply status. Carries over conversation for every reply. Keeps remote URIs verbatim, generates local URIs on the fly like the rest of them. * Fix conversation migration * More spec coverage for status before_create * Prevent n+1 query when generating Atom with the new conversations * Improve code style * Remove redundant local variable
This commit is contained in:
		
					parent
					
						
							
								b5a9c6b3d2
							
						
					
				
			
			
				commit
				
					
						5abdc77c80
					
				
			
		
					 11 changed files with 144 additions and 10 deletions
				
			
		
							
								
								
									
										2
									
								
								spec/fabricators/conversation_fabricator.rb
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								spec/fabricators/conversation_fabricator.rb
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,2 @@
 | 
			
		|||
Fabricator(:conversation) do
 | 
			
		||||
end
 | 
			
		||||
							
								
								
									
										13
									
								
								spec/models/conversation_spec.rb
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								spec/models/conversation_spec.rb
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,13 @@
 | 
			
		|||
require 'rails_helper'
 | 
			
		||||
 | 
			
		||||
RSpec.describe Conversation, type: :model do
 | 
			
		||||
  describe '#local?' do
 | 
			
		||||
    it 'returns true when URI is nil' do
 | 
			
		||||
      expect(Fabricate(:conversation).local?).to be true
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    it 'returns false when URI is not nil' do
 | 
			
		||||
      expect(Fabricate(:conversation, uri: 'abc').local?).to be false
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
| 
						 | 
				
			
			@ -377,4 +377,23 @@ RSpec.describe Status, type: :model do
 | 
			
		|||
      expect(results).to include(status)
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  describe 'before_create' do
 | 
			
		||||
    it 'sets account being replied to correctly over intermediary nodes' do
 | 
			
		||||
      first_status = Fabricate(:status, account: bob)
 | 
			
		||||
      intermediary = Fabricate(:status, thread: first_status, account: alice)
 | 
			
		||||
      final        = Fabricate(:status, thread: intermediary, account: alice)
 | 
			
		||||
 | 
			
		||||
      expect(final.in_reply_to_account_id).to eq bob.id
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    it 'creates new conversation for stand-alone status' do
 | 
			
		||||
      expect(Status.create(account: alice, text: 'First').conversation_id).to_not be_nil
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    it 'keeps conversation of parent node' do
 | 
			
		||||
      parent = Fabricate(:status, text: 'First')
 | 
			
		||||
      expect(Status.create(account: alice, thread: parent, text: 'Response').conversation_id).to eq parent.conversation_id
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue