var Lab = require('lab'); var Code = require('code'); var IsEmail = require('..'); var Tests = require('./tests.json'); var internals = { defaultThreshold: 16 }; // Test shortcuts var isEmail = IsEmail; var lab = exports.lab = Lab.script(); var before = lab.before; var after = lab.after; var describe = lab.describe; var it = lab.it; var expect = Code.expect; // Diagnoses var diag = isEmail.diagnoses; // Expectations var expectations = Tests.map(function mapper (value) { value[1] = diag[value[1]]; return value; }); // Null characters aren't supported in JSON expectations.push(['test@[\0', diag.errExpectingDTEXT]); expectations.push(['(\0)test@example.com', diag.errExpectingCTEXT]); var tldExpectations = [ ['shouldbe@invalid', diag.errUnknownTLD], ['shouldbe@example.com', diag.valid] ]; describe('isEmail', function () { it('should check options.tldWhitelist', function (done) { expect(isEmail('person@top', { tldWhitelist: 'top', checkDNS: false })).to.equal(true); expect(isEmail('person@top', { tldWhitelist: ['com'], checkDNS: false })).to.equal(false); expect(function () { isEmail('', { tldWhitelist: 77 }); }).to.throw(/tldWhitelist/); done(); }); it('should check options.minDomainAtoms', function (done) { expect(function () { isEmail('person@top', { minDomainAtoms: -1 }); }).to.throw(/minDomainAtoms/); expect(function () { isEmail('person@top', { minDomainAtoms: 1.5 }); }).to.throw(/minDomainAtoms/); done(); }); it('should use options.errorLevel', function (done) { expect(isEmail('person@123', { errorLevel: diag.rfc5321TLDNumeric + 1 })).to.equal(0); expect(isEmail('person@123', { errorLevel: diag.rfc5321TLDNumeric })).to.equal(diag.rfc5321TLDNumeric); done(); }); it('should ensure callback provided with checkDNS', function (done) { expect(function () { isEmail('person@top', { checkDNS: true }); }).to.throw(/(?=.*\bcheckDNS\b)(?=.*\bcallback\b)/); done(); }); it('should handle omitted options', function (done) { expect(isEmail(expectations[0][0])).to.equal(expectations[0][1] < internals.defaultThreshold); done(); }); it('should handle omitted options with callback', function (done) { isEmail(expectations[0][0], function (res) { expect(res).to.equal(expectations[0][1] < internals.defaultThreshold); done(); }); }); expectations.forEach(function (obj, i) { var email = obj[0], result = obj[1]; it('should handle test ' + (i + 1), function (done) { isEmail(email, { errorLevel: 0, checkDNS: true }, function (res) { expect(res).to.equal(result); done(); }); }); }); tldExpectations.forEach(function (obj, i) { var email = obj[0]; var result = obj[1]; it('should handle tld test ' + (i + 1), function (done) { expect(isEmail(email, { errorLevel: 0, tldWhitelist: { com: true } })).to.equal(result); expect(isEmail(email, { errorLevel: 0, tldWhitelist: ['com'] })).to.equal(result); done(); }); }); it('should handle domain atom test 1', function (done) { expect(isEmail('shouldbe@invalid', { errorLevel: 0, minDomainAtoms: 2 })).to.equal(diag.errDomainTooShort); done(); }); it('should handle domain atom test 2', function (done) { expect(isEmail('valid@example.com', { errorLevel: 0, minDomainAtoms: 2 })).to.equal(diag.valid); done(); }); });