mailchimp-api-v3
Version:
Mailchimp wrapper for v3 of the mailchimp api, with transparant handling of batch operations
528 lines (471 loc) • 11.9 kB
JavaScript
var api_key = process.env.MAILCHIMP_TEST_API_KEY
var oauth_token = process.env.MAILCHIMP_TEST_OAUTH_TOKEN
var assert = require('assert')
var dc = process.env.DC
var Mailchimp = require('../index');
if (!api_key) {
throw 'api key is needed to run test suite'
}
describe('handle initialization', function () {
it('should fail for no api key', function () {
assert.throws(function () {
var mailchimp = new Mailchimp(null)
})
})
it('should fail for invalid api key', function () {
assert.throws(function () {
var mailchimp = new Mailchimp('invalid api key format')
})
})
it('should work for correctly formated api key', function () {
var mailchimp = new Mailchimp('key-dc')
})
it('should work for correctly formated oauth token with a DC', function () {
var mailchimp = new Mailchimp('token', 'us19')
})
})
describe('basic mailchimp api methods', function () {
var mailchimp = new Mailchimp(api_key);
it('should handle simple get', function (done) {
mailchimp.get({
path : '/lists',
}, function (err, result) {
assert.equal(err, null);
assert.ok(result)
assert.ok(result.lists)
done()
})
})
it('should handle simple get with promise', function (done) {
mailchimp.get({
path : '/lists',
}).then(function (result) {
assert.ok(result)
assert.ok(result.lists)
done()
}).catch(function (err) {
done(new Error(err));
})
})
it('should handle wrong path', function (done) {
mailchimp.get({
path : '/wrong',
}, function (err, result) {
assert.equal(err.status, 404);
done()
})
})
it('should handle wrong path with promise', function (done) {
mailchimp.get({
path : '/wrong',
}).then(function (result) {
//Error
done(result)
}).catch(function (err) {
assert.equal(err.status, 404);
done()
})
})
it('should handle get with just a path', function (done) {
mailchimp.get('/lists', function (err, result) {
assert.equal(err, null);
assert.ok(result)
assert.ok(result.lists)
done()
})
})
it('should handle get with just a path with promise', function (done) {
mailchimp.get('/lists')
.then(function (result) {
assert.ok(result);
assert.ok(result.lists);
done();
})
.catch(function (err) {
done(new Error(err))
})
})
it('should handle get with a path and query', function (done) {
mailchimp.get('/lists', {offset : 1}, function (err, result) {
assert.equal(err, null);
assert.ok(result)
assert.ok(result.lists)
done()
})
})
it('should handle get with a path and query with promise', function (done) {
mailchimp.get('/lists', {offset : 1})
.then(function (result) {
assert.ok(result)
assert.ok(result.lists)
done()
})
.catch(function (err) {
done(new Error(err))
})
})
})
describe('basic mailchimp api methods with oauth token and dc', function () {
var mailchimp = new Mailchimp(oauth_token, dc);
it('should handle simple get', function (done) {
mailchimp.get({
path : '/lists',
}, function (err, result) {
assert.equal(err, null);
assert.ok(result)
assert.ok(result.lists)
done()
})
})
it('should handle simple get with promise', function (done) {
mailchimp.get({
path : '/lists',
}).then(function (result) {
assert.ok(result)
assert.ok(result.lists)
done()
}).catch(function (err) {
done(new Error(err));
})
})
it('should handle wrong path', function (done) {
mailchimp.get({
path : '/wrong',
}, function (err, result) {
assert.equal(err.status, 404);
done()
})
})
it('should handle wrong path with promise', function (done) {
mailchimp.get({
path : '/wrong',
}).then(function (result) {
//Error
done(result)
}).catch(function (err) {
assert.equal(err.status, 404);
done()
})
})
it('should handle get with just a path', function (done) {
mailchimp.get('/lists', function (err, result) {
assert.equal(err, null);
assert.ok(result)
assert.ok(result.lists)
done()
})
})
it('should handle get with just a path with promise', function (done) {
mailchimp.get('/lists')
.then(function (result) {
assert.ok(result);
assert.ok(result.lists);
done();
})
.catch(function (err) {
done(new Error(err))
})
})
it('should handle get with a path and query', function (done) {
mailchimp.get('/lists', {offset : 1}, function (err, result) {
assert.equal(err, null);
assert.ok(result)
assert.ok(result.lists)
done()
})
})
it('should handle get with a path and query with promise', function (done) {
mailchimp.get('/lists', {offset : 1})
.then(function (result) {
assert.ok(result)
assert.ok(result.lists)
done()
})
.catch(function (err) {
done(new Error(err))
})
})
})
describe('batch mailchimp api methods', function () {
this.retries(2);
var mailchimp = new Mailchimp(api_key);
it('should handle batch with single non-array command', function (done) {
this.timeout(20000)
mailchimp.batch({
method : 'get',
path : '/lists',
}, {
verbose : false
}).then(function (result) {
assert.ok(result)
assert.ok(result.lists)
done()
}).catch(function (err) {
done(new Error(err));
})
})
it('should handle batch with single non-array command and query param', function (done) {
this.timeout(20000)
mailchimp.batch({
method : 'get',
path : '/lists',
query : {
count : 1
},
}, {
verbose : false
}).then(function (result) {
assert.ok(result)
assert.ok(result.lists)
done()
}).catch(function (err) {
done(new Error(err));
})
})
it('should handle batch operations with no wait', function (done) {
this.timeout(20000)
mailchimp.batch([
{
method : 'get',
path : '/lists',
},
{
method : 'get',
path : '/lists',
},
], function (err, result) {
assert.equal(err, null);
assert.ok(result.submitted_at);
assert.ok(result.status);
assert.ok(result.id);
done()
}, {
verbose : false,
wait : false
})
})
it('should handle batch operations with no wait with promises', function (done) {
this.timeout(20000)
mailchimp.batch([
{
method : 'get',
path : '/lists',
},
{
method : 'get',
path : '/lists',
},
], {
verbose : false,
wait : false
}).then(function (result) {
assert.ok(result.submitted_at);
assert.ok(result.status);
assert.ok(result.id);
done()
}).catch(function (err) {
done(new Error(err));
})
})
it('should handle batch operations with no unpack', function (done) {
this.timeout(20000)
mailchimp.batch([
{
method : 'get',
path : '/lists',
},
{
method : 'get',
path : '/lists',
},
], function (err, result) {
assert.equal(err, null);
assert.ok(result.submitted_at);
assert.equal(result.status, 'finished');
assert.equal(result.total_operations, 2);
done()
}, {
verbose : false,
wait : true,
unpack : false,
})
})
it('should handle batch operations with no unpack with promise', function (done) {
this.timeout(20000)
mailchimp.batch([
{
method : 'get',
path : '/lists',
},
{
method : 'get',
path : '/lists',
},
], {
verbose : false,
wait : true,
unpack : false,
}).then(function (result) {
assert.ok(result.submitted_at);
assert.equal(result.status, 'finished');
assert.equal(result.total_operations, 2);
done()
}).catch(function (err) {
done(new Error(err));
})
})
it('should handle batch operations', function (done) {
this.timeout(20000)
mailchimp.batch([
{
method : 'get',
path : '/lists',
},
{
method : 'get',
path : '/lists',
},
], function (err, result) {
assert.equal(err, null);
assert.equal(result.length, 2)
done()
}, {
verbose : false
})
})
it('should handle batch operations with promise', function (done) {
this.timeout(20000)
mailchimp.batch([
{
method : 'get',
path : '/lists',
},
{
method : 'get',
path : '/lists',
},
], {
verbose : false
}).then(function (result) {
assert.equal(result.length, 2)
done()
}).catch(function (err) {
done(new Error(err));
})
})
it('should handle batch operations with promise and query', function (done) {
this.timeout(20000)
mailchimp.batch([
{
method : 'get',
path : '/lists',
query : {
count : 8,
}
},
{
method : 'get',
path : '/lists',
query : {
count : 1,
}
},
], {
verbose : false
}).then(function (result) {
assert.equal(result.length, 2)
done()
}).catch(function (err) {
done(new Error(err));
})
})
it('should handle batchWait operations', function (done) {
this.timeout(20000)
var batch_id;
mailchimp.batch([
{
method : 'get',
path : '/lists',
},
{
method : 'get',
path : '/lists',
},
], {
verbose : false,
wait : false,
}).then(function (result) {
batch_id = result.id;
mailchimp.batchWait(batch_id, function (err, result) {
assert.equal(err, null);
assert.equal(result.length, 2)
done();
}, {verbose : false});
})
})
it('should handle batchWait operations with promise', function (done) {
this.timeout(20000)
var batch_id;
mailchimp.batch([
{
method : 'get',
path : '/lists',
},
{
method : 'get',
path : '/lists',
},
], {
verbose : false,
wait : false,
}).then(function (result) {
batch_id = result.id;
return mailchimp.batchWait(batch_id, {verbose : false});
}).then(function (result) {
assert.equal(result.length, 2)
done();
}).catch(function (err) {
done(new Error(err));
})
})
it('should handle empty batch operations with no wait', function (done) {
this.timeout(20000)
mailchimp.batch([], {
verbose : false,
wait : false
}).then(function (result) {
assert.ok(result.submitted_at);
assert.ok(result.status);
assert.ok(result.id);
done()
}).catch(function (err) {
done(new Error(err));
})
})
it('should handle empty batch operations with no unpack', function (done) {
this.timeout(20000)
mailchimp.batch([], {
verbose : false,
wait : true,
unpack : false,
}).then(function (result) {
assert.ok(result.submitted_at);
assert.equal(result.status, 'finished');
assert.equal(result.total_operations, 0);
done()
}).catch(function (err) {
done(new Error(err));
})
})
it('should handle empty batch', function (done) {
this.timeout(20000)
mailchimp.batch([], {
verbose : false,
}).then(function (result) {
assert.ok(result)
done()
}).catch(function (err) {
done(new Error(err));
})
})
})