Skip to content

Commit

Permalink
Node client notes and call logs API support[sc-55272] (#85)
Browse files Browse the repository at this point in the history
  • Loading branch information
SoeunSona authored Dec 14, 2023
1 parent 3512acd commit 158c05d
Show file tree
Hide file tree
Showing 6 changed files with 210 additions and 0 deletions.
15 changes: 15 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -123,6 +123,9 @@ ChartMogul.Customer.merge(config, {

ChartMogul.Customer.contacts(config, customerUuid, { per_page: 10, cursor: 'cursor==' })
ChartMogul.Customer.createContact(config, customerUuid, data)

ChartMogul.Customer.notes(config, customerUuid, { per_page: 10, cursor: 'cursor==' })
ChartMogul.Customer.createNote(config, customerUuid, data)
```

#### [Contacts](https://dev.chartmogul.com/docs/contacts)
Expand All @@ -137,6 +140,18 @@ ChartMogul.Contact.all(config, { per_page: 10, cursor: 'cursor==' })

```

#### [Customer Notes](https://dev.chartmogul.com/docs/customer_notes)

```js
ChartMogul.CustomerNote.create(config, data)
ChartMogul.CustomerNote.retrieve(config, noteUuid)
ChartMogul.CustomerNote.patch(config, noteUuid)
ChartMogul.CustomerNote.destroy(config, noteUuid)
ChartMogul.CustomerNote.all(config, { per_page: 10, cursor: 'cursor==', customer_uuid: customerUuid})

```


#### [Plans](https://dev.chartmogul.com/docs/plans)

```js
Expand Down
2 changes: 2 additions & 0 deletions lib/chartmogul.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ const errors = require('./chartmogul/errors');
const Metrics = require('./chartmogul/metrics');

const Customer = require('./chartmogul/customer');
const CustomerNote = require('./chartmogul/customer-note');
const Contact = require('./chartmogul/contact');
const DataSource = require('./chartmogul/data-source');
const Plan = require('./chartmogul/plan');
Expand All @@ -30,6 +31,7 @@ const ChartMogul = {
Config,
CustomAttribute,
Customer,
CustomerNote,
Contact,
DataSource,
Enrichment,
Expand Down
11 changes: 11 additions & 0 deletions lib/chartmogul/customer-note.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
'use strict';

const Resource = require('./resource');

class CustomerNote extends Resource {
static get path () {
return '/v1/customer_notes{/noteUuid}';
}
}

module.exports = CustomerNote;
11 changes: 11 additions & 0 deletions lib/chartmogul/customer.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

const Resource = require('./resource');
const util = require('./util');
const CustomerNote = require('./customer-note');

class Customer extends Resource {
static get path () {
Expand All @@ -27,6 +28,16 @@ class Customer extends Resource {
const path = util.expandPath(this.path, [customerId, 'contacts']);
return Resource.request(config, 'POST', path, params, callback);
}

static notes (config, customerId, params, callback) {
const path = util.expandPath(CustomerNote.path, []);
return Resource.request(config, 'GET', path, { ...params, customerId }, callback);
}

static createrNote (config, customerId, params, callback) {
const path = util.expandPath(CustomerNote.path, []);
return Resource.request(config, 'POST', path, { ...params, customerId }, callback);
}
}

// @Override
Expand Down
118 changes: 118 additions & 0 deletions test/chartmogul/customer-note.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,118 @@
'use strict';

const ChartMogul = require('../../lib/chartmogul');
const config = new ChartMogul.Config('token');
const expect = require('chai').expect;
const nock = require('nock');
const CustomerNote = ChartMogul.CustomerNote;

describe('CustomerNote', () => {
it('creates a note from a customer', () => {
const uuid = 'cus_00000000-0000-0000-0000-000000000000';
const postBody = {
customer_uuid: uuid,
type: 'note',
text: 'This is a note'
};

nock(config.API_BASE)
.post('/v1/customer_notes', postBody)
.reply(200, {
uuid: 'note_00000000-0000-0000-0000-000000000000',
customer_uuid: uuid,
type: 'note',
text: 'This is a note',
created_at: '2021-10-20T14:00:00.000Z',
updated_at: '2021-10-20T14:00:00.000Z',
author: 'John Doe ([email protected])'
});

CustomerNote.create(config, postBody)
.then(res => {
expect(res.customer_uuid).to.be.equal(uuid);
expect(res.text).to.be.equal('This is a note');
});
});

it('lists all notes from a customer', () => {
const uuid = 'cus_00000000-0000-0000-0000-000000000000';

nock(config.API_BASE)
.get('/v1/customer_notes')
.reply(200, {
entries: [{
uuid: 'note_00000000-0000-0000-0000-000000000000',
customer_uuid: 'cus_00000000-0000-0000-0000-000000000000',
author: 'John Doe ([email protected])',
text: 'This is a note',
created_at: '2015-01-01T12:00:00-05:00',
updated_at: '2015-01-01T12:00:00-05:00',
type: 'note'
}]
});

CustomerNote.all(config, uuid)
.then(res => {
expect(res.entries).to.haveLength(1);
});
});

it('retrieves a customer note', () => {
const uuid = 'note_00000000-0000-0000-0000-000000000000';

nock(config.API_BASE)
.get(`/v1/customer_notes/${uuid}`)
.reply(200, {
uuid,
customer_uuid: 'cus_00000000-0000-0000-0000-000000000000',
type: 'note',
text: 'This is a note',
created_at: '2021-10-20T14:00:00.000Z',
updated_at: '2021-10-20T14:00:00.000Z',
author: 'John Doe ([email protected])'
});

CustomerNote.retrieve(config, uuid).then(res => {
expect(res).to.have.property('uuid');
});
});

it('updates a customer note', () => {
const uuid = 'note_00000000-0000-0000-0000-000000000000';
const postBody = {
text: 'This is a note'
};

nock(config.API_BASE)
.patch(`/v1/customer_notes/${uuid}`, postBody)
.reply(200, {
/* eslint-disable camelcase */
uuid,
customer_uuid: 'cus_00000000-0000-0000-0000-000000000000',
type: 'note',
text: 'This is a note',
created_at: '2021-10-20T14:00:00.000Z',
updated_at: '2021-10-20T14:00:00.000Z',
author: 'John Doe ([email protected])'
/* eslint-enable camelcase */
});

CustomerNote.patch(config, uuid, postBody)
.then(res => {
expect(res.text).to.be.equal('This is a note');
});
});

it('deletes a customer note', () => {
const uuid = 'con_00000000-0000-0000-0000-000000000000';

nock(config.API_BASE)
.delete(`/v1/customer_notes/${uuid}`)
.reply(204);

CustomerNote.destroy(config, uuid)
.then(res => {
expect(res).to.be.equal({});
});
});
});
53 changes: 53 additions & 0 deletions test/chartmogul/customer.js
Original file line number Diff line number Diff line change
Expand Up @@ -187,6 +187,59 @@ describe('Customer', () => {
expect(res.has_more).to.eql(false);
});
});

it('creates a new note from a customer', () => {
const customerUuid = 'cus_00000000-0000-0000-0000-000000000000';
const postBody = {
customer_uuid: customerUuid,
type: 'note',
author_email: '[email protected]',
note: 'This is a note'
};

nock(config.API_BASE)
.post('/v1/customer_notes', postBody)
.reply(200, {
uuid: 'note_00000000-0000-0000-0000-000000000000',
customer_uuid: 'cus_00000000-0000-0000-0000-000000000000',
author: 'John Doe ([email protected])',
text: 'This is a note',
created_at: '2015-01-01T12:00:00-05:00',
updated_at: '2015-01-01T12:00:00-05:00',
type: 'note'
});

Customer.createrNote(config, customerUuid, postBody)
.then(res => {
expect(res).to.have.property('uuid');
});
});

it('gets all notes from a customer', () => {
const customerUuid = 'cus_00000000-0000-0000-0000-000000000000';

nock(config.API_BASE)
.get(`/v1/customer_notes?customer_uuid=${customerUuid}`)
.reply(200, {
entries: [{
uuid: 'note_00000000-0000-0000-0000-000000000000',
customer_uuid: 'cus_00000000-0000-0000-0000-000000000000',
author: 'John Doe ([email protected])',
text: 'This is a note',
created_at: '2015-01-01T12:00:00-05:00',
updated_at: '2015-01-01T12:00:00-05:00',
type: 'note'
}]
});

Customer.notes(config, customerUuid)
.then(res => {
expect(res).to.have.property('entries');
expect(res.entries).to.be.instanceof(Array);
expect(res.cursor).to.eql('MjAyMy0wMy0xM1QxMjowMTozMi44MD==');
expect(res.has_more).to.eql(false);
});
});
});

/** Suite that originally belonged in the Enrichment module.
Expand Down

0 comments on commit 158c05d

Please sign in to comment.