|
1 |
| -import type { FieldAffectingData, Payload, User } from 'payload' |
| 1 | +import type { |
| 2 | + BasePayload, |
| 3 | + EmailFieldValidation, |
| 4 | + FieldAffectingData, |
| 5 | + Payload, |
| 6 | + SanitizedConfig, |
| 7 | + User, |
| 8 | +} from 'payload' |
2 | 9 |
|
3 | 10 | import { jwtDecode } from 'jwt-decode'
|
4 | 11 | import path from 'path'
|
| 12 | +import { email as emailValidation } from 'payload/shared' |
5 | 13 | import { fileURLToPath } from 'url'
|
6 | 14 | import { v4 as uuid } from 'uuid'
|
7 | 15 |
|
@@ -969,4 +977,59 @@ describe('Auth', () => {
|
969 | 977 | ).rejects.toThrow('Token is either invalid or has expired.')
|
970 | 978 | })
|
971 | 979 | })
|
| 980 | + |
| 981 | + describe('Email - format validation', () => { |
| 982 | + const mockT = jest.fn((key) => key) // Mocks translation function |
| 983 | + |
| 984 | + const mockContext: Parameters<EmailFieldValidation>[1] = { |
| 985 | + // @ts-expect-error: Mocking context for email validation |
| 986 | + req: { |
| 987 | + payload: { |
| 988 | + collections: {} as Record<string, never>, |
| 989 | + config: {} as SanitizedConfig, |
| 990 | + } as unknown as BasePayload, |
| 991 | + t: mockT, |
| 992 | + }, |
| 993 | + required: true, |
| 994 | + siblingData: {}, |
| 995 | + blockData: {}, |
| 996 | + data: {}, |
| 997 | + path: ['email'], |
| 998 | + preferences: { fields: {} }, |
| 999 | + } |
| 1000 | + it('should allow standard formatted emails', () => { |
| 1001 | + expect(emailValidation('user@example.com', mockContext)).toBe(true) |
| 1002 | + expect(emailValidation('user.name+alias@example.co.uk', mockContext)).toBe(true) |
| 1003 | + expect(emailValidation('user-name@example.org', mockContext)).toBe(true) |
| 1004 | + expect(emailValidation('user@ex--ample.com', mockContext)).toBe(true) |
| 1005 | + }) |
| 1006 | + |
| 1007 | + it('should not allow emails with double quotes', () => { |
| 1008 | + expect(emailValidation('"user"@example.com', mockContext)).toBe('validation:emailAddress') |
| 1009 | + expect(emailValidation('user@"example.com"', mockContext)).toBe('validation:emailAddress') |
| 1010 | + expect(emailValidation('"user@example.com"', mockContext)).toBe('validation:emailAddress') |
| 1011 | + }) |
| 1012 | + |
| 1013 | + it('should not allow emails with spaces', () => { |
| 1014 | + expect(emailValidation('user @example.com', mockContext)).toBe('validation:emailAddress') |
| 1015 | + expect(emailValidation('user@ example.com', mockContext)).toBe('validation:emailAddress') |
| 1016 | + expect(emailValidation('user name@example.com', mockContext)).toBe('validation:emailAddress') |
| 1017 | + }) |
| 1018 | + |
| 1019 | + it('should not allow emails with consecutive dots', () => { |
| 1020 | + expect(emailValidation('user..name@example.com', mockContext)).toBe('validation:emailAddress') |
| 1021 | + expect(emailValidation('user@example..com', mockContext)).toBe('validation:emailAddress') |
| 1022 | + }) |
| 1023 | + |
| 1024 | + it('should not allow emails with invalid domains', () => { |
| 1025 | + expect(emailValidation('user@example', mockContext)).toBe('validation:emailAddress') |
| 1026 | + expect(emailValidation('user@example..com', mockContext)).toBe('validation:emailAddress') |
| 1027 | + expect(emailValidation('user@example.c', mockContext)).toBe('validation:emailAddress') |
| 1028 | + }) |
| 1029 | + |
| 1030 | + it('should not allow domains starting or ending with a hyphen', () => { |
| 1031 | + expect(emailValidation('user@-example.com', mockContext)).toBe('validation:emailAddress') |
| 1032 | + expect(emailValidation('user@example-.com', mockContext)).toBe('validation:emailAddress') |
| 1033 | + }) |
| 1034 | + }) |
972 | 1035 | })
|
0 commit comments