import { parseAddress, EmailSettings, Email, isEqualEmail, isValidDomainName, parseAddresses, } from "./index"; const emailSettingsObj = { allowDomainPunycode: true, allowLocalPartPunycode: true, allowDomainIp: true, allowStrictLocalPart: false, allowSpaces: true, allowName: true, allowLocalDomainName: true, }; const emailSettingsInstance = EmailSettings.parse(emailSettingsObj); describe("email", () => { // testing equals method it("emails are equal, both - instances of Email class with name", () => { const email = new Email("John Doe", "john@doe.com"); const email2 = new Email("John Doe", "john@doe.com"); const isEmailEqual = email.equals(email2); expect(isEmailEqual).toBe(true); }); it("emails is not equal, both - instances of Email class with name", () => { const email = new Email("John Doe", "john@doe.com"); const email2 = new Email("John Doe2", "john@doe.com"); const isEmailEqual = email.equals(email2); expect(isEmailEqual).toBe(false); }); it("emails are equal, 1st: instance of Email class, 2nd: string according to RFC 5322, both emails with name", () => { const email = new Email("Bob Example", "bob@example.com"); const email2 = '"Bob Example" '; const isEmailEqual = email.equals(email2); expect(isEmailEqual).toBe(true); }); it("emails is not equal, 1st: instance of Email class, 2nd: string according to RFC 5322, both emails with name", () => { const email = new Email("Bob1 Example", "bob@example.com"); const email2 = '"Bob Example" '; const isEmailEqual = email.equals(email2); expect(isEmailEqual).toBe(false); }); it("emails is not equal, both - instances of Email class, 1st email without name", () => { const email = new Email(undefined, "john@doe.com"); const email2 = new Email("John Doe", "john@doe.com"); const isEmailEqual = email.equals(email2); expect(isEmailEqual).toBe(false); }); it("emails is not equal, 1st: instance of Email class with name, 2nd: string according to RFC 5321 (without name)", () => { const email = new Email("Bob Example", "bob@example.com"); const email2 = "bob@example.com"; const isEmailEqual = email.equals(email2); expect(isEmailEqual).toBe(false); }); it("emails is not equal, 1st: instance of Email class, 2nd: object with same parameters", () => { const email = new Email("Bob Example", "bob@example.com"); const email2 = { name: "Bob Example", email: "bob@example.com", }; const isEmailEqual = email.equals(email2); expect(isEmailEqual).toBe(false); }); // testing isEqualEmail function it("emails RFC 5322 are equal", () => { const email = '"Bob Example" '; const email2 = '"Bob Example" '; const isEmailEqual = isEqualEmail(email, email2); expect(isEmailEqual).toBe(true); }); it("emails RFC 5322 are equal, 2nd email`s name without quotes", () => { const email = '"Bob Example" '; const email2 = "Bob Example "; const isEmailEqual = isEqualEmail(email, email2); expect(isEmailEqual).toBe(true); }); it("emails are equal", () => { const email = "bob@example.com"; const email2 = "bob@example.com"; const isEmailEqual = isEqualEmail(email, email2); expect(isEmailEqual).toBe(true); }); it("emails RFC 5322 are equal with different names", () => { const email = '"Bob Example" '; const email2 = '"Bob Example1" '; const isEmailEqual = isEqualEmail(email, email2); expect(isEmailEqual).toBe(true); }); it("emails RFC 5322 are equal with different names, 2nd email`s name without quotes", () => { const email = '"Bob Example" '; const email2 = "Bob Example1 "; const isEmailEqual = isEqualEmail(email, email2); expect(isEmailEqual).toBe(true); }); it("emails is not equal", () => { const email = "bob@example.com"; const email2 = "bob@example1.com"; const isEmailEqual = isEqualEmail(email, email2); expect(isEmailEqual).toBe(false); }); it("emails RFC 5322 is not equal with same names and different addresses", () => { const email = '"Bob Example" '; const email2 = '"Bob Example" '; const isEmailEqual = isEqualEmail(email, email2); expect(isEmailEqual).toBe(false); }); it("passed invalid emails", () => { const email = "test@test.com, test2@test.com"; const email2 = "test@example."; const isEmailEqual = isEqualEmail(email, email2); expect(isEmailEqual).toBe(false); }); // testing isValidDomainName function it("validate domain name", () => { const domain = "test.ru"; const isDomainValid = isValidDomainName(domain); expect(isDomainValid).toBe(true); }); it("validate domain name with spaces", () => { const domain = " test.ru"; const isDomainValid = isValidDomainName(domain); expect(isDomainValid).toBe(false); }); it("validate domain name with punycode symbols", () => { const domain = "maƱana.com"; const isDomainValid = isValidDomainName(domain); expect(isDomainValid).toBe(true); }); it("validate domain name with IP address with brackets", () => { const domain = "[127.0.0.1]"; const isDomainValid = isValidDomainName(domain); expect(isDomainValid).toBe(true); }); it("validate domain name with IP address without brackets", () => { const domain = "127.0.0.1"; const isDomainValid = isValidDomainName(domain); expect(isDomainValid).toBe(true); }); it('validate domain name only with digits in TLD: "test.00"', () => { const domain = "test.00"; const isDomainValid = isValidDomainName(domain); expect(isDomainValid).toBe(true); }); it('validate domain name with digits in TLD: "test.com1"', () => { const domain = "test.com1"; const isDomainValid = isValidDomainName(domain); expect(isDomainValid).toBe(true); }); it("validate local domain", () => { const domain = "local"; const isDomainValid = isValidDomainName(domain); expect(isDomainValid).toBe(false); }); it('validate invalid domain name "test."', () => { const domain = "test."; const isDomainValid = isValidDomainName(domain); expect(isDomainValid).toBe(false); }); it("validate invalid domain name with spaces", () => { const domain = 'tes" "t.com'; const isDomainValid = isValidDomainName(domain); expect(isDomainValid).toBe(false); }); // testing parseAddress function it("parsing one address", () => { const emailAddress = "test@test.com"; const parsed = parseAddress(emailAddress); expect(parsed.isValid()).toBe(true); expect(parsed.email).toBe(emailAddress); }); it("parsing two addresses through function for parsing single email", () => { const emailAddress = "test@test.com, test2@test.com"; const parsed = parseAddress(emailAddress); expect(parsed.isValid()).toBe(false); expect(parsed.parseErrors[0].message).toBe("Too many email parsed"); }); it("parsing two addresses (2nd is invalid) through function for parsing single email", () => { const emailAddress = "test@test.com, test"; const parsed = parseAddress(emailAddress); expect(parsed.isValid()).toBe(false); expect(parsed.parseErrors[0].message).toBe("Too many email parsed"); }); it("parsing one address, passed emailSettings as Object", () => { const emailAddress = "test@test.com"; try { parseAddress(emailAddress, emailSettingsObj); } catch (err) { expect(err.name).toBe("TypeError"); } }); it("parsing one address, passed emailSettings as instance of EmailSettings class", () => { const emailAddress = "test@test.com"; const parsed = parseAddress(emailAddress, emailSettingsInstance); expect(parsed.isValid()).toBe(true); expect(parsed.email).toBe(emailAddress); }); // test parseAddresses function it("parsing two addresses through function for parsing emails", () => { const emailAddress = "test@test.com, test2@test2.com"; const parsed = parseAddresses(emailAddress); expect(parsed.length).toBe(2); expect(parsed[0].email).toBe("test@test.com"); expect(parsed[1].email).toBe("test2@test2.com"); }); });