| import { describe, expect, it } from 'vitest' |
| import { |
| isRegistrationEmailSuffixAllowed, |
| isRegistrationEmailSuffixDomainValid, |
| normalizeRegistrationEmailSuffixDomain, |
| normalizeRegistrationEmailSuffixDomains, |
| normalizeRegistrationEmailSuffixWhitelist, |
| parseRegistrationEmailSuffixWhitelistInput |
| } from '@/utils/registrationEmailPolicy' |
|
|
| describe('registrationEmailPolicy utils', () => { |
| it('normalizeRegistrationEmailSuffixDomain lowercases, strips @, and ignores invalid chars', () => { |
| expect(normalizeRegistrationEmailSuffixDomain(' @Exa!mple.COM ')).toBe('example.com') |
| }) |
|
|
| it('normalizeRegistrationEmailSuffixDomains deduplicates normalized domains', () => { |
| expect( |
| normalizeRegistrationEmailSuffixDomains([ |
| '@example.com', |
| 'Example.com', |
| '', |
| '-invalid.com', |
| 'foo..bar.com', |
| ' @foo.bar ', |
| '@foo.bar' |
| ]) |
| ).toEqual(['example.com', 'foo.bar']) |
| }) |
|
|
| it('parseRegistrationEmailSuffixWhitelistInput supports separators and deduplicates', () => { |
| const input = '\n @example.com,example.com,@foo.bar\t@FOO.bar ' |
| expect(parseRegistrationEmailSuffixWhitelistInput(input)).toEqual(['example.com', 'foo.bar']) |
| }) |
|
|
| it('parseRegistrationEmailSuffixWhitelistInput drops tokens containing invalid chars', () => { |
| const input = '@exa!mple.com, @foo.bar, @bad#token.com, @ok-domain.com' |
| expect(parseRegistrationEmailSuffixWhitelistInput(input)).toEqual(['foo.bar', 'ok-domain.com']) |
| }) |
|
|
| it('parseRegistrationEmailSuffixWhitelistInput drops structurally invalid domains', () => { |
| const input = '@-bad.com, @foo..bar.com, @foo.bar, @xn--ok.com' |
| expect(parseRegistrationEmailSuffixWhitelistInput(input)).toEqual(['foo.bar', 'xn--ok.com']) |
| }) |
|
|
| it('parseRegistrationEmailSuffixWhitelistInput returns empty list for blank input', () => { |
| expect(parseRegistrationEmailSuffixWhitelistInput(' \n \n')).toEqual([]) |
| }) |
|
|
| it('normalizeRegistrationEmailSuffixWhitelist returns canonical @domain list', () => { |
| expect( |
| normalizeRegistrationEmailSuffixWhitelist([ |
| '@Example.com', |
| 'foo.bar', |
| '', |
| '-invalid.com', |
| ' @foo.bar ' |
| ]) |
| ).toEqual(['@example.com', '@foo.bar']) |
| }) |
|
|
| it('isRegistrationEmailSuffixDomainValid matches backend-compatible domain rules', () => { |
| expect(isRegistrationEmailSuffixDomainValid('example.com')).toBe(true) |
| expect(isRegistrationEmailSuffixDomainValid('foo-bar.example.com')).toBe(true) |
| expect(isRegistrationEmailSuffixDomainValid('-bad.com')).toBe(false) |
| expect(isRegistrationEmailSuffixDomainValid('foo..bar.com')).toBe(false) |
| expect(isRegistrationEmailSuffixDomainValid('localhost')).toBe(false) |
| }) |
|
|
| it('isRegistrationEmailSuffixAllowed allows any email when whitelist is empty', () => { |
| expect(isRegistrationEmailSuffixAllowed('user@example.com', [])).toBe(true) |
| }) |
|
|
| it('isRegistrationEmailSuffixAllowed applies exact suffix matching', () => { |
| expect(isRegistrationEmailSuffixAllowed('user@example.com', ['@example.com'])).toBe(true) |
| expect(isRegistrationEmailSuffixAllowed('user@sub.example.com', ['@example.com'])).toBe(false) |
| }) |
| }) |
|
|