From f2b4945c98017146c061c400098b9a984913e83b Mon Sep 17 00:00:00 2001 From: Eric Bailey Date: Fri, 20 Sep 2024 15:57:32 -0500 Subject: [PATCH] Move test file, adjust regex, add test --- __tests__/lib/string.test.ts | 82 -------------------- src/lib/strings/__tests__/email-typo.test.ts | 82 ++++++++++++++++++++ src/lib/strings/email-typo.ts | 2 +- 3 files changed, 83 insertions(+), 83 deletions(-) create mode 100644 src/lib/strings/__tests__/email-typo.test.ts diff --git a/__tests__/lib/string.test.ts b/__tests__/lib/string.test.ts index 4ee575b4b5..f226de992b 100644 --- a/__tests__/lib/string.test.ts +++ b/__tests__/lib/string.test.ts @@ -1,7 +1,5 @@ import {RichText} from '@atproto/api' -import tldts from 'tldts' -import {emailTypoCheck} from 'lib/strings/email-typo' import {parseEmbedPlayerFromUrl} from 'lib/strings/embed-player' import { createStarterPackGooglePlayUri, @@ -987,83 +985,3 @@ describe('createStarterPackGooglePlayUri', () => { expect(createStarterPackGooglePlayUri(undefined, 'rkey')).toEqual(null) }) }) - -describe('emailTypoChecker', () => { - const invalidCases = [ - 'gnail.com', - 'gnail.co', - 'gmaill.com', - 'gmaill.co', - 'gmai.com', - 'gmai.co', - 'gmal.com', - 'gmal.co', - 'gmail.co', - 'iclod.com', - 'iclod.co', - 'outllok.com', - 'outllok.co', - 'outlook.co', - 'yaoo.com', - 'yaoo.co', - 'yaho.com', - 'yaho.co', - 'yahooo.com', - 'yahooo.co', - 'yahoo.co', - 'hithere.jul', - 'agpowj.notshop', - 'thisisnot.avalid.tld.nope', - // old tld for czechoslovakia - 'czechoslovakia.cs', - // tlds that cbs was registering in 2024 but cancelled - 'liveon.cbs', - 'its.showtime', - ] - const validCases = [ - 'gmail.com', - 'outlook.com', - 'yahoo.com', - 'icloud.com', - 'firefox.com', - 'firefox.co', - 'hello.world.com', - 'buy.me.a.coffee.shop', - 'mayotte.yt', - 'aland.ax', - 'bouvet.bv', - 'uk.gb', - 'chad.td', - 'somalia.so', - 'plane.aero', - 'cute.cat', - 'together.coop', - 'findme.jobs', - 'nightatthe.museum', - 'industrial.mil', - 'czechrepublic.cz', - 'lovakia.sk', - // new gtlds in 2024 - 'whatsinyour.locker', - 'letsmakea.deal', - 'skeet.now', - 'everyone.みんな', - 'bourgeois.lifestyle', - 'california.living', - 'skeet.ing', - 'listeningto.music', - 'createa.meme', - ] - - for (const domain of invalidCases) { - it(`returns true when calling emailTypoCheck for abcde@${domain}`, () => { - expect(emailTypoCheck(`abcde@${domain}`, tldts)).toEqual(true) - }) - } - - for (const domain of validCases) { - it(`returns false when calling emailTypoCheck for abcde@${domain}`, () => { - expect(emailTypoCheck(`abcde@${domain}`, tldts)).toEqual(false) - }) - } -}) diff --git a/src/lib/strings/__tests__/email-typo.test.ts b/src/lib/strings/__tests__/email-typo.test.ts new file mode 100644 index 0000000000..42cabc1a38 --- /dev/null +++ b/src/lib/strings/__tests__/email-typo.test.ts @@ -0,0 +1,82 @@ +import {describe, expect, it} from '@jest/globals' +import tldts from 'tldts' + +import {emailTypoCheck} from '#/lib/strings/email-typo' + +describe('emailTypoChecker', () => { + const invalidCases = [ + 'gnail.com', + 'gnail.co', + 'gmaill.com', + 'gmaill.co', + 'gmai.com', + 'gmai.co', + 'gmal.com', + 'gmal.co', + 'gmail.co', + 'iclod.com', + 'iclod.co', + 'outllok.com', + 'outllok.co', + 'outlook.co', + 'yaoo.com', + 'yaoo.co', + 'yaho.com', + 'yaho.co', + 'yahooo.com', + 'yahooo.co', + 'yahoo.co', + 'hithere.jul', + 'agpowj.notshop', + 'thisisnot.avalid.tld.nope', + // old tld for czechoslovakia + 'czechoslovakia.cs', + // tlds that cbs was registering in 2024 but cancelled + 'liveon.cbs', + 'its.showtime', + ] + const validCases = [ + 'gmail.com', + // subdomains (tests end of string) + 'gnail.com.test.com', + 'outlook.com', + 'yahoo.com', + 'icloud.com', + 'firefox.com', + 'firefox.co', + 'hello.world.com', + 'buy.me.a.coffee.shop', + 'mayotte.yt', + 'aland.ax', + 'bouvet.bv', + 'uk.gb', + 'chad.td', + 'somalia.so', + 'plane.aero', + 'cute.cat', + 'together.coop', + 'findme.jobs', + 'nightatthe.museum', + 'industrial.mil', + 'czechrepublic.cz', + 'lovakia.sk', + // new gtlds in 2024 + 'whatsinyour.locker', + 'letsmakea.deal', + 'skeet.now', + 'everyone.みんな', + 'bourgeois.lifestyle', + 'california.living', + 'skeet.ing', + 'listeningto.music', + 'createa.meme', + ] + + it.each(invalidCases)(`should be invalid: abcde@%s`, domain => { + expect(emailTypoCheck(`abcde@${domain}`, tldts)).toEqual(true) + }) + + it.each(validCases)(`should be valid: abcde@%s`, domain => { + expect(emailTypoCheck(`abcde@${domain}`, tldts)).toEqual(false) + }) +}) diff --git a/src/lib/strings/email-typo.ts b/src/lib/strings/email-typo.ts index 2daf9b9637..7d252f08eb 100644 --- a/src/lib/strings/email-typo.ts +++ b/src/lib/strings/email-typo.ts @@ -1,7 +1,7 @@ import type tldts from 'tldts' const COMMON_ERROR_PATTERN = - /\b([a-zA-Z0-9._%+-]+)@(gnail\.(co|com)|gmaill\.(co|com)|gmai\.(co|com)|gmail\.co|gmal\.(co|com)|iclod\.(co|com)|icloud\.co|outllok\.(co|com)|outlok\.(co|com)|outlook\.co|yaoo\.(co|com)|yaho\.(co|com)|yahoo\.co|yahooo\.(co|com))\b/ + /([a-zA-Z0-9._%+-]+)@(gnail\.(co|com)|gmaill\.(co|com)|gmai\.(co|com)|gmail\.co|gmal\.(co|com)|iclod\.(co|com)|icloud\.co|outllok\.(co|com)|outlok\.(co|com)|outlook\.co|yaoo\.(co|com)|yaho\.(co|com)|yahoo\.co|yahooo\.(co|com))$/ export function emailTypoCheck(email: string, dynamicTldts: typeof tldts) { const isIcann = dynamicTldts.parse(email).isIcann