/// export import mocha = require('../../test/mocha'); var expect = mocha.chai.expect; var spy = mocha.sinon.spy; var mock = mocha.mock; var rcsdk = mocha.rcsdk; describe('RCSDK.helpers.Contact', function() { 'use strict'; var Contact = rcsdk.getContactHelper(); describe('match & matchAsPhone', function() { it('matches a string against a contact', function() { var contact = { firstName: 'firstName', lastName: 'lastName', company: 'lastName', nickName: 'lastName', middleName: 'lastName', email: 'lastName', email2: 'lastName', email3: 'lastName', homePhone: '+homePhone', homePhone2: 'lastName', businessPhone: 'lastName', businessPhone2: 'lastName', mobilePhone: 'lastName', companyPhone: 'lastName', assistantPhone: 'lastName', carPhone: 'lastName', otherPhone: 'lastName', callbackPhone: 'lastName', businessFax: 'lastName', otherFax: 'lastName', businessAddress: { country: 'businessAddress-street', street: 'businessAddress-street', city: 'businessAddress-city', state: 'businessAddress-state', zip: 'businessAddress-zip' }, homeAddress: { country: 'homeAddress-street', street: 'homeAddress-street', city: 'homeAddress-city', state: 'homeAddress-state', zip: 'homeAddress-zip' }, otherAddress: { country: 'otherAddress-street', street: 'otherAddress-street', city: 'otherAddress-city', state: 'otherAddress-state', zip: 'otherAddress-zip' } }; expect(Contact.match(contact, 'firstName')).to.equal(contact.firstName); expect(Contact.match(contact, 'lastName')).to.equal(contact.lastName); expect(Contact.matchAsPhone(contact, 'homePhone')).to.equal(contact.homePhone); expect(Contact.matchAsPhone(contact, 'businessAddress-street')).to.equal(null); // search in address expect(Contact.match(contact, 'businessAddress-street')).to.equal(contact.businessAddress.street); expect(Contact.match(contact, 'businessAddress-street', {inAddresses: false})).to.equal(null); }); }); describe('attachContacts', function() { it('provides corresponding contacts to callerInfo objects', function() { var contacts = [ {homePhone: '+(1)foo'}, {homePhone: '+(1)foo'}, {homePhone: '+(2)bar'} ], callerInfos = [ {phoneNumber: '2bar'}, {phoneNumber: '1foo'}, {phoneNumber: 'notfound'} ]; Contact.attachToCallerInfos(callerInfos, contacts); expect(callerInfos[0].contact).to.equal(contacts[2]); expect(callerInfos[0].contactPhone).to.equal(contacts[2].homePhone); // first contact must win expect(callerInfos[1].contact).to.equal(contacts[0]); expect(callerInfos[1].contactPhone).to.equal(contacts[0].homePhone); expect(callerInfos[1].contact).to.not.equal(contacts[1]); expect(callerInfos[2].contact).to.be.an('undefined'); expect(callerInfos[2].contact).to.be.an('undefined'); expect(callerInfos[2].contactPhone).to.be.an('undefined'); }); }); describe('filter', function() { var contacts = [ {lastName: 'unavailable', availability: 'Purged'}, {firstName: 'foo', availability: 'Alive'}, {lastName: 'foo', businessFax: 'foo', availability: 'Alive'}, {homePhone: 'foo', availability: 'Alive'} ]; it('rules out dead objects by default', function() { var filtered = contacts.filter(Contact.filter()); expect(filtered.length).to.equal(3); expect(filtered[0]).to.equal(contacts[1]); expect(filtered[1]).to.equal(contacts[2]); expect(filtered[2]).to.equal(contacts[3]); }); it('rules out by search phrase', function() { var filtered = contacts.filter(Contact.filter({startsWith: 'foo'})); expect(filtered.length).to.equal(3); expect(filtered[0]).to.equal(contacts[1]); expect(filtered[1]).to.equal(contacts[2]); expect(filtered[2]).to.equal(contacts[3]); }); it('rules out by items with no phones', function() { var filtered = contacts.filter(Contact.filter({phonesOnly: true})); expect(filtered.length).to.equal(1); expect(filtered[0]).to.equal(contacts[3]); }); it('rules out by items with no faxes', function() { var filtered = contacts.filter(Contact.filter({faxesOnly: true})); expect(filtered.length).to.equal(1); expect(filtered[0]).to.equal(contacts[2]); }); }); describe('comparator', function() { var contacts = [ {lastName: 'b'}, {firstName: 'b'}, {firstName: 'a'} ]; it('sorts objects by "full name"', function() { var sorted = [].concat(contacts).sort(Contact.comparator()); expect(sorted[0]).to.equal(contacts[2]); expect(sorted[1]).to.equal(contacts[0]); expect(sorted[2]).to.equal(contacts[1]); }); }); describe('validate', function() { it('performs basic validation', function() { var res = Contact.validate({}); expect(res.isValid).to.equal(false); expect(res.errors['firstName'][0]).to.be.instanceOf(Error); expect(res.errors['lastName'][0]).to.be.instanceOf(Error); expect(res.errors['email']).to.be.an('undefined'); expect(res.errors['email2']).to.be.an('undefined'); expect(res.errors['email3']).to.be.an('undefined'); }); it('performs complex validation', function() { var res = Contact.validate({email: 'foo', email2: 'bar', email3: 'baz'}); expect(res.isValid).to.equal(false); expect(res.errors['firstName'][0]).to.be.instanceOf(Error); expect(res.errors['lastName'][0]).to.be.instanceOf(Error); expect(res.errors['email'][0]).to.be.instanceOf(Error); expect(res.errors['email2'][0]).to.be.instanceOf(Error); expect(res.errors['email3'][0]).to.be.instanceOf(Error); }); it('passes validation if values are correct', function() { var res = Contact.validate({ email: 'foo@bar.baz', email2: 'foo@bar.baz', email3: 'foo@bar.baz', firstName: 'foo', lastName: 'bar' }); expect(res.isValid).to.equal(true); expect(res.errors).to.deep.equal({}); }); it('passes validation if values are correct', function() { var res = Contact.validate({ firstName: 'foo', lastName: 'bar' }); expect(res.isValid).to.equal(true); expect(res.errors).to.deep.equal({}); }); }); });