All files / app/utils validation.ts

87.5% Statements 21/24
66.66% Branches 4/6
75% Functions 3/4
83.33% Lines 15/18

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32  12x 12x 83x 83x   24x 24x       121x 26x 26x       55x 12x 684x   89x             47x 47x    
// Keep in sync with source of truth from backend in app/backend/src/couchers/constants.py
const nameCharactersValidationPattern = /^[\p{L}\p{M}\p{Zs}\p{Pi}\p{Pf}\p{Pd},.'"·・&/|]+$/u;
const nameNoSurroundingWhitespaceValidationPattern = /^\P{Zs}(?:[\s\S]*\P{Zs})?$/u;
export const nameMinLength = 2;
export const nameMaxLength = 100;
 
export function validateNameChars(name: string) {
  return nameCharactersValidationPattern.test(name) && nameNoSurroundingWhitespaceValidationPattern.test(name);
}
 
// Keep in sync with source of truth from backend in app/backend/src/couchers/constants.py
export const usernameValidationPattern = /^[a-z][0-9a-z_]*[a-z0-9]$/i;
export const validatePassword = (password: string) => {
  return password.length >= 8 && password.length < 256;
};
 
// Keep in sync with source of truth from backend in app/backend/src/couchers/constants.py
export const emailValidationPattern =
  /^[0-9a-z]([0-9a-z\-_+]|(\.[0-9a-z\-_+]))*@([0-9a-z-]+\.)*[0-9a-z-]+\.[a-z]{2,}$/i;
export const timePattern = /\d{2}:\d{2}/;
 
export const profileAboutMeMinLength = 150;
 
export function validatePastDate(stringDate: string) {
  const date = new Date(stringDate);
  return !isNaN(date.getTime()) && date < new Date();
}
 
export function lowercaseAndTrimField(name: string) {
  return name.trim().toLowerCase();
}