59 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Ruby
		
	
	
	
			
		
		
	
	
			59 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Ruby
		
	
	
	
| # frozen_string_literal: true
 | |
| 
 | |
| require 'spec_helper'
 | |
| 
 | |
| describe Gitlab::UserExtractor do
 | |
|   let(:text) do
 | |
|     <<~TXT
 | |
|     This is a long texth that mentions some users.
 | |
|     @user-1, @user-2 and user@gitlab.org take a walk in the park.
 | |
|     There they meet @user-4 that was out with other-user@gitlab.org.
 | |
|     @user-1 thought it was late, so went home straight away
 | |
|     TXT
 | |
|   end
 | |
|   subject(:extractor) { described_class.new(text) }
 | |
| 
 | |
|   describe '#users' do
 | |
|     it 'returns an empty relation when nil was passed' do
 | |
|       extractor = described_class.new(nil)
 | |
| 
 | |
|       expect(extractor.users).to be_empty
 | |
|       expect(extractor.users).to be_a(ActiveRecord::Relation)
 | |
|     end
 | |
| 
 | |
|     it 'returns the user case insensitive for usernames' do
 | |
|       user = create(:user, username: "USER-4")
 | |
| 
 | |
|       expect(extractor.users).to include(user)
 | |
|     end
 | |
| 
 | |
|     it 'returns users by primary email' do
 | |
|       user = create(:user, email: 'user@gitlab.org')
 | |
| 
 | |
|       expect(extractor.users).to include(user)
 | |
|     end
 | |
| 
 | |
|     it 'returns users by secondary email' do
 | |
|       user = create(:email, email: 'other-user@gitlab.org').user
 | |
| 
 | |
|       expect(extractor.users).to include(user)
 | |
|     end
 | |
|   end
 | |
| 
 | |
|   describe '#matches' do
 | |
|     it 'includes all mentioned email adresses' do
 | |
|       expect(extractor.matches[:emails]).to contain_exactly('user@gitlab.org', 'other-user@gitlab.org')
 | |
|     end
 | |
| 
 | |
|     it 'includes all mentioned usernames' do
 | |
|       expect(extractor.matches[:usernames]).to contain_exactly('user-1', 'user-2', 'user-4')
 | |
|     end
 | |
|   end
 | |
| 
 | |
|   describe '#references' do
 | |
|     it 'includes all user-references once' do
 | |
|       expect(extractor.references).to contain_exactly('user-1', 'user-2', 'user@gitlab.org', 'user-4', 'other-user@gitlab.org')
 | |
|     end
 | |
|   end
 | |
| end
 |