src/index.spec.js
/* eslint-disable no-underscore-dangle, import/no-cycle */
const { expect } = require('chai');
const nock = require('nock');
const MailchimpExport = require('./index');
describe('src/index.js - Instance', () => {
it('should create new instance without fail', () => {
const MAILCHIMP_TOKEN = 'testToken-us17';
const mailchimpExport = new MailchimpExport(MAILCHIMP_TOKEN);
expect(typeof mailchimpExport.listMembers).to.equal('function');
expect(typeof mailchimpExport.campaignSubscriberActivity).to.equal('function');
});
it('should throw error when no token is passed', () => {
let mailchimpExport;
try {
mailchimpExport = new MailchimpExport();
} catch (e) {
console.log(typeof e);
expect(e).to.be.an('Error');
expect(e.message).to.equal('missing or invalid api key: undefined');
expect(mailchimpExport).to.equal(undefined);
}
});
});
describe('src/index.js - Usage', () => {
const MAILCHIMP_TOKEN = 'testToken-us17';
const mailchimpExport = new MailchimpExport(MAILCHIMP_TOKEN);
const rawList = '["Email Address","First Name","Last Name","Address","Phone Number","MEMBER_RATING","OPTIN_TIME","OPTIN_IP","CONFIRM_TIME","CONFIRM_IP","LATITUDE","LONGITUDE","GMTOFF","DSTOFF","TIMEZONE","CC","REGION","LAST_CHANGED","LEID","EUID","NOTES"]\n'
+ '["test@gmail.com","","","","",2,"2018-04-13 10:57:02",null,"2018-04-13 10:57:02","13.210.204.207",null,null,null,null,null,null,null,"2018-04-13 10:57:02","45967475","3b0a62b412",null]\n'
+ '["test2@gmail.com","","","","",2,"2018-04-13 10:57:02",null,"2018-04-13 10:57:02","13.210.204.207",null,null,null,null,null,null,null,"2018-04-13 10:57:02","45967475","3b0a62b412",null]';
const rawSubscribers = '{"test@gmail.com":[{"action":"open","timestamp":"2018-04-08 09:01:27","url":null,"ip":"66.249.82.127"},{"action":"open","timestamp":"2018-04-09 02:42:31","url":null,"ip":"66.249.82.169"}]}';
nock('https://us17.api.mailchimp.com')
.persist()
.get('/export/1.0/list?id=listId&apikey=testToken-us17')
.reply(200, rawList);
nock('https://us17.api.mailchimp.com')
.persist()
.get('/export/1.0/campaignSubscriberActivity?id=campaignId&apikey=testToken-us17')
.reply(200, rawSubscribers);
it('should return a promise successfully when listMembers is called', (done) => {
const response = mailchimpExport.listMembers({ id: 'listId' });
expect(typeof response).to.equal('object');
expect(response.then).is.a('function');
response.then(() => done());
});
it('should return a request/request object listMembers w/ option [raw=true] is called & complete', (done) => {
const requestObject = mailchimpExport.listMembers({ id: 'listId', raw: true });
expect(requestObject).to.contain.keys(['__isRequestRequest', 'httpModule', 'agent']);
requestObject.on('complete', () => done());
});
it('should should export campaign subscribers successfully', () => {
const requestObject = mailchimpExport.campaignSubscriberActivity({ id: 'campaignId' });
expect(typeof requestObject).to.equal('object');
expect(requestObject.then).to.be.a('function');
});
it('should should export campaign subscribers successfully w/empty data', () => {
nock('https://us17.api.mailchimp.com')
.get('/export/1.0/campaignSubscriberActivity?id=emptyCampaignId&apikey=testToken-us17')
.reply(200, '');
const requestObject = mailchimpExport.campaignSubscriberActivity({ id: 'emptyCampaignId' });
expect(typeof requestObject).to.equal('object');
expect(requestObject.then).to.be.a('function');
});
it('should return a request/request object campaignSubscriberActivity w/ option [raw=true] is called & complete', (done) => {
const requestObject = mailchimpExport.campaignSubscriberActivity({ id: 'campaignId', raw: true });
expect(requestObject).to.contain.keys(['__isRequestRequest', 'httpModule', 'agent']);
requestObject.on('complete', () => done());
});
it('should throw error when validation params is not an object', () => {
try {
mailchimpExport.validateParams();
} catch (e) {
expect(e.message).to.equal('params must be an object');
}
});
it('should throw error when validation params does not have an `id`', () => {
try {
mailchimpExport.validateParams({ test: 'test' });
} catch (e) {
expect(e.message).to.equal('id not found');
}
});
it('should parse list data successfully', () => {
const result = mailchimpExport.parseRawList(rawList);
expect(result).to.be.an('array');
expect(result[0]).to.contain.keys(['Email Address', 'First Name', 'Last Name']);
expect(result[0]['Email Address']).to.equal('test@gmail.com');
expect(result[1]['Email Address']).to.equal('test2@gmail.com');
});
});