100 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			Ruby
		
	
	
	
			
		
		
	
	
			100 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			Ruby
		
	
	
	
| # frozen_string_literal: true
 | |
| 
 | |
| require 'spec_helper'
 | |
| require 'rspec-parameterized'
 | |
| 
 | |
| RSpec.describe Gitlab::Utils::Email, feature_category: :service_desk do
 | |
|   using RSpec::Parameterized::TableSyntax
 | |
| 
 | |
|   describe '.obfuscated_email' do
 | |
|     where(:input, :output) do
 | |
|       'alex@gitlab.com'                                | 'al**@g*****.com'
 | |
|       'alex@gl.co.uk'                                  | 'al**@g****.uk'
 | |
|       'a@b.c'                                          | 'aa@b.c'
 | |
|       'qqwweerrttyy@example.com'                       | 'qq**********@e******.com'
 | |
|       'getsuperfancysupport@paywhatyouwant.accounting' | 'ge******************@p*************.accounting'
 | |
|       'q@example.com'                                  | 'qq@e******.com'
 | |
|       'q@w.'                                           | 'qq@w.'
 | |
|       'a@b'                                            | 'aa@b'
 | |
|       'trun"@"e@example.com'                           | 'tr******@e******.com'
 | |
|       '@'                                              | '@'
 | |
|       'n'                                              | 'n'
 | |
|       'no mail'                                        | 'n******'
 | |
|       'truncated@exa'                                  | 'tr*******@exa'
 | |
|       ''                                               | ''
 | |
|     end
 | |
| 
 | |
|     with_them do
 | |
|       it { expect(described_class.obfuscated_email(input)).to eq(output) }
 | |
|     end
 | |
| 
 | |
|     context 'when deform is active' do
 | |
|       where(:input, :output) do
 | |
|         'alex@gitlab.com'                                | 'al*****@g*****.c**'
 | |
|         'alex@gl.co.uk'                                  | 'al*****@g*****.u**'
 | |
|         'a@b.c'                                          | 'aa*****@b*****.c**'
 | |
|         'qqwweerrttyy@example.com'                       | 'qq*****@e*****.c**'
 | |
|         'getsuperfancysupport@paywhatyouwant.accounting' | 'ge*****@p*****.a**'
 | |
|         'q@example.com'                                  | 'qq*****@e*****.c**'
 | |
|         'q@w.'                                           | 'qq*****@w*****.'
 | |
|         'a@b'                                            | 'aa*****@b**'
 | |
|         'trun"@"e@example.com'                           | 'tr*****@e*****.c**'
 | |
|         '@'                                              | '@'
 | |
|         'no mail'                                        | 'n**'
 | |
|         'n'                                              | 'n**'
 | |
|         'truncated@exa'                                  | 'tr*****@e**'
 | |
|         ''                                               | ''
 | |
|       end
 | |
| 
 | |
|       with_them do
 | |
|         it { expect(described_class.obfuscated_email(input, deform: true)).to eq(output) }
 | |
|       end
 | |
|     end
 | |
|   end
 | |
| 
 | |
|   describe '.obfuscate_emails_in_text' do
 | |
|     where(:input, :output) do
 | |
|       nil | nil
 | |
|       '' | ''
 | |
|       'added no email address' | 'added no email address'
 | |
|       'added user@example.com' | 'added us*****@e*****.c**'
 | |
|       'added user@example.com and hello@example.com' | 'added us*****@e*****.c** and he*****@e*****.c**'
 | |
|       'removed user@example.com, hello@example.com and bye@example.com' |
 | |
|         'removed us*****@e*****.c**, he*****@e*****.c** and by*****@e*****.c**'
 | |
|       'added user#@example.com, hello!@example.com and bye$@example.com' |
 | |
|         'added us*****@e*****.c**, he*****@e*****.c** and by*****@e*****.c**'
 | |
|       'added user_@example.com, hello}@example.com and !#$%&\'*+-/=?^_{|}~@example.com' |
 | |
|         'added us*****@e*****.c**, he*****@e*****.c** and !#*****@e*****.c**'
 | |
|     end
 | |
| 
 | |
|     with_them do
 | |
|       it { expect(described_class.obfuscate_emails_in_text(input)).to eq(output) }
 | |
|     end
 | |
|   end
 | |
| 
 | |
|   describe "#normalize_email" do
 | |
|     subject { described_class.normalize_email(raw_email) }
 | |
| 
 | |
|     using RSpec::Parameterized::TableSyntax
 | |
| 
 | |
|     where(:raw_email, :expected_result) do
 | |
|       nil                     | nil
 | |
|       'notanemail@'           | 'notanemail@'
 | |
|       '@notanemail.com'       | '@notanemail.com'
 | |
|       'NotAnEmail'            | 'NotAnEmail'
 | |
|       'USER@example.com'      | 'user@example.com'
 | |
|       'u.s.e.r@example.com'   | 'u.s.e.r@example.com'
 | |
|       'user+123@example.com'  | 'user@example.com'
 | |
|       'us.er+123@example.com' | 'us.er@example.com'
 | |
|       'u.s.e.r@gmail.com'     | 'user@gmail.com'
 | |
|       'user+123@gmail.com'    | 'user@gmail.com'
 | |
|       'us.er+123@gmail.com'   | 'user@gmail.com'
 | |
|       ' us.er+123@gmail.com ' | 'user@gmail.com'
 | |
|     end
 | |
| 
 | |
|     with_them do
 | |
|       it { is_expected.to eq expected_result }
 | |
|     end
 | |
|   end
 | |
| end
 |